From cf977559d6821a1ccce2acae076835a8037f2a90 Mon Sep 17 00:00:00 2001
From: chenqiyang <1406175257@qq.com>
Date: 星期一, 05 六月 2023 11:47:18 +0800
Subject: [PATCH] 1.提交萤石demo 2.修改部分UI
---
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/logo_loading_2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/offline@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist | 8
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_recordtype.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/play_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/Sadp.h | 557 +
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/play@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/ptz_scale_arrow_right@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/orange_button@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/picture_bg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/play_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/Sadp.h | 557 +
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/ptz_up_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/hdl_ez_wifi_connect_step2@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_extension.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/preview_barrel_dis@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/hdl_ez_ic_unlock_disable@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icn_location.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/guaduandianhua.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/pause_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/preview_barrel_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/preview_screenshot_dis.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/add_server4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants_Auth.h | 52
EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme | 2
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-60@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/preview_voice_btn.png | 0
EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m | 2
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/open.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCloudRecordFile.h | 36
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/cloud.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/message.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCloudRecordDownloadTask.h | 34
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/connect_wifi1.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/hdl_ez_wifi_connect_step_two@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/upgrade.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/blue_button@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/preview_talkback_dis@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/failure_account@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZProbeDeviceInfo.h | 47
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/close@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/connect_wifi2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/preview_screenshot_dis@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/no_video.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.xcdatamodeld/HDLEZDemo.xcdatamodel/contents | 4
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASCompositeConstraint.h | 26
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/logo_loading_2@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASCompositeConstraint.m | 183
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/cloud.imageset/cloud.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/connect_wifi4@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/hdl_ez_temp_pass_word@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icon_download_fill.imageset/Contents.json | 21
EZSDK/EZSDK/EZ/UIViewControllers/EZWifiTipsViewController.m | 17
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/connect_wifi3@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-60@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/message_callhelp.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/connect_wifi2@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCMediaSessionDefines.h | 107
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/failure_wifi@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/preview_recording_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/connect_wifi1@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDK.h | 946 ++
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/no_wifi@2x.png | 0
EZSDK/EZSDK.xcodeproj/project.pbxproj | 4
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/icon_download_fill.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASUtilities.h | 136
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/preview_recording_dis.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/logo.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/hdl_ez_ic_unlock_disable@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/link_account2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/play_close_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceUpgradeStatus.h | 19
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/add_server3.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceCloudServiceInfo.h | 65
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/button_disable@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/failure_account.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/upgrade@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZVideoTalkViewcontroller.xib | 135
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/preview_screenshot@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/upgrade@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAPDevInfo.h | 23
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/message_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZMain.storyboard | 2541 +++++
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/play.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/AddDevice.storyboard | 1009 ++
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/link_account4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZSADPDeviceInfo.h | 40
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/openssl/libcrypto.a | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/play.png | 0
EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m | 5
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/ptz_right_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/preview_talkback.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/preview_play_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceRecordFile.h | 26
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/preview_barrel_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio.imageset/StreamStudio.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/connect_wifi3@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/preview_talkback_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/cloud.imageset/cloud.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/failure_server.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConfigTokenInfo.h | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/preview_barrel_dis.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/preview_screenshot_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASShorthandAdditions.h | 41
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_rate.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/no_video.png | 0
EZSDK/EZSDK/EZ/Global/EZHttpUtil.m | 19
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio-2.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/blue_button_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_download.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/connect_wifi1@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceRecordDownloadTask.h | 39
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/preview_talkback_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/device_reset.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDetectorInfo.h | 41
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/picture_bg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/offline.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCVideoEncodeParam.h | 30
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/open_icon_1024@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/play_close@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/qr_scan_line.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/preview_enlarge@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/message@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/ptz_bottom_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZLeaveMessage.h | 41
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCVideoEncodeParam.h | 30
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/ptz_scale_arrow_down@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/Masonry.h | 29
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/no_message.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/preview_screenshot.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/pause_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AccentColor.colorset/Contents.json | 11
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/preview_recording.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_recordtype.imageset/ic_recordtype@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/blue_button.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icon_download_fill.imageset/icon_download_fill.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceInfo.h | 59
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/setup.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/hdl_ez_wifi_connect_step2@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/play@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/logo_loading_4@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/preview_stopplay_btn .png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio.imageset/StreamStudio.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/play_close.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/add_server3@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/preview_recording_dis.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/no_video@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/add_server1@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDKFramework.h | 54
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZStorageInfo.h | 23
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTransformer.h | 39
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZWiFiItemInfo.h | 21
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASAdditions.m | 162
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/pause.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDK.h | 268
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/pause_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EzvizWatchServerInfo.h | 26
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/preview_barrel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASAdditions.h | 72
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZHCNetDeviceInfo.h | 36
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/playback.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/white_button_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalk.h | 179
EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/EZMain.strings | 51
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceUpgradeStatus.h | 19
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewAttribute.h | 49
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAccessToken.h | 19
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraintMaker.m | 273
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/picture_bg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZTokenKit.h | 40
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraintMaker.h | 146
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/qr_scan_line@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewAttribute.m | 46
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/preview_enlarge.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/preview_enlarge@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/SceneDelegate.m | 61
EZDemo/HDLEZDemo/HDLEZDemo/SceneDelegate.h | 15
EZDemo/HDLEZDemo/HDLEZDemo/ViewController.h | 20
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/button_disable.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/hdl_ez_wifi_connect_step1@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/add_success_icon.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/ViewController.m | 72
EZSDK.IOS/EZSDK.IOS/Resources/hdl_ez_add_device_success@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/preview_talkback_dis.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZStorageInfo.h | 23
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_bg.imageset/device_bg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/com.hri.hpc.mobile.ios.player.metallib | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R4-7.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/large_back_btn@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/preview_barrel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/connect_wifi4@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/preview_recording_dis@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/connect_wifi3.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/add_server4@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/connect_wifi1.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/logo_loading_3@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/setup_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/ptz_bottom_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/orange_button.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/device_default.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/add_server2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/main.m | 18
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/connect_wifi2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_download.imageset/play_download@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/connect_wifi4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/failure_server@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/link_account2@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSLayoutConstraint+MASDebugAdditions.h | 16
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Modules/module.modulemap | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/duijiangji.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSLayoutConstraint+MASDebugAdditions.m | 146
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/add_server1.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/failure_wifi.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/link_account1@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/no_message.png | 0
EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m | 2
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/ptz_right_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/wifi_bg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/pause@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/preview_talkback@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/preview_screenshot_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Spotlight-40@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/white_button@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EzvizRecordFileInfo.h | 47
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/device_default.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/ptz_bottom_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/ptz_scale_arrow_right@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/preview_barrel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/no_wifi@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R5-5.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/play_close@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/duijiangji.imageset/duijiangji-2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/message_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/preview_recording@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/logo.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.entitlements | 10
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHiddnsDeviceInfo.h | 84
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/preview_barrel_dis.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/preview_recording.png | 0
EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m | 7
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/spkImg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/AddDevice.strings | 25
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewConstraint.m | 401
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewConstraint.h | 48
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAreaInfo.h | 19
EZDemo/HDLEZDemo/HDLEZDemo/EZSupportViewController.xib | 126
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/slider_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata | 7
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/preview_recording_dis@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceVersion.h | 27
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/large_back_btn.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/blue_button.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h | 63
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/open@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/failure_wifi@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/blue_button@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/add_success_icon.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/ptz_up_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EzvizWatchServerInfo.h | 26
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/orange_button@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTransformer.h | 39
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkView.h | 18
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/open_icon_1024.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/results_pic_bg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/ptz_scale_arrow_down@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/device@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json | 64
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCSampleHandleManager.h | 31
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZPlayerExParamInfo.h | 34
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/blue_button_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/preview_play_btn@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/slider_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/hdl_ez_ic_unlock@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/blue_button_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/spkImg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordCoverFetcherManager.h | 69
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu--2.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZGlobalSDK.h | 1059 ++
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDevicePtzAngleInfo.h | 47
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordDownloadTask.h | 86
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAlarmInfo.h | 60
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/setup@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/slider@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/add_success_icon@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/icn_location.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/add_server3.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHCNetDeviceSDK.h | 146
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/logo_loading_1.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/slider_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPMPlayPrivateTokenInfo.h | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCloudRecordDownloadTask.h | 34
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/blue_button_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/Contents.json | 22
EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m | 19
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/join_qq_group.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/logo_loading_4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/offline.png | 0
EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.pbxproj | 875 ++
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCloudRecordFile.h | 36
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/hdl_ez_ic_nav_back@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/no_wifi.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/no_message@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/playback_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/link_account4@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/Contents.json | 22
EZSDK/EZSDK/EZ/Venders/SDWebImage/SDWebImageDownloader.m | 4
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCameraInfo.h | 35
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h | 268
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/playback.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/add_server4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu--2.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/ptz_left_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/logo@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants_Auth.h | 52
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/logo_loading_1@2x.png | 0
EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m | 63
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/pause.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/failure_server.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/link_account3@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZHiddnsDeviceInfo.h | 84
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/addDevice_success.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Base.lproj/Main.storyboard | 106
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZStreamPlayer.h | 118
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_rate.imageset/play_rate.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/logo_loading_1@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/device_default@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/playback_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/hdl_ez_wifi_connect_step_one@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/link_account2@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/playback@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/preview_talkback_dis@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/play_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/message_callhelp@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/hdl_ez_temp_add@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_rate.imageset/play_rate.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZUserInfo.h | 23
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/play_close_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h | 17
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/setup.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/ptz_right_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Contents.json | 77
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/preview_talkback_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZBAVParam.h | 196
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/duijiangji.imageset/duijiangji-2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/playback_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/preview_enlarge.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/logo@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/white_button_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPlayerExParamInfo.h | 34
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/open_icon_1024.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/ptz_left_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/ptz_left_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/addDevice_success@2x.png | 0
EZSDK/EZSDK/EZSDK.m | 7
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/wifi_bg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/hdl_ez_add_device_success@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/spkImg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu--2.imageset/chuanshujilu--2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/ptz_up_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio-2.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_bg.imageset/Contents.json | 21
EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/connect_wifi3.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/device@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/link_account3.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/logo_loading_2.png | 0
EZSDK.IOS/EZSDK.IOS/Resources/hdl_ez_add_device_success@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants.h | 222
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/white_button.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/preview_screenshot.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/no_video@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/preview_unvoice_btn.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/failure_wifi.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/link_account3.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/link_account4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/icn_location.imageset/icn_location.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/no_message.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/slider.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/hdl_ez_list_next@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/preview_barrel_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/message_callhelp@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/link_account3@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/message@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZTokenKit.h | 40
EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Modules/module.modulemap | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/hdl_ez_wifi_connect_step1@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/button_disable.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/no_message@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConferenceClient.h | 238
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/logo_loading_4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/join_qq_group@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio-2.imageset/StreamStudio-2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/cloud.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/offline@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/include/EZSDK/EZSDK.h | 113
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/wifi_bg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalk.h | 179
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/ptz_bg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoQualityInfo.h | 23
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu--2.imageset/chuanshujilu--2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/ptz_bg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/logo_loading_1.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/ptz_bg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/preview_barrel_dis@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu-.imageset/chuanshujilu-.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/libEZSDK.a | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCCameraParam.h | 38
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/ptz_bg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/hdl_ez_ic_unlock@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/preview_barrel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/preview_stopplay_btn .png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/connect_wifi4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAlarmInfo.h | 60
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCMediaSessionDefines.h | 107
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/device_reset.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/hdl_ez_wifi_connect_step_one@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu-.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/AppDelegate.h | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/results_pic_bg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHCNetDeviceInfo.h | 36
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EzvizRecordFileInfo.h | 47
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/device_reset@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/no_message.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZProbeDeviceInfo.h | 47
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/add_server3@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/message_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/hdl_ez_list_next@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordDownloader.h | 49
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAreaInfo.h | 19
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/preview_screenshot_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/preview_play_btn.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/large_back_btn@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/preview_recording_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/picture_bg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/wifi_bg@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/playback@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/slider.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/failure_account@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/pause@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/setup@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/logo_loading_3@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/AppDelegate.m | 115
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASShorthandAdditions.h | 133
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAccessToken.h | 19
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZConfigTokenInfo.h | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/preview_talkback@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDevicePtzAngleInfo.h | 47
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceInfo.h | 59
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/preview_recording_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceRecordFile.h | 26
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordDownloadTask.h | 86
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/upgrade.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio-2.imageset/StreamStudio-2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu-.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/add_server2@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/Localizable.strings | 226
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/white_button_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icn_location.imageset/icn_location.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/device_default@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZLeaveMessage.h | 41
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/playback_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/preview_talkback_dis.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/add_server4@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/white_button.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/close@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/logo_loading_4@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZPlayer.h | 446 +
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceRecordDownloadTask.h | 39
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/setup_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/preview_recording_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/preview_voice_btn@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/slider_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/hdl_ez_list_next@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkView.h | 18
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu-.imageset/chuanshujilu-.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/ptz_up_sel.png | 0
EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs | 2
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/device.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/logo_loading_3.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants_WifiConfig.h | 36
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/no_wifi.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/add_server2@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZGlobalSDK.h | 1059 ++
EZDemo/HDLEZDemo/HDLEZDemo/Base.lproj/LaunchScreen.storyboard | 33
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/white_button_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn .png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/message.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/message_callhelp.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn .png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/orange_button_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceVersion.h | 27
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/setup_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDKDefines.h | 17
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceCloudServiceInfo.h | 65
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZStreamPlayer.h | 118
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/add_server1.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/add_server1@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCameraInfo.h | 35
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASLayoutConstraint.m | 13
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/device_reset@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants_WifiConfig.h | 36
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/add_success_icon@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/hdl_ez_wifi_connect_step_two@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/ptz_right_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASLayoutConstraint.h | 22
EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Info.plist | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/hdl_ez_add_device_success@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZWiFiItemInfo.h | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Headers/FQDateTimePickerView.h | 107
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkGlobal.h | 63
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/hdl_ez_temp_add@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/slider@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/ViewController+MASAdditions.m | 39
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/ViewController+MASAdditions.h | 30
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/close.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint+Private.h | 66
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/guaduandianhua.imageset/guaduandianhua.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/open.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCSampleHandleManager.h | 31
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/addDevice_success.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/hdl_ez_temp_pass_word@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/addDevice_success@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/open@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/preview_barrel_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/hdl_ez_list_next@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Info.plist | 15
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/hdl_ez_ic_nav_back@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R4.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/failure_server@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.xcdatamodeld/.xccurrentversion | 8
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkComponent.h | 23
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/no_message@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/logo_loading_2@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/link_account1.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/play_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Spotlight-40@3x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/orange_button_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZUserInfo.h | 23
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/close.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/link_account2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_extension.imageset/ic_extension@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/setup_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/spkImg.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/no_message@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/play_close_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants.h | 222
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZSADPDeviceInfo.h | 40
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/ptz_left_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/link_account4@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/orange_button.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint.m | 301
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/preview_talkback.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_rate.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/ptz_bottom_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/connect_wifi2@2x.png | 0
EZDemo/HDLEZDemo/FQDateTimeSDK.framework/FQDateTimeSDK | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint.h | 272
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/message_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/device.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/link_account1@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZOpenSDK.h | 946 ++
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/open_icon_1024@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/preview_screenshot@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAPDevInfo.h | 23
EZSDK.IOS/EZSDK.IOS/Library/lib/EZOpenSDKFramework.framework/Info.plist | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZBAVParam.h | 196
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/white_button@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon.appiconset/Contents.json | 98
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/link_account1.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/failure_account.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/preview_screenshot_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPlayer.h | 446 +
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/duijiangji.imageset/Contents.json | 21
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/button_disable@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZPMPlayPrivateTokenInfo.h | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/large_back_btn.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/icon_download_fill.imageset/icon_download_fill.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/Contents.json | 6
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDetectorInfo.h | 41
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/Contents.json | 22
EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Headers/FQDateTimeSDK.h | 18
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/play_close.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/add_server2.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZConferenceClient.h | 238
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Info.plist | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/preview_talkback_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/logo_loading_3.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoQualityInfo.h | 23
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/EZOpenSDKFramework | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/openssl/libssl.a | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/pause_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/libHDLLCNVRSDK.a | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASAdditions.h | 111
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/preview_play_btn@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASAdditions.m | 186
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/preview_screenshot_dis@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/preview_play_btn.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZHCNetDeviceSDK.h | 146
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/orange_button_sel.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/preview_screenshot_dis.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png | 0
EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj | 2
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/orange_button_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/preview_recording@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/Contents.json | 22
EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/play_close_sel@2x.png | 0
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCCameraParam.h | 38
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordDownloader.h | 49
EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordCoverFetcherManager.h | 69
847 files changed, 26,140 insertions(+), 41 deletions(-)
diff --git a/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/FQDateTimeSDK b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/FQDateTimeSDK
new file mode 100755
index 0000000..df82751
--- /dev/null
+++ b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/FQDateTimeSDK
Binary files differ
diff --git a/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Headers/FQDateTimePickerView.h b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Headers/FQDateTimePickerView.h
new file mode 100644
index 0000000..136848d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Headers/FQDateTimePickerView.h
@@ -0,0 +1,107 @@
+//
+// FQDateTimePickerView.h
+// FQTools
+//
+// Created by wuwuFQ on 2021/5/26.
+//
+
+#import <UIKit/UIKit.h>
+typedef enum{
+ FQDateTimePickerModelYMDate,// 骞存湀 2021-05
+ FQDateTimePickerModelDate,// 骞存湀鏃� 2021-05-26
+ FQDateTimePickerModelDateTime,//骞存湀鏃� 鏃跺垎 yyyy-mm-dd HH:mm 鍙敮鎸�24灏忔椂鍒�
+ FQDateTimePickerModelDateTimeSecond,//骞存湀鏃� 鏃跺垎绉� yyyy-mm-dd HH:mm:ss 鍙敮鎸�24灏忔椂鍒�
+ FQDateTimePickerModelTime,// 鏃跺垎 HH:mm 鍙敮鎸�24灏忔椂鍒�
+ FQDateTimePickerModelTimeSecond,// 鏃跺垎绉� HH:mm:ss 鍙敮鎸�24灏忔椂鍒�
+} FQDateTimePickerModel;
+
+
+NS_ASSUME_NONNULL_BEGIN
+@protocol FQDateTimePickerViewDelegate <NSObject>
+
+/// 纭鎿嶄綔
+/// @param date 鏃ユ湡NSDate
+/// @param dateStr 鏃ユ湡NSString
+/// @param target 鐢ㄤ簬鍖哄垎pickerView
+- (void)confirmActionWithDate:(NSDate *)date withDateString:(NSString *)dateStr withTarget:(NSInteger)target;
+
+@optional
+/// 鍙栨秷鎿嶄綔
+/// @param target 鐢ㄤ簬鍖哄垎pickerView
+- (void)cancelActionWithTarget:(NSInteger)target;
+
+/// 婊氬姩鎿嶄綔
+/// @param date 鏃ユ湡NSDate
+/// @param dateStr 鏃ユ湡NSString
+/// @param target 鐢ㄤ簬鍖哄垎pickerView
+- (void)scrollActionWithDate:(NSDate *)date withDateString:(NSString *)dateStr withTarget:(NSInteger)target;
+
+@end
+
+
+@interface FQDateTimePickerView : UIView
+/*---------------- UI ------------------------*/
+/// 閬僵鑳屾櫙鑹�
+@property (nonatomic, strong) UIColor *maskBackgroundColor;
+
+/// 閫夋嫨鍣ㄨ儗鏅壊
+@property (nonatomic, strong) UIColor *pickerBackgroundColor;
+
+///纭畾鎸夐挳鏂囨湰
+@property (nonatomic, copy) NSString *confirmText;
+///纭畾鎸夐挳棰滆壊 榛樿black
+@property (nonatomic, strong) UIColor *confirmColor;
+///纭畾鎸夐挳瀛椾綋 榛樿绯荤粺18pt
+@property (nonatomic, strong) UIFont *confirmFont;
+
+///鍙栨秷鎸夐挳鏂囨湰
+@property (nonatomic, copy) NSString *cancelText;
+///鍙栨秷鎸夐挳棰滆壊 榛樿榛戣壊
+@property (nonatomic, strong) UIColor *cancelColor;
+///鍙栨秷鎸夐挳瀛椾綋 榛樿绯荤粺18pt
+@property (nonatomic, strong) UIFont *cancelFont;
+
+///鏍囬鏂囨湰 榛樿 ""
+@property (nonatomic, copy) NSString *title;
+///鏍囬棰滆壊 榛樿榛戣壊
+@property (nonatomic, strong) UIColor *titleColor;
+///鏍囬瀛椾綋 榛樿绯荤粺SFUI-Regular 16.00pt
+@property (nonatomic, strong) UIFont *titleFont;
+
+///婊氳疆鏃ユ湡鏂囨湰棰滆壊(榛樿black)
+@property (nonatomic, strong) UIColor *pickerColor;
+///婊氳疆鏃ユ湡鏂囨湰瀛椾綋[UIFont systemFontOfSize:16]
+@property (nonatomic, strong) UIFont *pickerFont;
+
+
+/*---------------- NSDate ------------------------*/
+///闄愬埗鏈�澶ф椂闂�
+@property (nonatomic, strong) NSDate *maxDate;
+///闄愬埗鏈�灏忔椂闂�
+@property (nonatomic, strong) NSDate *minDate;
+///榛樿鏃堕棿 - - 榛樿褰撳墠鏃堕棿
+@property (nonatomic, strong) NSDate *defaultDate;
+/// 鍗曚綅锛氶粯璁@"骞�", @"鏈�", @"鏃�", @"鏃�", @"鍒�", @"绉�"]锛岃涓�涓�瀵瑰簲锛岃缃� unitsData = nil 鍙疆绌�
+@property (nonatomic, strong, null_unspecified) NSArray *unitsData;
+
+
+/*---------------- other ------------------------*/
+/// Protocol
+@property (nonatomic, weak) id<FQDateTimePickerViewDelegate> delegate;
+
+/// 閫夋嫨鍣ㄧ殑鏋氫妇 榛樿FQDateTimePickerModelDate
+@property (nonatomic, assign) FQDateTimePickerModel pickerModel;
+
+/// pickerView鐨則ag 鐢ㄤ簬鍖哄垎鍥炶皟
+@property (nonatomic, assign) NSInteger target;
+
+/// 灞曠ず鍦╳indow涓婏紙璇峰湪灞曠ず涔嬪墠锛岃缃ソ闇�瑕佺殑灞炴�э級
+- (void)showPicker;
+
+/// 灞曠ず鍦╲iew涓婏紙璇峰湪灞曠ず涔嬪墠锛岃缃ソ闇�瑕佺殑灞炴�э級
+/// - Parameter view: <#view description#>
+- (void)showPickerInView:(UIView *)view;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Headers/FQDateTimeSDK.h b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Headers/FQDateTimeSDK.h
new file mode 100644
index 0000000..06c8307
--- /dev/null
+++ b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Headers/FQDateTimeSDK.h
@@ -0,0 +1,18 @@
+//
+// FQDateTimeSDK.h
+// FQDateTimeSDK
+//
+// Created by wuwuFQ on 2022/4/28.
+//
+
+#import <Foundation/Foundation.h>
+#import "FQDateTimePickerView.h"
+//! Project version number for FQDateTimeSDK.
+FOUNDATION_EXPORT double FQDateTimeSDKVersionNumber;
+
+//! Project version string for FQDateTimeSDK.
+FOUNDATION_EXPORT const unsigned char FQDateTimeSDKVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <FQDateTimeSDK/PublicHeader.h>
+
+
diff --git a/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Info.plist b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Info.plist
new file mode 100644
index 0000000..dc1ab4c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Info.plist
Binary files differ
diff --git a/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Modules/module.modulemap b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Modules/module.modulemap
new file mode 100644
index 0000000..6f6d782
--- /dev/null
+++ b/EZDemo/HDLEZDemo/FQDateTimeSDK.framework/Modules/module.modulemap
@@ -0,0 +1,6 @@
+framework module FQDateTimeSDK {
+ umbrella header "FQDateTimeSDK.h"
+
+ export *
+ module * { export * }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.pbxproj b/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..6243df7
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.pbxproj
@@ -0,0 +1,875 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ AE31FE2129CC31F200678568 /* EZOpenSDKFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE31FE2029CC31F200678568 /* EZOpenSDKFramework.framework */; };
+ AE31FE2229CC321500678568 /* EZOpenSDKFramework.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AE31FE2029CC31F200678568 /* EZOpenSDKFramework.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ AEC1E3F429B6DDC200A00548 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEC1E3F329B6DDC200A00548 /* NetworkExtension.framework */; };
+ AEC1E3FE29B836D700A00548 /* AddDevice.strings in Resources */ = {isa = PBXBuildFile; fileRef = AEC1E3FA29B836D700A00548 /* AddDevice.strings */; };
+ AEC1E3FF29B836D700A00548 /* EZMain.strings in Resources */ = {isa = PBXBuildFile; fileRef = AEC1E3FC29B836D700A00548 /* EZMain.strings */; };
+ AEC1E40429B837C800A00548 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AEC1E40229B837C800A00548 /* Localizable.strings */; };
+ AEC1E40529B839E700A00548 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = AEC1E40729B839E700A00548 /* Localizable.strings */; };
+ AEC1E40829B83A0E00A00548 /* EZMain.strings in Resources */ = {isa = PBXBuildFile; fileRef = AEC1E40A29B83A0E00A00548 /* EZMain.strings */; };
+ AEC1E40B29B83A1200A00548 /* AddDevice.strings in Resources */ = {isa = PBXBuildFile; fileRef = AEC1E40D29B83A1200A00548 /* AddDevice.strings */; };
+ AEDD94B529B04DD800EAA2CA /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD94B429B04DD800EAA2CA /* AppDelegate.m */; };
+ AEDD94BB29B04DD800EAA2CA /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD94BA29B04DD800EAA2CA /* ViewController.m */; };
+ AEDD94BE29B04DD800EAA2CA /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AEDD94BC29B04DD800EAA2CA /* Main.storyboard */; };
+ AEDD94C129B04DD800EAA2CA /* HDLEZDemo.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = AEDD94BF29B04DD800EAA2CA /* HDLEZDemo.xcdatamodeld */; };
+ AEDD94C329B04DDA00EAA2CA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AEDD94C229B04DDA00EAA2CA /* Assets.xcassets */; };
+ AEDD94C629B04DDA00EAA2CA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AEDD94C429B04DDA00EAA2CA /* LaunchScreen.storyboard */; };
+ AEDD94C929B04DDA00EAA2CA /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD94C829B04DDA00EAA2CA /* main.m */; };
+ AEDD950E29B04E4B00EAA2CA /* com.hri.hpc.mobile.ios.player.metallib in Resources */ = {isa = PBXBuildFile; fileRef = AEDD950929B04E4B00EAA2CA /* com.hri.hpc.mobile.ios.player.metallib */; };
+ AEDD951629B04EF200EAA2CA /* libEZSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD951229B04EF100EAA2CA /* libEZSDK.a */; };
+ AEDD955229B0550500EAA2CA /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD955129B0550500EAA2CA /* libsqlite3.0.tbd */; };
+ AEDD955429B0551000EAA2CA /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD955329B0551000EAA2CA /* CoreMedia.framework */; };
+ AEDD955629B0551D00EAA2CA /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD955529B0551D00EAA2CA /* AudioToolbox.framework */; };
+ AEDD955829B0552400EAA2CA /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD955729B0552400EAA2CA /* VideoToolbox.framework */; };
+ AEDD955A29B0552E00EAA2CA /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD955929B0552D00EAA2CA /* GLKit.framework */; };
+ AEDD955C29B0553600EAA2CA /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD955B29B0553600EAA2CA /* OpenAL.framework */; };
+ AEDD955E29B0554300EAA2CA /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD955D29B0554300EAA2CA /* MobileCoreServices.framework */; };
+ AEDD956029B0554A00EAA2CA /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD955F29B0554A00EAA2CA /* AVFoundation.framework */; };
+ AEDD956229B0555400EAA2CA /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD956129B0555400EAA2CA /* CoreTelephony.framework */; };
+ AEDD956429B0556000EAA2CA /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD956329B0556000EAA2CA /* SystemConfiguration.framework */; };
+ AEDD956629B0557000EAA2CA /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD956529B0557000EAA2CA /* libc++.tbd */; };
+ AEDD956829B0557C00EAA2CA /* libiconv.2.4.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD956729B0557C00EAA2CA /* libiconv.2.4.0.tbd */; };
+ AEDD956A29B0558400EAA2CA /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD956929B0558400EAA2CA /* libbz2.tbd */; };
+ AEDD956C29B0558D00EAA2CA /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD956B29B0558D00EAA2CA /* libz.tbd */; };
+ AEDD957129B0650000EAA2CA /* EZSupportViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = AEDD956D29B0650000EAA2CA /* EZSupportViewController.xib */; };
+ AEDD957229B0650000EAA2CA /* EZVideoTalkViewcontroller.xib in Resources */ = {isa = PBXBuildFile; fileRef = AEDD956E29B0650000EAA2CA /* EZVideoTalkViewcontroller.xib */; };
+ AEDD957329B0650000EAA2CA /* AddDevice.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AEDD956F29B0650000EAA2CA /* AddDevice.storyboard */; };
+ AEDD957429B0650000EAA2CA /* EZMain.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AEDD957029B0650000EAA2CA /* EZMain.storyboard */; };
+ AEDD959029B0661400EAA2CA /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD957829B0661400EAA2CA /* NSLayoutConstraint+MASDebugAdditions.m */; };
+ AEDD959129B0661400EAA2CA /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958129B0661400EAA2CA /* ViewController+MASAdditions.m */; };
+ AEDD959229B0661400EAA2CA /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958529B0661400EAA2CA /* MASCompositeConstraint.m */; };
+ AEDD959329B0661400EAA2CA /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958629B0661400EAA2CA /* MASConstraintMaker.m */; };
+ AEDD959429B0661400EAA2CA /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958729B0661400EAA2CA /* MASLayoutConstraint.m */; };
+ AEDD959529B0661400EAA2CA /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958829B0661400EAA2CA /* NSArray+MASAdditions.m */; };
+ AEDD959629B0661400EAA2CA /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958929B0661400EAA2CA /* View+MASAdditions.m */; };
+ AEDD959729B0661400EAA2CA /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958C29B0661400EAA2CA /* MASConstraint.m */; };
+ AEDD959829B0661400EAA2CA /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958E29B0661400EAA2CA /* MASViewConstraint.m */; };
+ AEDD959929B0661400EAA2CA /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = AEDD958F29B0661400EAA2CA /* MASViewAttribute.m */; };
+ AEE4704729C0460A00480163 /* FQDateTimeSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEE4704629C0460A00480163 /* FQDateTimeSDK.framework */; };
+ AEE4704929C0464900480163 /* FQDateTimeSDK.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = AEE4704629C0460A00480163 /* FQDateTimeSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ AEF60D8629CAFFB30050AFFF /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AEF60D8429CAFFB30050AFFF /* libcrypto.a */; };
+ AEF60D8729CAFFB30050AFFF /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AEF60D8529CAFFB30050AFFF /* libssl.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ AEE4704829C0464400480163 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 12;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ AE31FE2229CC321500678568 /* EZOpenSDKFramework.framework in CopyFiles */,
+ AEE4704929C0464900480163 /* FQDateTimeSDK.framework in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ AE31FE2029CC31F200678568 /* EZOpenSDKFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = EZOpenSDKFramework.framework; sourceTree = "<group>"; };
+ AEC1E3F329B6DDC200A00548 /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
+ AEC1E3FB29B836D700A00548 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "../../../../../../HDL/EZOpenSDK/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/AddDevice.strings"; sourceTree = "<group>"; };
+ AEC1E3FD29B836D700A00548 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "../../../../../../HDL/EZOpenSDK/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/EZMain.strings"; sourceTree = "<group>"; };
+ AEC1E40329B837C800A00548 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "../../../../../../HDL/OnPro/HDL-ON_iOS/Resources/zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
+ AEC1E40629B839E700A00548 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
+ AEC1E40929B83A0E00A00548 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/EZMain.strings; sourceTree = "<group>"; };
+ AEC1E40C29B83A1200A00548 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/AddDevice.strings; sourceTree = "<group>"; };
+ AEDD94B029B04DD800EAA2CA /* HDLEZDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HDLEZDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ AEDD94B329B04DD800EAA2CA /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ AEDD94B429B04DD800EAA2CA /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+ AEDD94B929B04DD800EAA2CA /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
+ AEDD94BA29B04DD800EAA2CA /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
+ AEDD94BD29B04DD800EAA2CA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+ AEDD94C029B04DD800EAA2CA /* HDLEZDemo.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = HDLEZDemo.xcdatamodel; sourceTree = "<group>"; };
+ AEDD94C229B04DDA00EAA2CA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+ AEDD94C529B04DDA00EAA2CA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
+ AEDD94C729B04DDA00EAA2CA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ AEDD94C829B04DDA00EAA2CA /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ AEDD950929B04E4B00EAA2CA /* com.hri.hpc.mobile.ios.player.metallib */ = {isa = PBXFileReference; lastKnownFileType = "archive.metal-library"; path = com.hri.hpc.mobile.ios.player.metallib; sourceTree = "<group>"; };
+ AEDD951229B04EF100EAA2CA /* libEZSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libEZSDK.a; sourceTree = "<group>"; };
+ AEDD951529B04EF200EAA2CA /* EZSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZSDK.h; sourceTree = "<group>"; };
+ AEDD951829B0501C00EAA2CA /* EZConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants.h; sourceTree = "<group>"; };
+ AEDD951929B0501C00EAA2CA /* EZHCNetDeviceSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHCNetDeviceSDK.h; sourceTree = "<group>"; };
+ AEDD951A29B0501C00EAA2CA /* EZStreamPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStreamPlayer.h; sourceTree = "<group>"; };
+ AEDD951B29B0501C00EAA2CA /* EZOpenSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZOpenSDK.h; sourceTree = "<group>"; };
+ AEDD951C29B0501C00EAA2CA /* EZConstants_Auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants_Auth.h; sourceTree = "<group>"; };
+ AEDD951D29B0501C00EAA2CA /* EZPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPlayer.h; sourceTree = "<group>"; };
+ AEDD951E29B0501C00EAA2CA /* EZGlobalSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZGlobalSDK.h; sourceTree = "<group>"; };
+ AEDD952029B0501C00EAA2CA /* EZDeviceVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceVersion.h; sourceTree = "<group>"; };
+ AEDD952129B0501C00EAA2CA /* EZUserInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZUserInfo.h; sourceTree = "<group>"; };
+ AEDD952229B0501C00EAA2CA /* EZDeviceUpgradeStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceUpgradeStatus.h; sourceTree = "<group>"; };
+ AEDD952329B0501C00EAA2CA /* EZAccessToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAccessToken.h; sourceTree = "<group>"; };
+ AEDD952429B0501C00EAA2CA /* EZPlayerExParamInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPlayerExParamInfo.h; sourceTree = "<group>"; };
+ AEDD952629B0501C00EAA2CA /* EZRTCCameraParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRTCCameraParam.h; sourceTree = "<group>"; };
+ AEDD952729B0501C00EAA2CA /* EZRTCMediaSessionDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRTCMediaSessionDefines.h; sourceTree = "<group>"; };
+ AEDD952829B0501C00EAA2CA /* EZVideoTalkSDKDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkSDKDefines.h; sourceTree = "<group>"; };
+ AEDD952929B0501C00EAA2CA /* EZVideoTalkView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkView.h; sourceTree = "<group>"; };
+ AEDD952A29B0501C00EAA2CA /* EZConferenceClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConferenceClient.h; sourceTree = "<group>"; };
+ AEDD952B29B0501C00EAA2CA /* EZVideoTalkGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkGlobal.h; sourceTree = "<group>"; };
+ AEDD952C29B0501C00EAA2CA /* EZVideoTalk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalk.h; sourceTree = "<group>"; };
+ AEDD952D29B0501C00EAA2CA /* EZVideoTalkSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkSDK.h; sourceTree = "<group>"; };
+ AEDD952E29B0501C00EAA2CA /* EZRTCSampleHandleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRTCSampleHandleManager.h; sourceTree = "<group>"; };
+ AEDD952F29B0501C00EAA2CA /* EZBAVParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZBAVParam.h; sourceTree = "<group>"; };
+ AEDD953029B0501C00EAA2CA /* EZRTCVideoEncodeParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRTCVideoEncodeParam.h; sourceTree = "<group>"; };
+ AEDD953129B0501C00EAA2CA /* EZAPDevInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAPDevInfo.h; sourceTree = "<group>"; };
+ AEDD953229B0501C00EAA2CA /* EzvizWatchServerInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EzvizWatchServerInfo.h; sourceTree = "<group>"; };
+ AEDD953329B0501C00EAA2CA /* EZDeviceRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceRecordDownloadTask.h; sourceTree = "<group>"; };
+ AEDD953429B0501C00EAA2CA /* EzvizRecordFileInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EzvizRecordFileInfo.h; sourceTree = "<group>"; };
+ AEDD953529B0501C00EAA2CA /* EZDeviceRecordFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceRecordFile.h; sourceTree = "<group>"; };
+ AEDD953629B0501C00EAA2CA /* EZLeaveMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZLeaveMessage.h; sourceTree = "<group>"; };
+ AEDD953729B0501C00EAA2CA /* EZWiFiItemInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZWiFiItemInfo.h; sourceTree = "<group>"; };
+ AEDD953829B0501C00EAA2CA /* EZRecordCoverFetcherManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRecordCoverFetcherManager.h; sourceTree = "<group>"; };
+ AEDD953929B0501C00EAA2CA /* EZHiddnsDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHiddnsDeviceInfo.h; sourceTree = "<group>"; };
+ AEDD953A29B0501C00EAA2CA /* Sadp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sadp.h; sourceTree = "<group>"; };
+ AEDD953B29B0501C00EAA2CA /* EZDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceInfo.h; sourceTree = "<group>"; };
+ AEDD953C29B0501C00EAA2CA /* EZRecordDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRecordDownloader.h; sourceTree = "<group>"; };
+ AEDD953D29B0501C00EAA2CA /* EZRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRecordDownloadTask.h; sourceTree = "<group>"; };
+ AEDD953E29B0501C00EAA2CA /* EZVideoTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTransformer.h; sourceTree = "<group>"; };
+ AEDD953F29B0501C00EAA2CA /* EZTokenKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZTokenKit.h; sourceTree = "<group>"; };
+ AEDD954029B0501C00EAA2CA /* EZPMPlayPrivateTokenInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPMPlayPrivateTokenInfo.h; sourceTree = "<group>"; };
+ AEDD954129B0501C00EAA2CA /* EZDetectorInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDetectorInfo.h; sourceTree = "<group>"; };
+ AEDD954229B0501C00EAA2CA /* EZHCNetDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHCNetDeviceInfo.h; sourceTree = "<group>"; };
+ AEDD954329B0501C00EAA2CA /* EZCameraInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCameraInfo.h; sourceTree = "<group>"; };
+ AEDD954429B0501C00EAA2CA /* EZCloudRecordFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCloudRecordFile.h; sourceTree = "<group>"; };
+ AEDD954529B0501C00EAA2CA /* EZCloudRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCloudRecordDownloadTask.h; sourceTree = "<group>"; };
+ AEDD954629B0501C00EAA2CA /* EZAreaInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAreaInfo.h; sourceTree = "<group>"; };
+ AEDD954729B0501C00EAA2CA /* EZProbeDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZProbeDeviceInfo.h; sourceTree = "<group>"; };
+ AEDD954829B0501C00EAA2CA /* EZDevicePtzAngleInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDevicePtzAngleInfo.h; sourceTree = "<group>"; };
+ AEDD954929B0501C00EAA2CA /* EZDeviceCloudServiceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceCloudServiceInfo.h; sourceTree = "<group>"; };
+ AEDD954A29B0501C00EAA2CA /* EZVideoQualityInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoQualityInfo.h; sourceTree = "<group>"; };
+ AEDD954B29B0501C00EAA2CA /* EZAlarmInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAlarmInfo.h; sourceTree = "<group>"; };
+ AEDD954C29B0501C00EAA2CA /* EZConfigTokenInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConfigTokenInfo.h; sourceTree = "<group>"; };
+ AEDD954D29B0501C00EAA2CA /* EZSADPDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZSADPDeviceInfo.h; sourceTree = "<group>"; };
+ AEDD954E29B0501C00EAA2CA /* EZStorageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStorageInfo.h; sourceTree = "<group>"; };
+ AEDD954F29B0501C00EAA2CA /* EZConstants_WifiConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants_WifiConfig.h; sourceTree = "<group>"; };
+ AEDD955129B0550500EAA2CA /* libsqlite3.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.0.tbd; path = usr/lib/libsqlite3.0.tbd; sourceTree = SDKROOT; };
+ AEDD955329B0551000EAA2CA /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
+ AEDD955529B0551D00EAA2CA /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
+ AEDD955729B0552400EAA2CA /* VideoToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoToolbox.framework; path = System/Library/Frameworks/VideoToolbox.framework; sourceTree = SDKROOT; };
+ AEDD955929B0552D00EAA2CA /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; };
+ AEDD955B29B0553600EAA2CA /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; };
+ AEDD955D29B0554300EAA2CA /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; };
+ AEDD955F29B0554A00EAA2CA /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
+ AEDD956129B0555400EAA2CA /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; };
+ AEDD956329B0556000EAA2CA /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
+ AEDD956529B0557000EAA2CA /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
+ AEDD956729B0557C00EAA2CA /* libiconv.2.4.0.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.2.4.0.tbd; path = usr/lib/libiconv.2.4.0.tbd; sourceTree = SDKROOT; };
+ AEDD956929B0558400EAA2CA /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
+ AEDD956B29B0558D00EAA2CA /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
+ AEDD956D29B0650000EAA2CA /* EZSupportViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EZSupportViewController.xib; sourceTree = "<group>"; };
+ AEDD956E29B0650000EAA2CA /* EZVideoTalkViewcontroller.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = EZVideoTalkViewcontroller.xib; sourceTree = "<group>"; };
+ AEDD956F29B0650000EAA2CA /* AddDevice.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = AddDevice.storyboard; sourceTree = "<group>"; };
+ AEDD957029B0650000EAA2CA /* EZMain.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = EZMain.storyboard; sourceTree = "<group>"; };
+ AEDD957729B0661400EAA2CA /* MASCompositeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASCompositeConstraint.h; sourceTree = "<group>"; };
+ AEDD957829B0661400EAA2CA /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = "<group>"; };
+ AEDD957929B0661400EAA2CA /* MASConstraint+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASConstraint+Private.h"; sourceTree = "<group>"; };
+ AEDD957A29B0661400EAA2CA /* MASLayoutConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASLayoutConstraint.h; sourceTree = "<group>"; };
+ AEDD957B29B0661400EAA2CA /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASShorthandAdditions.h"; sourceTree = "<group>"; };
+ AEDD957C29B0661400EAA2CA /* MASConstraintMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraintMaker.h; sourceTree = "<group>"; };
+ AEDD957D29B0661400EAA2CA /* View+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASAdditions.h"; sourceTree = "<group>"; };
+ AEDD957E29B0661400EAA2CA /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASAdditions.h"; sourceTree = "<group>"; };
+ AEDD957F29B0661400EAA2CA /* MASUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASUtilities.h; sourceTree = "<group>"; };
+ AEDD958029B0661400EAA2CA /* MASViewAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewAttribute.h; sourceTree = "<group>"; };
+ AEDD958129B0661400EAA2CA /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ViewController+MASAdditions.m"; sourceTree = "<group>"; };
+ AEDD958229B0661400EAA2CA /* MASViewConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewConstraint.h; sourceTree = "<group>"; };
+ AEDD958329B0661400EAA2CA /* MASConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraint.h; sourceTree = "<group>"; };
+ AEDD958429B0661400EAA2CA /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = "<group>"; };
+ AEDD958529B0661400EAA2CA /* MASCompositeConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASCompositeConstraint.m; sourceTree = "<group>"; };
+ AEDD958629B0661400EAA2CA /* MASConstraintMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraintMaker.m; sourceTree = "<group>"; };
+ AEDD958729B0661400EAA2CA /* MASLayoutConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASLayoutConstraint.m; sourceTree = "<group>"; };
+ AEDD958829B0661400EAA2CA /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+MASAdditions.m"; sourceTree = "<group>"; };
+ AEDD958929B0661400EAA2CA /* View+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "View+MASAdditions.m"; sourceTree = "<group>"; };
+ AEDD958A29B0661400EAA2CA /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASShorthandAdditions.h"; sourceTree = "<group>"; };
+ AEDD958B29B0661400EAA2CA /* Masonry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Masonry.h; sourceTree = "<group>"; };
+ AEDD958C29B0661400EAA2CA /* MASConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraint.m; sourceTree = "<group>"; };
+ AEDD958D29B0661400EAA2CA /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ViewController+MASAdditions.h"; sourceTree = "<group>"; };
+ AEDD958E29B0661400EAA2CA /* MASViewConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewConstraint.m; sourceTree = "<group>"; };
+ AEDD958F29B0661400EAA2CA /* MASViewAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewAttribute.m; sourceTree = "<group>"; };
+ AEDD959A29B06A3B00EAA2CA /* HDLEZDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = HDLEZDemo.entitlements; sourceTree = "<group>"; };
+ AEE4704629C0460A00480163 /* FQDateTimeSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FQDateTimeSDK.framework; sourceTree = "<group>"; };
+ AEF60D8429CAFFB30050AFFF /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrypto.a; sourceTree = "<group>"; };
+ AEF60D8529CAFFB30050AFFF /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libssl.a; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ AEDD94AD29B04DD800EAA2CA /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AEDD956C29B0558D00EAA2CA /* libz.tbd in Frameworks */,
+ AEDD956A29B0558400EAA2CA /* libbz2.tbd in Frameworks */,
+ AEDD956829B0557C00EAA2CA /* libiconv.2.4.0.tbd in Frameworks */,
+ AEDD956629B0557000EAA2CA /* libc++.tbd in Frameworks */,
+ AEDD956429B0556000EAA2CA /* SystemConfiguration.framework in Frameworks */,
+ AEDD956229B0555400EAA2CA /* CoreTelephony.framework in Frameworks */,
+ AEDD956029B0554A00EAA2CA /* AVFoundation.framework in Frameworks */,
+ AEDD955E29B0554300EAA2CA /* MobileCoreServices.framework in Frameworks */,
+ AEF60D8629CAFFB30050AFFF /* libcrypto.a in Frameworks */,
+ AEDD955C29B0553600EAA2CA /* OpenAL.framework in Frameworks */,
+ AEDD955A29B0552E00EAA2CA /* GLKit.framework in Frameworks */,
+ AEDD955829B0552400EAA2CA /* VideoToolbox.framework in Frameworks */,
+ AEE4704729C0460A00480163 /* FQDateTimeSDK.framework in Frameworks */,
+ AE31FE2129CC31F200678568 /* EZOpenSDKFramework.framework in Frameworks */,
+ AEDD955629B0551D00EAA2CA /* AudioToolbox.framework in Frameworks */,
+ AEC1E3F429B6DDC200A00548 /* NetworkExtension.framework in Frameworks */,
+ AEDD955429B0551000EAA2CA /* CoreMedia.framework in Frameworks */,
+ AEDD955229B0550500EAA2CA /* libsqlite3.0.tbd in Frameworks */,
+ AEF60D8729CAFFB30050AFFF /* libssl.a in Frameworks */,
+ AEDD951629B04EF200EAA2CA /* libEZSDK.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ AEC1E3F529B8367300A00548 /* resources */ = {
+ isa = PBXGroup;
+ children = (
+ AEC1E40729B839E700A00548 /* Localizable.strings */,
+ AEC1E40229B837C800A00548 /* Localizable.strings */,
+ AEC1E3FA29B836D700A00548 /* AddDevice.strings */,
+ AEC1E3FC29B836D700A00548 /* EZMain.strings */,
+ AEC1E40D29B83A1200A00548 /* AddDevice.strings */,
+ AEC1E40A29B83A0E00A00548 /* EZMain.strings */,
+ );
+ path = resources;
+ sourceTree = "<group>";
+ };
+ AEDD94A729B04DD800EAA2CA = {
+ isa = PBXGroup;
+ children = (
+ AEDD94B229B04DD800EAA2CA /* HDLEZDemo */,
+ AEDD94B129B04DD800EAA2CA /* Products */,
+ AEDD955029B0550500EAA2CA /* Frameworks */,
+ );
+ sourceTree = "<group>";
+ };
+ AEDD94B129B04DD800EAA2CA /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ AEDD94B029B04DD800EAA2CA /* HDLEZDemo.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ AEDD94B229B04DD800EAA2CA /* HDLEZDemo */ = {
+ isa = PBXGroup;
+ children = (
+ AEC1E3F529B8367300A00548 /* resources */,
+ AEDD959A29B06A3B00EAA2CA /* HDLEZDemo.entitlements */,
+ AEDD94CF29B04E4A00EAA2CA /* EZOpenSDK */,
+ AEDD94B329B04DD800EAA2CA /* AppDelegate.h */,
+ AEDD94B429B04DD800EAA2CA /* AppDelegate.m */,
+ AEDD94B929B04DD800EAA2CA /* ViewController.h */,
+ AEDD94BA29B04DD800EAA2CA /* ViewController.m */,
+ AEDD956F29B0650000EAA2CA /* AddDevice.storyboard */,
+ AEDD957029B0650000EAA2CA /* EZMain.storyboard */,
+ AEDD956D29B0650000EAA2CA /* EZSupportViewController.xib */,
+ AEDD956E29B0650000EAA2CA /* EZVideoTalkViewcontroller.xib */,
+ AEDD951329B04EF200EAA2CA /* include */,
+ AEDD951229B04EF100EAA2CA /* libEZSDK.a */,
+ AEDD94BC29B04DD800EAA2CA /* Main.storyboard */,
+ AEDD94C229B04DDA00EAA2CA /* Assets.xcassets */,
+ AEDD94C429B04DDA00EAA2CA /* LaunchScreen.storyboard */,
+ AEDD94C729B04DDA00EAA2CA /* Info.plist */,
+ AEDD94C829B04DDA00EAA2CA /* main.m */,
+ AEDD94BF29B04DD800EAA2CA /* HDLEZDemo.xcdatamodeld */,
+ );
+ path = HDLEZDemo;
+ sourceTree = "<group>";
+ };
+ AEDD94CF29B04E4A00EAA2CA /* EZOpenSDK */ = {
+ isa = PBXGroup;
+ children = (
+ AE31FE2029CC31F200678568 /* EZOpenSDKFramework.framework */,
+ AEF60D8329CAFFB30050AFFF /* openssl */,
+ AEDD957529B065D800EAA2CA /* ThirdParties */,
+ AEDD951729B0501C00EAA2CA /* include */,
+ AEDD950929B04E4B00EAA2CA /* com.hri.hpc.mobile.ios.player.metallib */,
+ );
+ path = EZOpenSDK;
+ sourceTree = "<group>";
+ };
+ AEDD951329B04EF200EAA2CA /* include */ = {
+ isa = PBXGroup;
+ children = (
+ AEDD951429B04EF200EAA2CA /* EZSDK */,
+ );
+ path = include;
+ sourceTree = "<group>";
+ };
+ AEDD951429B04EF200EAA2CA /* EZSDK */ = {
+ isa = PBXGroup;
+ children = (
+ AEDD951529B04EF200EAA2CA /* EZSDK.h */,
+ );
+ path = EZSDK;
+ sourceTree = "<group>";
+ };
+ AEDD951729B0501C00EAA2CA /* include */ = {
+ isa = PBXGroup;
+ children = (
+ AEDD951829B0501C00EAA2CA /* EZConstants.h */,
+ AEDD951929B0501C00EAA2CA /* EZHCNetDeviceSDK.h */,
+ AEDD951A29B0501C00EAA2CA /* EZStreamPlayer.h */,
+ AEDD951B29B0501C00EAA2CA /* EZOpenSDK.h */,
+ AEDD951C29B0501C00EAA2CA /* EZConstants_Auth.h */,
+ AEDD951D29B0501C00EAA2CA /* EZPlayer.h */,
+ AEDD951E29B0501C00EAA2CA /* EZGlobalSDK.h */,
+ AEDD951F29B0501C00EAA2CA /* modules */,
+ AEDD954F29B0501C00EAA2CA /* EZConstants_WifiConfig.h */,
+ );
+ path = include;
+ sourceTree = "<group>";
+ };
+ AEDD951F29B0501C00EAA2CA /* modules */ = {
+ isa = PBXGroup;
+ children = (
+ AEDD952029B0501C00EAA2CA /* EZDeviceVersion.h */,
+ AEDD952129B0501C00EAA2CA /* EZUserInfo.h */,
+ AEDD952229B0501C00EAA2CA /* EZDeviceUpgradeStatus.h */,
+ AEDD952329B0501C00EAA2CA /* EZAccessToken.h */,
+ AEDD952429B0501C00EAA2CA /* EZPlayerExParamInfo.h */,
+ AEDD952529B0501C00EAA2CA /* EZVideoTalk */,
+ AEDD953129B0501C00EAA2CA /* EZAPDevInfo.h */,
+ AEDD953229B0501C00EAA2CA /* EzvizWatchServerInfo.h */,
+ AEDD953329B0501C00EAA2CA /* EZDeviceRecordDownloadTask.h */,
+ AEDD953429B0501C00EAA2CA /* EzvizRecordFileInfo.h */,
+ AEDD953529B0501C00EAA2CA /* EZDeviceRecordFile.h */,
+ AEDD953629B0501C00EAA2CA /* EZLeaveMessage.h */,
+ AEDD953729B0501C00EAA2CA /* EZWiFiItemInfo.h */,
+ AEDD953829B0501C00EAA2CA /* EZRecordCoverFetcherManager.h */,
+ AEDD953929B0501C00EAA2CA /* EZHiddnsDeviceInfo.h */,
+ AEDD953A29B0501C00EAA2CA /* Sadp.h */,
+ AEDD953B29B0501C00EAA2CA /* EZDeviceInfo.h */,
+ AEDD953C29B0501C00EAA2CA /* EZRecordDownloader.h */,
+ AEDD953D29B0501C00EAA2CA /* EZRecordDownloadTask.h */,
+ AEDD953E29B0501C00EAA2CA /* EZVideoTransformer.h */,
+ AEDD953F29B0501C00EAA2CA /* EZTokenKit.h */,
+ AEDD954029B0501C00EAA2CA /* EZPMPlayPrivateTokenInfo.h */,
+ AEDD954129B0501C00EAA2CA /* EZDetectorInfo.h */,
+ AEDD954229B0501C00EAA2CA /* EZHCNetDeviceInfo.h */,
+ AEDD954329B0501C00EAA2CA /* EZCameraInfo.h */,
+ AEDD954429B0501C00EAA2CA /* EZCloudRecordFile.h */,
+ AEDD954529B0501C00EAA2CA /* EZCloudRecordDownloadTask.h */,
+ AEDD954629B0501C00EAA2CA /* EZAreaInfo.h */,
+ AEDD954729B0501C00EAA2CA /* EZProbeDeviceInfo.h */,
+ AEDD954829B0501C00EAA2CA /* EZDevicePtzAngleInfo.h */,
+ AEDD954929B0501C00EAA2CA /* EZDeviceCloudServiceInfo.h */,
+ AEDD954A29B0501C00EAA2CA /* EZVideoQualityInfo.h */,
+ AEDD954B29B0501C00EAA2CA /* EZAlarmInfo.h */,
+ AEDD954C29B0501C00EAA2CA /* EZConfigTokenInfo.h */,
+ AEDD954D29B0501C00EAA2CA /* EZSADPDeviceInfo.h */,
+ AEDD954E29B0501C00EAA2CA /* EZStorageInfo.h */,
+ );
+ path = modules;
+ sourceTree = "<group>";
+ };
+ AEDD952529B0501C00EAA2CA /* EZVideoTalk */ = {
+ isa = PBXGroup;
+ children = (
+ AEDD952629B0501C00EAA2CA /* EZRTCCameraParam.h */,
+ AEDD952729B0501C00EAA2CA /* EZRTCMediaSessionDefines.h */,
+ AEDD952829B0501C00EAA2CA /* EZVideoTalkSDKDefines.h */,
+ AEDD952929B0501C00EAA2CA /* EZVideoTalkView.h */,
+ AEDD952A29B0501C00EAA2CA /* EZConferenceClient.h */,
+ AEDD952B29B0501C00EAA2CA /* EZVideoTalkGlobal.h */,
+ AEDD952C29B0501C00EAA2CA /* EZVideoTalk.h */,
+ AEDD952D29B0501C00EAA2CA /* EZVideoTalkSDK.h */,
+ AEDD952E29B0501C00EAA2CA /* EZRTCSampleHandleManager.h */,
+ AEDD952F29B0501C00EAA2CA /* EZBAVParam.h */,
+ AEDD953029B0501C00EAA2CA /* EZRTCVideoEncodeParam.h */,
+ );
+ path = EZVideoTalk;
+ sourceTree = "<group>";
+ };
+ AEDD955029B0550500EAA2CA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ AEE4704629C0460A00480163 /* FQDateTimeSDK.framework */,
+ AEC1E3F329B6DDC200A00548 /* NetworkExtension.framework */,
+ AEDD956B29B0558D00EAA2CA /* libz.tbd */,
+ AEDD956929B0558400EAA2CA /* libbz2.tbd */,
+ AEDD956729B0557C00EAA2CA /* libiconv.2.4.0.tbd */,
+ AEDD956529B0557000EAA2CA /* libc++.tbd */,
+ AEDD956329B0556000EAA2CA /* SystemConfiguration.framework */,
+ AEDD956129B0555400EAA2CA /* CoreTelephony.framework */,
+ AEDD955F29B0554A00EAA2CA /* AVFoundation.framework */,
+ AEDD955D29B0554300EAA2CA /* MobileCoreServices.framework */,
+ AEDD955B29B0553600EAA2CA /* OpenAL.framework */,
+ AEDD955929B0552D00EAA2CA /* GLKit.framework */,
+ AEDD955729B0552400EAA2CA /* VideoToolbox.framework */,
+ AEDD955529B0551D00EAA2CA /* AudioToolbox.framework */,
+ AEDD955329B0551000EAA2CA /* CoreMedia.framework */,
+ AEDD955129B0550500EAA2CA /* libsqlite3.0.tbd */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ AEDD957529B065D800EAA2CA /* ThirdParties */ = {
+ isa = PBXGroup;
+ children = (
+ AEDD957629B0661400EAA2CA /* Masonry */,
+ );
+ path = ThirdParties;
+ sourceTree = "<group>";
+ };
+ AEDD957629B0661400EAA2CA /* Masonry */ = {
+ isa = PBXGroup;
+ children = (
+ AEDD957729B0661400EAA2CA /* MASCompositeConstraint.h */,
+ AEDD957829B0661400EAA2CA /* NSLayoutConstraint+MASDebugAdditions.m */,
+ AEDD957929B0661400EAA2CA /* MASConstraint+Private.h */,
+ AEDD957A29B0661400EAA2CA /* MASLayoutConstraint.h */,
+ AEDD957B29B0661400EAA2CA /* NSArray+MASShorthandAdditions.h */,
+ AEDD957C29B0661400EAA2CA /* MASConstraintMaker.h */,
+ AEDD957D29B0661400EAA2CA /* View+MASAdditions.h */,
+ AEDD957E29B0661400EAA2CA /* NSArray+MASAdditions.h */,
+ AEDD957F29B0661400EAA2CA /* MASUtilities.h */,
+ AEDD958029B0661400EAA2CA /* MASViewAttribute.h */,
+ AEDD958129B0661400EAA2CA /* ViewController+MASAdditions.m */,
+ AEDD958229B0661400EAA2CA /* MASViewConstraint.h */,
+ AEDD958329B0661400EAA2CA /* MASConstraint.h */,
+ AEDD958429B0661400EAA2CA /* NSLayoutConstraint+MASDebugAdditions.h */,
+ AEDD958529B0661400EAA2CA /* MASCompositeConstraint.m */,
+ AEDD958629B0661400EAA2CA /* MASConstraintMaker.m */,
+ AEDD958729B0661400EAA2CA /* MASLayoutConstraint.m */,
+ AEDD958829B0661400EAA2CA /* NSArray+MASAdditions.m */,
+ AEDD958929B0661400EAA2CA /* View+MASAdditions.m */,
+ AEDD958A29B0661400EAA2CA /* View+MASShorthandAdditions.h */,
+ AEDD958B29B0661400EAA2CA /* Masonry.h */,
+ AEDD958C29B0661400EAA2CA /* MASConstraint.m */,
+ AEDD958D29B0661400EAA2CA /* ViewController+MASAdditions.h */,
+ AEDD958E29B0661400EAA2CA /* MASViewConstraint.m */,
+ AEDD958F29B0661400EAA2CA /* MASViewAttribute.m */,
+ );
+ path = Masonry;
+ sourceTree = "<group>";
+ };
+ AEF60D8329CAFFB30050AFFF /* openssl */ = {
+ isa = PBXGroup;
+ children = (
+ AEF60D8429CAFFB30050AFFF /* libcrypto.a */,
+ AEF60D8529CAFFB30050AFFF /* libssl.a */,
+ );
+ path = openssl;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ AEDD94AF29B04DD800EAA2CA /* HDLEZDemo */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = AEDD94CC29B04DDA00EAA2CA /* Build configuration list for PBXNativeTarget "HDLEZDemo" */;
+ buildPhases = (
+ AEDD94AC29B04DD800EAA2CA /* Sources */,
+ AEDD94AD29B04DD800EAA2CA /* Frameworks */,
+ AEDD94AE29B04DD800EAA2CA /* Resources */,
+ AEE4704829C0464400480163 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HDLEZDemo;
+ productName = HDLEZDemo;
+ productReference = AEDD94B029B04DD800EAA2CA /* HDLEZDemo.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ AEDD94A829B04DD800EAA2CA /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = 1;
+ LastUpgradeCheck = 1330;
+ TargetAttributes = {
+ AEDD94AF29B04DD800EAA2CA = {
+ CreatedOnToolsVersion = 13.3.1;
+ };
+ };
+ };
+ buildConfigurationList = AEDD94AB29B04DD800EAA2CA /* Build configuration list for PBXProject "HDLEZDemo" */;
+ compatibilityVersion = "Xcode 13.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ "zh-Hans",
+ );
+ mainGroup = AEDD94A729B04DD800EAA2CA;
+ productRefGroup = AEDD94B129B04DD800EAA2CA /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ AEDD94AF29B04DD800EAA2CA /* HDLEZDemo */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ AEDD94AE29B04DD800EAA2CA /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AEDD94C629B04DDA00EAA2CA /* LaunchScreen.storyboard in Resources */,
+ AEDD957329B0650000EAA2CA /* AddDevice.storyboard in Resources */,
+ AEDD950E29B04E4B00EAA2CA /* com.hri.hpc.mobile.ios.player.metallib in Resources */,
+ AEC1E40429B837C800A00548 /* Localizable.strings in Resources */,
+ AEDD957129B0650000EAA2CA /* EZSupportViewController.xib in Resources */,
+ AEC1E40B29B83A1200A00548 /* AddDevice.strings in Resources */,
+ AEC1E40829B83A0E00A00548 /* EZMain.strings in Resources */,
+ AEC1E3FE29B836D700A00548 /* AddDevice.strings in Resources */,
+ AEDD957429B0650000EAA2CA /* EZMain.storyboard in Resources */,
+ AEDD94C329B04DDA00EAA2CA /* Assets.xcassets in Resources */,
+ AEC1E40529B839E700A00548 /* Localizable.strings in Resources */,
+ AEDD94BE29B04DD800EAA2CA /* Main.storyboard in Resources */,
+ AEC1E3FF29B836D700A00548 /* EZMain.strings in Resources */,
+ AEDD957229B0650000EAA2CA /* EZVideoTalkViewcontroller.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ AEDD94AC29B04DD800EAA2CA /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AEDD94C929B04DDA00EAA2CA /* main.m in Sources */,
+ AEDD94BB29B04DD800EAA2CA /* ViewController.m in Sources */,
+ AEDD959429B0661400EAA2CA /* MASLayoutConstraint.m in Sources */,
+ AEDD94B529B04DD800EAA2CA /* AppDelegate.m in Sources */,
+ AEDD94C129B04DD800EAA2CA /* HDLEZDemo.xcdatamodeld in Sources */,
+ AEDD959929B0661400EAA2CA /* MASViewAttribute.m in Sources */,
+ AEDD959529B0661400EAA2CA /* NSArray+MASAdditions.m in Sources */,
+ AEDD959229B0661400EAA2CA /* MASCompositeConstraint.m in Sources */,
+ AEDD959329B0661400EAA2CA /* MASConstraintMaker.m in Sources */,
+ AEDD959629B0661400EAA2CA /* View+MASAdditions.m in Sources */,
+ AEDD959129B0661400EAA2CA /* ViewController+MASAdditions.m in Sources */,
+ AEDD959829B0661400EAA2CA /* MASViewConstraint.m in Sources */,
+ AEDD959029B0661400EAA2CA /* NSLayoutConstraint+MASDebugAdditions.m in Sources */,
+ AEDD959729B0661400EAA2CA /* MASConstraint.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ AEC1E3FA29B836D700A00548 /* AddDevice.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ AEC1E3FB29B836D700A00548 /* zh-Hans */,
+ );
+ name = AddDevice.strings;
+ sourceTree = "<group>";
+ };
+ AEC1E3FC29B836D700A00548 /* EZMain.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ AEC1E3FD29B836D700A00548 /* zh-Hans */,
+ );
+ name = EZMain.strings;
+ sourceTree = "<group>";
+ };
+ AEC1E40229B837C800A00548 /* Localizable.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ AEC1E40329B837C800A00548 /* zh-Hans */,
+ );
+ name = Localizable.strings;
+ sourceTree = "<group>";
+ };
+ AEC1E40729B839E700A00548 /* Localizable.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ AEC1E40629B839E700A00548 /* en */,
+ );
+ name = Localizable.strings;
+ sourceTree = "<group>";
+ };
+ AEC1E40A29B83A0E00A00548 /* EZMain.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ AEC1E40929B83A0E00A00548 /* en */,
+ );
+ name = EZMain.strings;
+ sourceTree = "<group>";
+ };
+ AEC1E40D29B83A1200A00548 /* AddDevice.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ AEC1E40C29B83A1200A00548 /* en */,
+ );
+ name = AddDevice.strings;
+ sourceTree = "<group>";
+ };
+ AEDD94BC29B04DD800EAA2CA /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ AEDD94BD29B04DD800EAA2CA /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "<group>";
+ };
+ AEDD94C429B04DDA00EAA2CA /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ AEDD94C529B04DDA00EAA2CA /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ AEDD94CA29B04DDA00EAA2CA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 15.4;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ AEDD94CB29B04DDA00EAA2CA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 15.4;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ AEDD94CD29B04DDA00EAA2CA /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_ENTITLEMENTS = HDLEZDemo/HDLEZDemo.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = BVTA78PRYA;
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)",
+ "$(PROJECT_DIR)/HDLEZDemo/EZOpenSDK",
+ );
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = HDLEZDemo/Info.plist;
+ INFOPLIST_KEY_NSCameraUsageDescription = "璁块棶鎽勫儚澶�";
+ INFOPLIST_KEY_NSLocationAlwaysAndWhenInUseUsageDescription = "闇�瑕佷娇鐢ㄥ畾浣嶆潈闄愮敤浜巜ifi閰嶇綉";
+ INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "闇�瑕佷娇鐢ㄥ畾浣嶆潈闄愮敤浜巜ifi閰嶇綉";
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+ INFOPLIST_KEY_UIMainStoryboardFile = Main;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/HDLEZDemo/EZOpenSDK",
+ "$(PROJECT_DIR)/HDLEZDemo/EZOpenSDK/openssl",
+ "$(PROJECT_DIR)/HDLEZDemo",
+ );
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = "-ObjC";
+ PRODUCT_BUNDLE_IDENTIFIER = com.hdl.onpro1;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_WORKSPACE = YES;
+ };
+ name = Debug;
+ };
+ AEDD94CE29B04DDA00EAA2CA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_ENTITLEMENTS = HDLEZDemo/HDLEZDemo.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ DEVELOPMENT_TEAM = BVTA78PRYA;
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)",
+ "$(PROJECT_DIR)/HDLEZDemo/EZOpenSDK",
+ );
+ GENERATE_INFOPLIST_FILE = YES;
+ INFOPLIST_FILE = HDLEZDemo/Info.plist;
+ INFOPLIST_KEY_NSCameraUsageDescription = "璁块棶鎽勫儚澶�";
+ INFOPLIST_KEY_NSLocationAlwaysAndWhenInUseUsageDescription = "闇�瑕佷娇鐢ㄥ畾浣嶆潈闄愮敤浜巜ifi閰嶇綉";
+ INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "闇�瑕佷娇鐢ㄥ畾浣嶆潈闄愮敤浜巜ifi閰嶇綉";
+ INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+ INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
+ INFOPLIST_KEY_UIMainStoryboardFile = Main;
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.1;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/HDLEZDemo/EZOpenSDK",
+ "$(PROJECT_DIR)/HDLEZDemo/EZOpenSDK/openssl",
+ "$(PROJECT_DIR)/HDLEZDemo",
+ );
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = "-ObjC";
+ PRODUCT_BUNDLE_IDENTIFIER = com.hdl.onpro1;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_EMIT_LOC_STRINGS = YES;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_WORKSPACE = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ AEDD94AB29B04DD800EAA2CA /* Build configuration list for PBXProject "HDLEZDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ AEDD94CA29B04DDA00EAA2CA /* Debug */,
+ AEDD94CB29B04DDA00EAA2CA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ AEDD94CC29B04DDA00EAA2CA /* Build configuration list for PBXNativeTarget "HDLEZDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ AEDD94CD29B04DDA00EAA2CA /* Debug */,
+ AEDD94CE29B04DDA00EAA2CA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+
+/* Begin XCVersionGroup section */
+ AEDD94BF29B04DD800EAA2CA /* HDLEZDemo.xcdatamodeld */ = {
+ isa = XCVersionGroup;
+ children = (
+ AEDD94C029B04DD800EAA2CA /* HDLEZDemo.xcdatamodel */,
+ );
+ currentVersion = AEDD94C029B04DD800EAA2CA /* HDLEZDemo.xcdatamodel */;
+ path = HDLEZDemo.xcdatamodeld;
+ sourceTree = "<group>";
+ versionGroupType = wrapper.xcdatamodel;
+ };
+/* End XCVersionGroup section */
+ };
+ rootObject = AEDD94A829B04DD800EAA2CA /* Project object */;
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:">
+ </FileRef>
+</Workspace>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>IDEDidComputeMac32BitWarning</key>
+ <true/>
+</dict>
+</plist>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/AddDevice.storyboard b/EZDemo/HDLEZDemo/HDLEZDemo/AddDevice.storyboard
new file mode 100644
index 0000000..184fdf3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/AddDevice.storyboard
@@ -0,0 +1,1009 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="1Qq-y9-5Vr">
+ <device id="retina4_7" orientation="portrait" appearance="light"/>
+ <dependencies>
+ <deployment identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--Navigation Controller-->
+ <scene sceneID="xR2-yX-M1N">
+ <objects>
+ <navigationController id="1Qq-y9-5Vr" sceneMemberID="viewController">
+ <navigationBar key="navigationBar" contentMode="scaleToFill" id="HjS-88-zNd">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </navigationBar>
+ <connections>
+ <segue destination="ENY-lt-T99" kind="relationship" relationship="rootViewController" id="XbR-Et-qQ9"/>
+ </connections>
+ </navigationController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="gEG-Ir-rVM" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="-436.23188405797106" y="205.58035714285714"/>
+ </scene>
+ <!--Add ByQR Code View Controller-->
+ <scene sceneID="eiB-Il-l42">
+ <objects>
+ <viewController storyboardIdentifier="AddByQRCode" id="ENY-lt-T99" customClass="EZAddByQRCodeViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="HtS-K5-WDq"/>
+ <viewControllerLayoutGuide type="bottom" id="qZG-TK-dZc"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="LGu-xi-7os">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="j2X-TO-2vj" customClass="EZQRView">
+ <rect key="frame" x="0.0" y="44" width="375" height="623"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="qr_scan_line" translatesAutoresizingMaskIntoConstraints="NO" id="i1a-Yx-mmW">
+ <rect key="frame" x="77.5" y="150" width="220" height="6"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="6" id="lmj-DU-Gbq"/>
+ <constraint firstAttribute="width" constant="220" id="z1o-th-eJT"/>
+ </constraints>
+ </imageView>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SAq-8X-VZA">
+ <rect key="frame" x="22" y="566" width="64" height="30"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="64" id="0id-Ux-Cgq"/>
+ <constraint firstAttribute="height" constant="30" id="qZz-ZY-D4V"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <state key="normal" image="open"/>
+ <state key="selected" image="close"/>
+ <connections>
+ <action selector="torchButtonClicked:" destination="ENY-lt-T99" eventType="touchUpInside" id="HP5-g7-afv"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="璁惧浜岀淮鐮�" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jzO-DN-MQp">
+ <rect key="frame" x="87.5" y="409" width="200" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="QXL-HS-ZT7"/>
+ <constraint firstAttribute="width" constant="200" id="ezZ-9o-YbC"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.23643369932432431" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="i1a-Yx-mmW" firstAttribute="centerX" secondItem="j2X-TO-2vj" secondAttribute="centerX" id="CWN-0b-URC"/>
+ <constraint firstItem="SAq-8X-VZA" firstAttribute="leading" secondItem="j2X-TO-2vj" secondAttribute="leading" constant="22" id="Ju7-z9-LRh"/>
+ <constraint firstItem="SAq-8X-VZA" firstAttribute="top" secondItem="jzO-DN-MQp" secondAttribute="bottom" constant="136" id="V4d-rQ-Bna"/>
+ <constraint firstItem="i1a-Yx-mmW" firstAttribute="top" secondItem="j2X-TO-2vj" secondAttribute="top" constant="150" id="emC-sh-dOF"/>
+ <constraint firstAttribute="bottom" secondItem="SAq-8X-VZA" secondAttribute="bottom" constant="27" id="ne0-Z1-lZa"/>
+ <constraint firstItem="jzO-DN-MQp" firstAttribute="centerX" secondItem="j2X-TO-2vj" secondAttribute="centerX" id="y9q-eq-dG9"/>
+ </constraints>
+ <userDefinedRuntimeAttributes>
+ <userDefinedRuntimeAttribute type="size" keyPath="clearSize">
+ <size key="value" width="240" height="240"/>
+ </userDefinedRuntimeAttribute>
+ </userDefinedRuntimeAttributes>
+ </view>
+ <activityIndicatorView opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" style="white" translatesAutoresizingMaskIntoConstraints="NO" id="1wk-2c-E9P">
+ <rect key="frame" x="177.5" y="323.5" width="20" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="39O-vJ-rat"/>
+ <constraint firstAttribute="width" constant="20" id="HAm-QG-yrN"/>
+ </constraints>
+ </activityIndicatorView>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="j2X-TO-2vj" firstAttribute="leading" secondItem="LGu-xi-7os" secondAttribute="leading" id="EKa-2X-FLI"/>
+ <constraint firstItem="1wk-2c-E9P" firstAttribute="centerX" secondItem="LGu-xi-7os" secondAttribute="centerX" id="POi-4Q-XnH"/>
+ <constraint firstItem="j2X-TO-2vj" firstAttribute="top" secondItem="HtS-K5-WDq" secondAttribute="bottom" id="QxS-Oy-vRu"/>
+ <constraint firstItem="1wk-2c-E9P" firstAttribute="centerY" secondItem="LGu-xi-7os" secondAttribute="centerY" id="VAB-8L-bMm"/>
+ <constraint firstItem="qZG-TK-dZc" firstAttribute="top" secondItem="j2X-TO-2vj" secondAttribute="bottom" id="iLb-27-rKx"/>
+ <constraint firstAttribute="trailing" secondItem="j2X-TO-2vj" secondAttribute="trailing" id="wqP-Et-DZ4"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="6g9-xu-icN">
+ <barButtonItem key="rightBarButtonItem" systemItem="compose" id="FpM-w9-smg">
+ <connections>
+ <action selector="nextAction:" destination="ENY-lt-T99" id="eED-cY-QEb"/>
+ </connections>
+ </barButtonItem>
+ </navigationItem>
+ <connections>
+ <outlet property="activityView" destination="1wk-2c-E9P" id="C3r-9t-tF0"/>
+ <outlet property="lineImageView" destination="i1a-Yx-mmW" id="PLq-di-DBJ"/>
+ <outlet property="qrView" destination="j2X-TO-2vj" id="tun-pW-wo8"/>
+ <outlet property="tipsLabel" destination="jzO-DN-MQp" id="hae-XW-Ubz"/>
+ <outlet property="torchButton" destination="SAq-8X-VZA" id="igB-sz-7TG"/>
+ <segue destination="6Kk-DZ-6cc" kind="push" identifier="go2InputSerial" id="Zwz-Ic-fFq"/>
+ <segue destination="YZf-9t-ph4" kind="push" identifier="go2Result" id="VYk-37-nb6"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="8RX-tm-fvu" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="242.0289855072464" y="205.58035714285714"/>
+ </scene>
+ <!--Input Serial View Controller-->
+ <scene sceneID="cKp-cf-FON">
+ <objects>
+ <viewController id="6Kk-DZ-6cc" customClass="EZInputSerialViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="Ly5-ni-QU6"/>
+ <viewControllerLayoutGuide type="bottom" id="rsb-cS-Z8q"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="1Au-Se-T1v">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="璁惧鏈鸿韩涓婄殑9浣嶅簭鍒楀彿" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="bPa-tw-WRa">
+ <rect key="frame" x="0.0" y="84" width="375" height="40"/>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="vLh-9U-8RO"/>
+ </constraints>
+ <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
+ <connections>
+ <outlet property="delegate" destination="6Kk-DZ-6cc" id="V3R-96-sz1"/>
+ </connections>
+ </textField>
+ <button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hA9-0Y-3Qf">
+ <rect key="frame" x="45" y="230" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="285" id="3Bl-Kc-5H6"/>
+ <constraint firstAttribute="height" constant="39" id="Qay-ur-1py"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="涓嬩竴姝�" backgroundImage="blue_button"/>
+ <connections>
+ <action selector="go2Result:" destination="6Kk-DZ-6cc" eventType="touchUpInside" id="UfU-Wv-DcP"/>
+ </connections>
+ </button>
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="楠岃瘉鐮�" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="j8t-kq-eaK">
+ <rect key="frame" x="0.0" y="150" width="375" height="40"/>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="DjM-dg-5en"/>
+ </constraints>
+ <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
+ <connections>
+ <outlet property="delegate" destination="6Kk-DZ-6cc" id="njW-Ua-9DF"/>
+ </connections>
+ </textField>
+ </subviews>
+ <color key="backgroundColor" red="0.8980392157" green="0.89411764709999997" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="bPa-tw-WRa" firstAttribute="leading" secondItem="1Au-Se-T1v" secondAttribute="leading" id="3Qc-qL-acb"/>
+ <constraint firstItem="j8t-kq-eaK" firstAttribute="top" secondItem="bPa-tw-WRa" secondAttribute="bottom" constant="26" id="HCU-tS-J3n"/>
+ <constraint firstItem="hA9-0Y-3Qf" firstAttribute="top" secondItem="j8t-kq-eaK" secondAttribute="bottom" constant="40" id="J9f-la-VNg"/>
+ <constraint firstAttribute="trailing" secondItem="j8t-kq-eaK" secondAttribute="trailing" id="P8R-0d-zIb"/>
+ <constraint firstItem="j8t-kq-eaK" firstAttribute="leading" secondItem="1Au-Se-T1v" secondAttribute="leading" id="UTW-oL-AH0"/>
+ <constraint firstItem="bPa-tw-WRa" firstAttribute="top" secondItem="Ly5-ni-QU6" secondAttribute="bottom" constant="40" id="Z1R-zI-Db1"/>
+ <constraint firstAttribute="trailing" secondItem="bPa-tw-WRa" secondAttribute="trailing" id="e8k-Mv-aw6"/>
+ <constraint firstItem="hA9-0Y-3Qf" firstAttribute="centerX" secondItem="1Au-Se-T1v" secondAttribute="centerX" id="fpM-LI-lRg"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="cg6-M0-qsE"/>
+ <connections>
+ <outlet property="nextButton" destination="hA9-0Y-3Qf" id="lLV-yf-6lb"/>
+ <outlet property="serialTextField" destination="bPa-tw-WRa" id="rZ7-ss-RWE"/>
+ <outlet property="verifyCodeTextField" destination="j8t-kq-eaK" id="fGb-Ba-gwT"/>
+ <segue destination="YZf-9t-ph4" kind="push" identifier="go2InputResult" id="ikM-Zn-H8f"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="EkG-li-8z1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="990" y="-23"/>
+ </scene>
+ <!--Device Result View Controller-->
+ <scene sceneID="cpl-gC-v1b">
+ <objects>
+ <viewController id="YZf-9t-ph4" customClass="EZDeviceResultViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="Dn9-Jz-niK"/>
+ <viewControllerLayoutGuide type="bottom" id="h2r-ay-nrg"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="M8L-ay-M8z">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="results_pic_bg" translatesAutoresizingMaskIntoConstraints="NO" id="ceg-ex-Xdb">
+ <rect key="frame" x="100" y="79" width="175" height="165"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="165" id="lgW-5o-AFb"/>
+ <constraint firstAttribute="width" constant="175" id="n8A-cf-RRp"/>
+ </constraints>
+ </imageView>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="4Br-8g-Y1F">
+ <rect key="frame" x="112.5" y="79" width="150" height="165"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="150" id="32c-C2-vw1"/>
+ <constraint firstAttribute="height" constant="165" id="u24-jh-18u"/>
+ </constraints>
+ </imageView>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Qbm-8l-KeG">
+ <rect key="frame" x="45" y="332" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="285" id="B7i-jI-Zax"/>
+ <constraint firstAttribute="height" constant="39" id="z4C-rd-xpx"/>
+ </constraints>
+ <state key="normal" title="娣诲姞" backgroundImage="blue_button"/>
+ <state key="highlighted" backgroundImage="blue_button_sel"/>
+ <connections>
+ <action selector="nextAction:" destination="YZf-9t-ph4" eventType="touchUpInside" id="vZp-Qm-Gcc"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="灏氭湭杩炴帴缃戠粶" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="8qO-si-Tda">
+ <rect key="frame" x="16" y="291" width="343" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="7OY-4Z-9Lv"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.83529411764705885" green="0.35294117647058826" blue="0.17647058823529413" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="姝e湪鏌ヨ璁惧淇℃伅锛岃绋嶅悗..." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="0.0" translatesAutoresizingMaskIntoConstraints="NO" id="5rP-JO-eZs">
+ <rect key="frame" x="16" y="260" width="343" height="24"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="24" id="ymz-86-Y6H"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.45901817083358765" green="0.45900446176528931" blue="0.45901218056678772" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="no_wifi" translatesAutoresizingMaskIntoConstraints="NO" id="Zic-gc-gng">
+ <rect key="frame" x="140" y="149" width="95" height="95"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="95" id="T7o-O5-WbM"/>
+ <constraint firstAttribute="height" constant="95" id="uiX-rr-64c"/>
+ </constraints>
+ </imageView>
+ </subviews>
+ <color key="backgroundColor" red="0.92549019607843142" green="0.92549019607843142" blue="0.93725490196078431" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="5rP-JO-eZs" firstAttribute="leading" secondItem="M8L-ay-M8z" secondAttribute="leadingMargin" id="AJv-pp-adK"/>
+ <constraint firstItem="4Br-8g-Y1F" firstAttribute="centerX" secondItem="M8L-ay-M8z" secondAttribute="centerX" id="BHu-8x-lDH"/>
+ <constraint firstItem="Zic-gc-gng" firstAttribute="top" secondItem="Dn9-Jz-niK" secondAttribute="bottom" constant="105" id="EPL-N8-fbI"/>
+ <constraint firstItem="8qO-si-Tda" firstAttribute="trailing" secondItem="M8L-ay-M8z" secondAttribute="trailingMargin" id="Fxu-S1-6cs"/>
+ <constraint firstItem="Zic-gc-gng" firstAttribute="centerX" secondItem="M8L-ay-M8z" secondAttribute="centerX" id="HGa-ig-5XZ"/>
+ <constraint firstItem="8qO-si-Tda" firstAttribute="leading" secondItem="M8L-ay-M8z" secondAttribute="leadingMargin" id="JsH-Cf-IID"/>
+ <constraint firstItem="Qbm-8l-KeG" firstAttribute="top" secondItem="8qO-si-Tda" secondAttribute="bottom" constant="20" id="PHM-Yj-7E8"/>
+ <constraint firstItem="5rP-JO-eZs" firstAttribute="top" secondItem="4Br-8g-Y1F" secondAttribute="bottom" constant="16" id="YOK-Zw-1HX"/>
+ <constraint firstItem="5rP-JO-eZs" firstAttribute="trailing" secondItem="M8L-ay-M8z" secondAttribute="trailingMargin" id="a9Q-Gy-PIg"/>
+ <constraint firstItem="ceg-ex-Xdb" firstAttribute="centerX" secondItem="M8L-ay-M8z" secondAttribute="centerX" id="fvq-HD-yPj"/>
+ <constraint firstItem="8qO-si-Tda" firstAttribute="top" secondItem="5rP-JO-eZs" secondAttribute="bottom" constant="7" id="odo-X4-l6Y"/>
+ <constraint firstItem="4Br-8g-Y1F" firstAttribute="top" secondItem="Dn9-Jz-niK" secondAttribute="bottom" constant="35" id="u02-Jg-1ZD"/>
+ <constraint firstItem="ceg-ex-Xdb" firstAttribute="top" secondItem="Dn9-Jz-niK" secondAttribute="bottom" constant="35" id="vC2-ZN-zDN"/>
+ <constraint firstItem="Qbm-8l-KeG" firstAttribute="centerX" secondItem="M8L-ay-M8z" secondAttribute="centerX" id="wpX-ga-1Nk"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="ol8-Ye-vb7"/>
+ <connections>
+ <outlet property="actionButton" destination="Qbm-8l-KeG" id="Pjo-3H-bUr"/>
+ <outlet property="noWifiImageView" destination="Zic-gc-gng" id="MJO-vJ-7Sy"/>
+ <outlet property="resultBackgroudImageView" destination="ceg-ex-Xdb" id="akl-nq-cdU"/>
+ <outlet property="resultImageView" destination="4Br-8g-Y1F" id="dOa-RR-Ib6"/>
+ <outlet property="resultLabel" destination="5rP-JO-eZs" id="J3c-Qn-lGu"/>
+ <outlet property="statusLabel" destination="8qO-si-Tda" id="Cfg-gT-FkU"/>
+ <segue destination="IdM-PQ-Ijo" kind="push" identifier="go2WifiTips" id="c80-fS-zgi"/>
+ <segue destination="csF-MN-QYN" kind="push" identifier="go2WifiResult" id="fz4-3O-uNy"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="da7-fc-UDp" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="990" y="762"/>
+ </scene>
+ <!--Wifi Tips View Controller-->
+ <scene sceneID="jLq-x3-bC0">
+ <objects>
+ <viewController id="IdM-PQ-Ijo" customClass="EZWifiTipsViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="KxQ-S3-2Ow"/>
+ <viewControllerLayoutGuide type="bottom" id="ovJ-zZ-2JG"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="pgV-eo-vTK">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="BN8-qU-5S9">
+ <rect key="frame" x="0.0" y="44" width="375" height="623"/>
+ </imageView>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="trailing" secondItem="BN8-qU-5S9" secondAttribute="trailing" id="Etb-Ez-HtZ"/>
+ <constraint firstItem="BN8-qU-5S9" firstAttribute="top" secondItem="KxQ-S3-2Ow" secondAttribute="bottom" id="W8j-ii-zfh"/>
+ <constraint firstItem="BN8-qU-5S9" firstAttribute="leading" secondItem="pgV-eo-vTK" secondAttribute="leading" id="axG-BG-xrg"/>
+ <constraint firstItem="ovJ-zZ-2JG" firstAttribute="top" secondItem="BN8-qU-5S9" secondAttribute="bottom" id="rdp-Au-jqI"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="702-9r-yZT"/>
+ <connections>
+ <segue destination="4LM-32-B0a" kind="push" identifier="go2WifiInfo" id="Lmt-j9-vhw"/>
+ <segue destination="vEW-kY-l3A" kind="push" identifier="go2DeviceRestart" id="0Qx-2e-yxl"/>
+ <segue destination="Oht-RA-6p0" kind="push" identifier="LocationAlertVC" id="28J-Ax-6ub"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="KfL-UU-LuB" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1967" y="120"/>
+ </scene>
+ <!--Location AlertVC View Controller-->
+ <scene sceneID="X8e-da-3nj">
+ <objects>
+ <viewController storyboardIdentifier="LocationAlertVC" id="Oht-RA-6p0" customClass="EZLocationAlertVCViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="jR6-Jk-sfS"/>
+ <viewControllerLayoutGuide type="bottom" id="HIg-fG-dEs"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="yKS-Rq-Kzr">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="PgL-OV-hf8">
+ <rect key="frame" x="130" y="89" width="115" height="109"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8EG-1W-8gb">
+ <rect key="frame" x="166" y="238" width="0.0" height="0.0"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Kpi-Vj-qTr">
+ <rect key="frame" x="172" y="292" width="30" height="30"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NjQ-lz-pW7">
+ <rect key="frame" x="174" y="353" width="30" height="30"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ </button>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </view>
+ <navigationItem key="navigationItem" id="dWy-0e-pXK"/>
+ <connections>
+ <outlet property="btn" destination="Kpi-Vj-qTr" id="Suh-cD-N13"/>
+ <outlet property="connectLabel" destination="8EG-1W-8gb" id="AZM-Wz-OaX"/>
+ <outlet property="exceptionButton" destination="NjQ-lz-pW7" id="nZA-lZ-Dj5"/>
+ <outlet property="imageView" destination="PgL-OV-hf8" id="WJi-mf-CQT"/>
+ <segue destination="4LM-32-B0a" kind="push" identifier="go2WifiInfo" id="MFl-yy-ZsP"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="wze-Bl-g5G" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="2844" y="118.29085457271366"/>
+ </scene>
+ <!--Device Restart Tips View Controller-->
+ <scene sceneID="hcJ-yB-z4P">
+ <objects>
+ <viewController id="vEW-kY-l3A" customClass="EZDeviceRestartTipsViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="S24-hQ-kb7"/>
+ <viewControllerLayoutGuide type="bottom" id="4pg-4A-92F"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="GTZ-cT-BIG">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="0UR-6j-PZR">
+ <rect key="frame" x="-4" y="44" width="383" height="623"/>
+ </imageView>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="trailingMargin" secondItem="0UR-6j-PZR" secondAttribute="trailing" constant="-20" id="4oE-ia-Xcc"/>
+ <constraint firstItem="4pg-4A-92F" firstAttribute="top" secondItem="0UR-6j-PZR" secondAttribute="bottom" id="4xh-cK-zEz"/>
+ <constraint firstItem="0UR-6j-PZR" firstAttribute="top" secondItem="S24-hQ-kb7" secondAttribute="bottom" id="DNK-n9-dar"/>
+ <constraint firstItem="0UR-6j-PZR" firstAttribute="leading" secondItem="GTZ-cT-BIG" secondAttribute="leadingMargin" constant="-20" id="aeu-Ch-eS4"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="WcQ-Wt-BhL"/>
+ <connections>
+ <segue destination="4LM-32-B0a" kind="push" identifier="go2WifiInfo2" id="9Lc-Kx-oZS"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="qvo-Ze-vQX" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1966" y="1126"/>
+ </scene>
+ <!--Wifi Info View Controller-->
+ <scene sceneID="gmB-NS-VUf">
+ <objects>
+ <viewController id="4LM-32-B0a" customClass="EZWifiInfoViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="cmM-g4-cp8"/>
+ <viewControllerLayoutGuide type="bottom" id="NOY-Rr-TON"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="d8L-jj-vD6">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="clv-dK-n7o">
+ <rect key="frame" x="0.0" y="44" width="375" height="623"/>
+ <color key="backgroundColor" red="0.92156862745098034" green="0.92156862745098034" blue="0.92156862745098034" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="濡傛灉浣犱娇鐢ㄧ殑鏄弻棰戣矾鐢卞櫒锛岃涓嶈璁╂憚鍍忔満杩炴帴5G棰戞鐨刉i-Fi" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="300" translatesAutoresizingMaskIntoConstraints="NO" id="R5v-Qf-L5p">
+ <rect key="frame" x="10" y="52" width="355" height="40"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="GwT-5d-OBT"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="2VJ-jQ-xjR">
+ <rect key="frame" x="10" y="102" width="355" height="34"/>
+ <color key="backgroundColor" red="0.92549019610000005" green="0.92549019610000005" blue="0.93725490199999995" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="34" id="jiJ-ow-iwT"/>
+ </constraints>
+ <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="O9a-PX-Ekn">
+ <rect key="frame" x="10" y="148" width="355" height="34"/>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="34" id="FPO-BB-N1L"/>
+ </constraints>
+ <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" secureTextEntry="YES"/>
+ </textField>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="x6F-l5-dhJ">
+ <rect key="frame" x="45" y="198" width="285" height="38"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="38" id="PA7-yu-iCr"/>
+ <constraint firstAttribute="width" constant="285" id="tA7-YC-H4g"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="涓嬩竴姝�" backgroundImage="blue_button"/>
+ <connections>
+ <action selector="nextAction:" destination="4LM-32-B0a" eventType="touchUpInside" id="VHS-dX-Wkr"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="clv-dK-n7o" firstAttribute="leading" secondItem="d8L-jj-vD6" secondAttribute="leading" id="08K-pG-5PO"/>
+ <constraint firstAttribute="trailing" secondItem="O9a-PX-Ekn" secondAttribute="trailing" constant="10" id="52l-1i-Pco"/>
+ <constraint firstItem="O9a-PX-Ekn" firstAttribute="leading" secondItem="d8L-jj-vD6" secondAttribute="leading" constant="10" id="5g4-vL-Mys"/>
+ <constraint firstItem="O9a-PX-Ekn" firstAttribute="top" secondItem="2VJ-jQ-xjR" secondAttribute="bottom" constant="12" id="DeE-c7-HBb"/>
+ <constraint firstItem="x6F-l5-dhJ" firstAttribute="centerX" secondItem="d8L-jj-vD6" secondAttribute="centerX" id="JaT-z6-LkB"/>
+ <constraint firstItem="R5v-Qf-L5p" firstAttribute="top" secondItem="cmM-g4-cp8" secondAttribute="bottom" constant="8" id="Sse-cN-pTd"/>
+ <constraint firstItem="NOY-Rr-TON" firstAttribute="top" secondItem="clv-dK-n7o" secondAttribute="bottom" id="X7t-Yd-mrG"/>
+ <constraint firstItem="2VJ-jQ-xjR" firstAttribute="leading" secondItem="d8L-jj-vD6" secondAttribute="leading" constant="10" id="bMV-mc-bJr"/>
+ <constraint firstAttribute="trailing" secondItem="2VJ-jQ-xjR" secondAttribute="trailing" constant="10" id="cO9-4s-Ykf"/>
+ <constraint firstItem="R5v-Qf-L5p" firstAttribute="leading" secondItem="d8L-jj-vD6" secondAttribute="leading" constant="10" id="oFF-n8-dtg"/>
+ <constraint firstAttribute="trailing" secondItem="R5v-Qf-L5p" secondAttribute="trailing" constant="10" id="pOg-Dl-TXn"/>
+ <constraint firstAttribute="trailing" secondItem="clv-dK-n7o" secondAttribute="trailing" id="qPB-NE-UcX"/>
+ <constraint firstItem="x6F-l5-dhJ" firstAttribute="top" secondItem="O9a-PX-Ekn" secondAttribute="bottom" constant="16" id="vER-Yv-l4s"/>
+ <constraint firstItem="2VJ-jQ-xjR" firstAttribute="top" secondItem="R5v-Qf-L5p" secondAttribute="bottom" constant="10" id="x6R-Lv-fbv"/>
+ <constraint firstItem="clv-dK-n7o" firstAttribute="top" secondItem="cmM-g4-cp8" secondAttribute="bottom" id="zhV-bv-7bb"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="hI4-Fg-uLQ"/>
+ <connections>
+ <outlet property="nameLabel" destination="xrj-ZU-1Ue" id="kye-HU-Pbk"/>
+ <outlet property="nameTextField" destination="2VJ-jQ-xjR" id="rOz-Ym-kbY"/>
+ <outlet property="nextButton" destination="x6F-l5-dhJ" id="Sb4-tE-eLb"/>
+ <outlet property="passwordLabel" destination="KAV-Sk-wEc" id="Fhs-an-RJ3"/>
+ <outlet property="passwordTextField" destination="O9a-PX-Ekn" id="ZjZ-mw-sUa"/>
+ <outlet property="tipsLabel" destination="R5v-Qf-L5p" id="gUT-EG-1vn"/>
+ <segue destination="csF-MN-QYN" kind="push" identifier="go2WifiConfig" id="9TP-S2-hhI"/>
+ <segue destination="vv3-ty-L75" kind="push" identifier="go2APWifiConfig" id="9OK-bP-wm2"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="8Ot-A2-8H6" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="缃戠粶" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="xrj-ZU-1Ue">
+ <rect key="frame" x="0.0" y="0.0" width="42" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="瀵嗙爜" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="KAV-Sk-wEc">
+ <rect key="frame" x="0.0" y="0.0" width="42" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </objects>
+ <point key="canvasLocation" x="2809" y="1126"/>
+ </scene>
+ <!--Wi Fi Config View Controller-->
+ <scene sceneID="t0b-Ec-Dce">
+ <objects>
+ <viewController id="vv3-ty-L75" customClass="EZAPWiFiConfigViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="nsk-xy-iCQ"/>
+ <viewControllerLayoutGuide type="bottom" id="oFO-Ry-mCb"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="KKo-IW-zRG">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="hOV-zC-2w5">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ </imageView>
+ <button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="iaq-GW-DZt">
+ <rect key="frame" x="127" y="183" width="121" height="30"/>
+ <color key="backgroundColor" red="1" green="0.57637232540000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="121" id="bqT-5I-Fd7"/>
+ <constraint firstAttribute="height" constant="30" id="lJm-Ax-NNL"/>
+ </constraints>
+ <state key="normal" title="澶嶅埗瀵嗙爜">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="copyPwdBtnClick:" destination="vv3-ty-L75" eventType="touchUpInside" id="631-zp-Egb"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="璇烽�氳繃涓嬪垪姝ラ灏嗘墜鏈鸿繛鎺ュ埌璁惧Wi-Fi锛�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="hz9-ZE-6rg">
+ <rect key="frame" x="16" y="66" width="343" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="hWx-qJ-D5P"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2fV-EH-7VO">
+ <rect key="frame" x="16" y="104" width="20" height="34"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="20" id="X1g-Uc-DV1"/>
+ <constraint firstAttribute="height" constant="34" id="iFC-0F-xx0"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="29"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="寰呰繛鎺ョ殑璁惧Wi-Fi淇℃伅濡備笅锛�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0PQ-gp-JOK">
+ <rect key="frame" x="47.5" y="104" width="311.5" height="17"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="17" id="oTg-hz-sFc"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="鍚嶇О锛�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="bzO-cY-bUs">
+ <rect key="frame" x="47.5" y="125" width="43" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="AlL-68-8AQ"/>
+ <constraint firstAttribute="width" constant="43" id="N5T-re-TCl"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="瀵嗙爜锛�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BBf-mw-P8e">
+ <rect key="frame" x="47.5" y="150" width="43" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="s8K-RM-Tg7"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="EZVIZ_137897687" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SOG-Vj-m3m">
+ <rect key="frame" x="99.5" y="125" width="259.5" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="nXt-eu-vGR"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.95992773771286011" green="0.52706600270301529" blue="0.055206058104723267" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="EZVIZ_137897687" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gzp-iy-iES">
+ <rect key="frame" x="99.5" y="150" width="259.5" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="0Gv-BZ-q14"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.95992773769999995" green="0.52706600270000004" blue="0.055206058099999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ehD-Vr-EwS">
+ <rect key="frame" x="16" y="225" width="343" height="1"/>
+ <color key="backgroundColor" red="0.78894352791878175" green="0.78894352791878175" blue="0.78894352791878175" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="1" id="pik-Wt-Z4d"/>
+ </constraints>
+ </view>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SyB-zd-gzt">
+ <rect key="frame" x="16" y="241" width="20" height="34"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="34" id="NdV-0A-du0"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="29"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UGZ-ag-Osr">
+ <rect key="frame" x="47.5" y="241" width="311.5" height="60"/>
+ <attributedString key="attributedText">
+ <fragment content="杩涘叆鎵嬫満绯荤粺Wi-Fi璁剧疆鐣岄潰锛岄�夋嫨鍚嶇О涓�">
+ <attributes>
+ <color key="NSBackgroundColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+ <font key="NSFont" metaFont="system" size="14"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0"/>
+ </attributes>
+ </fragment>
+ <fragment content="EZVIZ_173784938">
+ <attributes>
+ <color key="NSBackgroundColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+ <color key="NSColor" red="1" green="0.59549855620779035" blue="0.15890927166137003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <font key="NSFont" metaFont="system" size="14"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0"/>
+ </attributes>
+ </fragment>
+ <fragment content="鐨勭綉缁滐紝鐢ㄦ彁绀虹殑瀵嗙爜杩涜杩炴帴">
+ <attributes>
+ <color key="NSBackgroundColor" red="1" green="1" blue="1" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+ <font key="NSFont" metaFont="system" size="14"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0"/>
+ </attributes>
+ </fragment>
+ </attributedString>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hOb-L4-rkc">
+ <rect key="frame" x="127" y="311" width="121" height="30"/>
+ <color key="backgroundColor" red="1" green="0.57637232540000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="121" id="bBU-c1-yuI"/>
+ <constraint firstAttribute="height" constant="30" id="yF3-zb-oJT"/>
+ </constraints>
+ <state key="normal" title="杩涘叆璁剧疆鐣岄潰">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="enterSettingBtnClick:" destination="vv3-ty-L75" eventType="touchUpInside" id="QGy-Gg-Fxj"/>
+ </connections>
+ </button>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Wq1-Ch-GSx">
+ <rect key="frame" x="16" y="353" width="343" height="1"/>
+ <color key="backgroundColor" red="0.7889435279" green="0.7889435279" blue="0.7889435279" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="1" id="fT8-Cd-qEF"/>
+ </constraints>
+ </view>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="3" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="utk-BE-uLK">
+ <rect key="frame" x="16" y="362" width="20" height="35"/>
+ <fontDescription key="fontDescription" type="system" pointSize="29"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q0X-wy-A5B">
+ <rect key="frame" x="47.5" y="362" width="311.5" height="100"/>
+ <attributedString key="attributedText">
+ <fragment content="杩斿洖">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="PingFangSC-Regular"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="APP">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="HelveticaNeue"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="锛岀瓑寰呬笌璁惧杩炴帴锛屾垚鍔熷悗鑷姩杩涘叆涓嬩竴姝ユ搷浣溿��">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="PingFangSC-Regular"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="鈥�">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="HelveticaNeue"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="(娉ㄦ剰锛氬鏋滆澶�">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="PingFangSC-Regular"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="WIFI">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="HelveticaNeue"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="鍚嶇О涓嶆槸鈥�">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="PingFangSC-Regular"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="EZVIZ">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="HelveticaNeue"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="鈥濆墠缂�鐨勶紝璇峰鍒跺瘑鐮佸悗鏍规嵁鏂扮殑鍓嶇紑鍚嶅瓧锛屾墜鍔ㄤ慨鏀瑰瘑鐮佺殑鍓嶇紑骞惰繛鎺ュ嵆鍙�備緥濡傗��">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="PingFangSC-Regular"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="SoftAP_XXXXXXX">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="13" name="HelveticaNeue"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ <fragment content="鈥�)">
+ <attributes>
+ <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
+ <font key="NSFont" size="14" name="PingFangSC-Regular"/>
+ <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
+ </attributes>
+ </fragment>
+ </attributedString>
+ <nil key="highlightedColor"/>
+ </label>
+ <activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="YrL-E6-3kA">
+ <rect key="frame" x="177.5" y="627" width="20" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="qMR-gD-2g5"/>
+ <constraint firstAttribute="width" constant="20" id="sJq-xn-rP3"/>
+ </constraints>
+ </activityIndicatorView>
+ <button hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="b2S-tK-xqv">
+ <rect key="frame" x="127" y="617" width="121" height="30"/>
+ <color key="backgroundColor" red="1" green="0.57637232540000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="30" id="9fF-6T-JWK"/>
+ <constraint firstAttribute="width" constant="121" id="9jN-6e-csu"/>
+ </constraints>
+ <state key="normal" title="娣诲姞璁惧">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="addBtnClick:" destination="vv3-ty-L75" eventType="touchUpInside" id="Zvv-np-LOp"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstItem="hOV-zC-2w5" firstAttribute="leading" secondItem="KKo-IW-zRG" secondAttribute="leading" id="0oK-yS-Vaw"/>
+ <constraint firstItem="bzO-cY-bUs" firstAttribute="leading" secondItem="0PQ-gp-JOK" secondAttribute="leading" id="3Xh-Z2-Psg"/>
+ <constraint firstItem="ehD-Vr-EwS" firstAttribute="top" secondItem="iaq-GW-DZt" secondAttribute="bottom" constant="12" id="5Gd-3A-q5b"/>
+ <constraint firstItem="0PQ-gp-JOK" firstAttribute="top" secondItem="2fV-EH-7VO" secondAttribute="top" id="5Hv-ly-O3c"/>
+ <constraint firstItem="utk-BE-uLK" firstAttribute="trailing" secondItem="2fV-EH-7VO" secondAttribute="trailing" id="8VS-a8-qP5"/>
+ <constraint firstItem="BBf-mw-P8e" firstAttribute="trailing" secondItem="bzO-cY-bUs" secondAttribute="trailing" id="8wy-kS-VG7"/>
+ <constraint firstItem="hOb-L4-rkc" firstAttribute="top" secondItem="UGZ-ag-Osr" secondAttribute="bottom" constant="10" id="9vi-nZ-UgD"/>
+ <constraint firstItem="Wq1-Ch-GSx" firstAttribute="trailing" secondItem="ehD-Vr-EwS" secondAttribute="trailing" id="AGg-Kd-vnq"/>
+ <constraint firstItem="Wq1-Ch-GSx" firstAttribute="leading" secondItem="ehD-Vr-EwS" secondAttribute="leading" id="Aig-eS-mta"/>
+ <constraint firstItem="iaq-GW-DZt" firstAttribute="top" secondItem="gzp-iy-iES" secondAttribute="bottom" constant="12" id="Bdk-ZW-4RS"/>
+ <constraint firstItem="SyB-zd-gzt" firstAttribute="leading" secondItem="hz9-ZE-6rg" secondAttribute="leading" id="Cn1-eI-tAB"/>
+ <constraint firstItem="BBf-mw-P8e" firstAttribute="top" secondItem="bzO-cY-bUs" secondAttribute="bottom" constant="4" id="E10-X2-utJ"/>
+ <constraint firstItem="YrL-E6-3kA" firstAttribute="centerX" secondItem="KKo-IW-zRG" secondAttribute="centerX" id="F9Q-Q6-YEk"/>
+ <constraint firstItem="0PQ-gp-JOK" firstAttribute="leading" secondItem="2fV-EH-7VO" secondAttribute="trailing" constant="11.5" id="GZk-iq-CRL"/>
+ <constraint firstItem="SyB-zd-gzt" firstAttribute="top" secondItem="ehD-Vr-EwS" secondAttribute="bottom" constant="15" id="H2d-JZ-e0K"/>
+ <constraint firstItem="Q0X-wy-A5B" firstAttribute="top" secondItem="utk-BE-uLK" secondAttribute="top" id="Hlq-TH-Aga"/>
+ <constraint firstItem="BBf-mw-P8e" firstAttribute="leading" secondItem="0PQ-gp-JOK" secondAttribute="leading" id="J8N-Ey-G1H"/>
+ <constraint firstItem="0PQ-gp-JOK" firstAttribute="trailing" secondItem="hz9-ZE-6rg" secondAttribute="trailing" id="JZk-Zj-Xil"/>
+ <constraint firstItem="hz9-ZE-6rg" firstAttribute="top" secondItem="nsk-xy-iCQ" secondAttribute="bottom" constant="22" id="KK2-ro-tyQ"/>
+ <constraint firstItem="SOG-Vj-m3m" firstAttribute="leading" secondItem="bzO-cY-bUs" secondAttribute="trailing" constant="9" id="KWp-Lm-RZh"/>
+ <constraint firstItem="gzp-iy-iES" firstAttribute="centerY" secondItem="BBf-mw-P8e" secondAttribute="centerY" id="LdV-ad-k0u"/>
+ <constraint firstItem="SOG-Vj-m3m" firstAttribute="trailing" secondItem="0PQ-gp-JOK" secondAttribute="trailing" id="MAl-oM-iDM"/>
+ <constraint firstItem="Q0X-wy-A5B" firstAttribute="trailing" secondItem="0PQ-gp-JOK" secondAttribute="trailing" id="ODn-lQ-5e8"/>
+ <constraint firstItem="oFO-Ry-mCb" firstAttribute="top" secondItem="YrL-E6-3kA" secondAttribute="bottom" constant="20" id="OiN-WD-nvP"/>
+ <constraint firstItem="SOG-Vj-m3m" firstAttribute="centerY" secondItem="bzO-cY-bUs" secondAttribute="centerY" id="RFn-mA-EJ4"/>
+ <constraint firstItem="b2S-tK-xqv" firstAttribute="centerX" secondItem="KKo-IW-zRG" secondAttribute="centerX" id="RYN-3Z-zNc"/>
+ <constraint firstItem="bzO-cY-bUs" firstAttribute="top" secondItem="0PQ-gp-JOK" secondAttribute="bottom" constant="4" id="Sa1-Ji-Vsd"/>
+ <constraint firstItem="ehD-Vr-EwS" firstAttribute="leading" secondItem="KKo-IW-zRG" secondAttribute="leadingMargin" id="TF1-RG-Smh"/>
+ <constraint firstItem="oFO-Ry-mCb" firstAttribute="top" secondItem="b2S-tK-xqv" secondAttribute="bottom" constant="20" id="TQM-qf-NsS"/>
+ <constraint firstItem="hz9-ZE-6rg" firstAttribute="trailing" secondItem="KKo-IW-zRG" secondAttribute="trailingMargin" id="WPJ-HS-ZnM"/>
+ <constraint firstItem="Wq1-Ch-GSx" firstAttribute="top" secondItem="hOb-L4-rkc" secondAttribute="bottom" constant="12" id="XMS-7r-u6c"/>
+ <constraint firstItem="oFO-Ry-mCb" firstAttribute="top" secondItem="hOV-zC-2w5" secondAttribute="bottom" id="c9Y-Qf-GMj"/>
+ <constraint firstItem="SyB-zd-gzt" firstAttribute="trailing" secondItem="2fV-EH-7VO" secondAttribute="trailing" id="dAm-RQ-WRl"/>
+ <constraint firstItem="ehD-Vr-EwS" firstAttribute="trailing" secondItem="KKo-IW-zRG" secondAttribute="trailingMargin" id="epc-RT-Ded"/>
+ <constraint firstItem="utk-BE-uLK" firstAttribute="leading" secondItem="hz9-ZE-6rg" secondAttribute="leading" id="fjJ-jL-eXe"/>
+ <constraint firstItem="hOV-zC-2w5" firstAttribute="top" secondItem="KKo-IW-zRG" secondAttribute="top" id="gDK-R1-B94"/>
+ <constraint firstItem="utk-BE-uLK" firstAttribute="top" secondItem="Wq1-Ch-GSx" secondAttribute="bottom" constant="8" id="hHk-Xi-Yhh"/>
+ <constraint firstItem="2fV-EH-7VO" firstAttribute="top" secondItem="hz9-ZE-6rg" secondAttribute="bottom" constant="17" id="hTf-eb-Ag5"/>
+ <constraint firstItem="gzp-iy-iES" firstAttribute="leading" secondItem="SOG-Vj-m3m" secondAttribute="leading" id="hrE-gd-LHm"/>
+ <constraint firstItem="iaq-GW-DZt" firstAttribute="centerX" secondItem="KKo-IW-zRG" secondAttribute="centerX" id="kKE-w8-VuG"/>
+ <constraint firstItem="hz9-ZE-6rg" firstAttribute="leading" secondItem="KKo-IW-zRG" secondAttribute="leadingMargin" id="kdx-O7-vg1"/>
+ <constraint firstItem="Q0X-wy-A5B" firstAttribute="leading" secondItem="0PQ-gp-JOK" secondAttribute="leading" id="s0A-KQ-eo9"/>
+ <constraint firstItem="UGZ-ag-Osr" firstAttribute="top" secondItem="SyB-zd-gzt" secondAttribute="top" id="tLw-tX-duA"/>
+ <constraint firstItem="UGZ-ag-Osr" firstAttribute="leading" secondItem="0PQ-gp-JOK" secondAttribute="leading" id="tdL-7S-QHt"/>
+ <constraint firstAttribute="trailing" secondItem="hOV-zC-2w5" secondAttribute="trailing" id="thP-tZ-b3W"/>
+ <constraint firstItem="hOb-L4-rkc" firstAttribute="centerX" secondItem="KKo-IW-zRG" secondAttribute="centerX" id="vUS-EE-fZA"/>
+ <constraint firstItem="gzp-iy-iES" firstAttribute="trailing" secondItem="0PQ-gp-JOK" secondAttribute="trailing" id="wSs-1b-4Bq"/>
+ <constraint firstItem="2fV-EH-7VO" firstAttribute="leading" secondItem="hz9-ZE-6rg" secondAttribute="leading" id="yJG-qX-9GP"/>
+ <constraint firstItem="UGZ-ag-Osr" firstAttribute="trailing" secondItem="0PQ-gp-JOK" secondAttribute="trailing" id="z3b-uO-pZw"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="XkN-Um-DoE"/>
+ <connections>
+ <outlet property="addBtn" destination="b2S-tK-xqv" id="9pR-up-3TG"/>
+ <outlet property="nameL" destination="bzO-cY-bUs" id="aYK-OL-VpJ"/>
+ <outlet property="passwordLable" destination="BBf-mw-P8e" id="d3L-jP-uP1"/>
+ <outlet property="processingIndicator" destination="YrL-E6-3kA" id="uPy-Af-flm"/>
+ <outlet property="step1TipLable" destination="0PQ-gp-JOK" id="nAm-9N-DTh"/>
+ <outlet property="stepThreeLable" destination="Q0X-wy-A5B" id="DWX-OJ-YK3"/>
+ <outlet property="stepTwoLabel" destination="UGZ-ag-Osr" id="9F4-Kd-6rm"/>
+ <outlet property="tipLable" destination="hz9-ZE-6rg" id="ptX-eG-7O7"/>
+ <outlet property="toCopBtn" destination="iaq-GW-DZt" id="TnC-6F-kLV"/>
+ <outlet property="toSetBtn" destination="hOb-L4-rkc" id="cYH-M0-bkA"/>
+ <outlet property="wifiNameLabel" destination="SOG-Vj-m3m" id="uq7-f2-ZQ8"/>
+ <outlet property="wifiPwdLabel" destination="gzp-iy-iES" id="Z9H-tO-3B5"/>
+ <segue destination="2Wn-Wh-fVL" kind="push" identifier="go2WifiConfigResult" id="Csk-KC-bfz"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="bdN-GB-lpf" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="3260" y="1986"/>
+ </scene>
+ <!--Config Result View Controller-->
+ <scene sceneID="3j7-fn-MK0">
+ <objects>
+ <viewController id="2Wn-Wh-fVL" customClass="EZAPConfigResultViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="6qi-zI-8ch"/>
+ <viewControllerLayoutGuide type="bottom" id="6jk-ge-Cjk"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="dOi-Kb-nwY">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="aZD-Mg-eY7">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ </imageView>
+ <activityIndicatorView opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="jRF-LK-ZpE">
+ <rect key="frame" x="177.5" y="323.5" width="20" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="fpb-6A-yMC"/>
+ <constraint firstAttribute="width" constant="20" id="w4Y-XL-gFy"/>
+ </constraints>
+ </activityIndicatorView>
+ <imageView hidden="YES" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="addDevice_success" translatesAutoresizingMaskIntoConstraints="NO" id="LU8-Bg-Ntj">
+ <rect key="frame" x="107.5" y="293.5" width="160" height="80"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="80" id="FeI-XE-6jJ"/>
+ <constraint firstAttribute="width" constant="160" id="Wu8-1n-7EF"/>
+ </constraints>
+ </imageView>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="mDU-NX-CXb">
+ <rect key="frame" x="162.5" y="392.5" width="50" height="30"/>
+ <color key="backgroundColor" red="1" green="0.57637232540000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="30" id="2KE-Kj-q0Y"/>
+ <constraint firstAttribute="width" constant="50" id="QFG-CY-7hP"/>
+ </constraints>
+ <state key="normal" title="瀹屾垚">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="doneBtnClick:" destination="2Wn-Wh-fVL" eventType="touchUpInside" id="TMv-98-CTR"/>
+ </connections>
+ </button>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="RaQ-FQ-QZ1">
+ <rect key="frame" x="162.5" y="318.5" width="50" height="30"/>
+ <color key="backgroundColor" red="1" green="0.57637232540000005" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="30" id="EW0-q2-hgF"/>
+ <constraint firstAttribute="width" constant="50" id="gDX-dy-3Ee"/>
+ </constraints>
+ <state key="normal" title="閲嶈瘯">
+ <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="retryBtnClick:" destination="2Wn-Wh-fVL" eventType="touchUpInside" id="bJI-PZ-aNd"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="娣诲姞璁惧涓紝璇风◢鍚�..." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="spS-wV-76P">
+ <rect key="frame" x="16" y="262.5" width="343" height="23"/>
+ <fontDescription key="fontDescription" type="system" pointSize="19"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstItem="RaQ-FQ-QZ1" firstAttribute="centerY" secondItem="dOi-Kb-nwY" secondAttribute="centerY" id="75B-5P-8xy"/>
+ <constraint firstItem="LU8-Bg-Ntj" firstAttribute="centerX" secondItem="dOi-Kb-nwY" secondAttribute="centerX" id="8s6-KE-vER"/>
+ <constraint firstAttribute="trailing" secondItem="aZD-Mg-eY7" secondAttribute="trailing" id="Bfj-VN-wdL"/>
+ <constraint firstItem="jRF-LK-ZpE" firstAttribute="centerY" secondItem="dOi-Kb-nwY" secondAttribute="centerY" id="FpQ-3e-Anx"/>
+ <constraint firstItem="LU8-Bg-Ntj" firstAttribute="centerY" secondItem="dOi-Kb-nwY" secondAttribute="centerY" id="KWB-rG-l3d"/>
+ <constraint firstItem="6jk-ge-Cjk" firstAttribute="top" secondItem="aZD-Mg-eY7" secondAttribute="bottom" id="N2a-sN-cRT"/>
+ <constraint firstItem="LU8-Bg-Ntj" firstAttribute="top" secondItem="spS-wV-76P" secondAttribute="bottom" constant="8" id="Q1t-fK-KrS"/>
+ <constraint firstItem="aZD-Mg-eY7" firstAttribute="top" secondItem="dOi-Kb-nwY" secondAttribute="top" id="UJ7-6e-zx8"/>
+ <constraint firstItem="RaQ-FQ-QZ1" firstAttribute="centerX" secondItem="dOi-Kb-nwY" secondAttribute="centerX" id="WSV-tj-2Sf"/>
+ <constraint firstItem="mDU-NX-CXb" firstAttribute="top" secondItem="LU8-Bg-Ntj" secondAttribute="bottom" constant="19" id="Y8k-nU-c8s"/>
+ <constraint firstItem="spS-wV-76P" firstAttribute="leading" secondItem="dOi-Kb-nwY" secondAttribute="leadingMargin" id="bXB-cd-zZf"/>
+ <constraint firstItem="aZD-Mg-eY7" firstAttribute="leading" secondItem="dOi-Kb-nwY" secondAttribute="leading" id="kE8-tT-hf0"/>
+ <constraint firstItem="spS-wV-76P" firstAttribute="trailing" secondItem="dOi-Kb-nwY" secondAttribute="trailingMargin" id="sG1-Kq-qaT"/>
+ <constraint firstItem="jRF-LK-ZpE" firstAttribute="centerX" secondItem="dOi-Kb-nwY" secondAttribute="centerX" id="scU-1h-7gS"/>
+ <constraint firstItem="mDU-NX-CXb" firstAttribute="centerX" secondItem="dOi-Kb-nwY" secondAttribute="centerX" id="vFr-fs-YRq"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="7fb-UA-HaO"/>
+ <connections>
+ <outlet property="doneBtn" destination="mDU-NX-CXb" id="nXU-Em-gbJ"/>
+ <outlet property="loadingIndicator" destination="jRF-LK-ZpE" id="xP7-He-q8R"/>
+ <outlet property="msgLabel" destination="spS-wV-76P" id="ebh-Qz-aAF"/>
+ <outlet property="retryBtn" destination="RaQ-FQ-QZ1" id="DLh-WK-MqR"/>
+ <outlet property="successImageView" destination="LU8-Bg-Ntj" id="QZg-DB-Tqd"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="gDr-kq-8JY" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="4095" y="1986"/>
+ </scene>
+ <!--Wifi Config View Controller-->
+ <scene sceneID="jy7-7a-VfS">
+ <objects>
+ <viewController storyboardIdentifier="WifiConfig" id="csF-MN-QYN" customClass="EZWifiConfigViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="bNp-Fo-Kjg"/>
+ <viewControllerLayoutGuide type="bottom" id="ilf-pc-32c"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="uxY-or-TSM">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="2Bp-Jx-oq2">
+ <rect key="frame" x="0.0" y="44" width="375" height="623"/>
+ <color key="backgroundColor" red="0.92156862750000001" green="0.92156862750000001" blue="0.92156862750000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </imageView>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="trailing" secondItem="2Bp-Jx-oq2" secondAttribute="trailing" id="KKc-a3-tf2"/>
+ <constraint firstItem="2Bp-Jx-oq2" firstAttribute="top" secondItem="bNp-Fo-Kjg" secondAttribute="bottom" id="Zho-au-ewd"/>
+ <constraint firstItem="2Bp-Jx-oq2" firstAttribute="leading" secondItem="uxY-or-TSM" secondAttribute="leading" id="iKD-bO-uoE"/>
+ <constraint firstItem="ilf-pc-32c" firstAttribute="top" secondItem="2Bp-Jx-oq2" secondAttribute="bottom" id="wht-CS-Rt7"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="lYh-Pf-QOC"/>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="Trk-g7-Omc" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1071" y="1926"/>
+ </scene>
+ </scenes>
+ <inferredMetricsTieBreakers>
+ <segue reference="fz4-3O-uNy"/>
+ <segue reference="Lmt-j9-vhw"/>
+ <segue reference="ikM-Zn-H8f"/>
+ </inferredMetricsTieBreakers>
+ <resources>
+ <image name="addDevice_success" width="320" height="185"/>
+ <image name="blue_button" width="285" height="39"/>
+ <image name="blue_button_sel" width="285" height="39"/>
+ <image name="close" width="64" height="30"/>
+ <image name="no_wifi" width="94" height="94"/>
+ <image name="open" width="64" height="30"/>
+ <image name="qr_scan_line" width="219" height="6"/>
+ <image name="results_pic_bg" width="175" height="165"/>
+ <image name="wifi_bg" width="320" height="450"/>
+ </resources>
+</document>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/AppDelegate.h b/EZDemo/HDLEZDemo/HDLEZDemo/AppDelegate.h
new file mode 100644
index 0000000..245dea3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/AppDelegate.h
@@ -0,0 +1,21 @@
+//
+// AppDelegate.h
+// HDLEZDemo
+//
+// Created by 闄堝惎鎵� on 2023/3/2.
+//
+
+#import <UIKit/UIKit.h>
+#import <CoreData/CoreData.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+@property (readonly, strong) NSPersistentContainer *persistentContainer;
+
+- (void)saveContext;
+
+
+@end
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/AppDelegate.m b/EZDemo/HDLEZDemo/HDLEZDemo/AppDelegate.m
new file mode 100644
index 0000000..286b072
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/AppDelegate.m
@@ -0,0 +1,115 @@
+//
+// AppDelegate.m
+// HDLEZDemo
+//
+// Created by 闄堝惎鎵� on 2023/3/2.
+//
+
+#import "AppDelegate.h"
+#import "EZSDK.h"
+#import <CoreLocation/CoreLocation.h>
+
+@interface AppDelegate ()<CLLocationManagerDelegate>
+@property (nonatomic, strong) CLLocationManager *locationmanager;
+
+@end
+
+@implementation AppDelegate
+
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+
+// //璁剧疆window
+// self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
+
+ // Override point for customization after application launch.
+ [[EZSDK sharedInstance] initLibWithAppKey:@"1aa98a90489b4838b966b57018b4b04b" globalAppKey:@"1aa98a90489b4838b966b57018b4b04b"];
+// [[EZSDK sharedInstance] initLibWithAppKey:@"941b1b72b6294998acfd36c14931b675" globalAppKey:@"941b1b72b6294998acfd36c14931b675"];
+ [[EZSDK sharedInstance] setHDlAccessToken:@"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI1NTc3YTY5ZDYxMTM0YzgxYjFiMzQ3NjczYjAzYTI3MSIsImNvbXBhbnlJZCI6IjAiLCJyb2xlIjoiIiwiaGVhZGVyUHJlZml4IjoiQmVhcmVyICIsInVzZXJBY2NvdW50Ijoid3hyIiwidGVuYW50SWQiOiIyMCIsInVzZXJUeXBlIjoiVVNFUl9DIiwidG9rZW5UeXBlIjoiYWNjZXNzX3Rva2VuIiwidXNlck5hbWUiOiJ3eHIiLCJ1c2VyRGF0YVJpZ2h0IjoiMSIsIm9wZW5BcHBsaWNhdGlvbklkIjoiMCIsInVzZXJJZCI6IjEzOTIwMzU1NjgyMDQ0MjMxNjkiLCJleHAiOjE2ODE3MzEwOTMsIm5iZiI6MTY4MTcyMzg5M30.E-h5ba1N1vJZjrNgvBAx0XLg13oTxITqjMVuzxeXdgoxYRzhmYUlGATIz_B3OK71Bv91pVq-q2Z6LlA8-40pUNDGN_YGLBSt4p34KliTGisr106ksoFd5B2f3qJt3bgfDHANJCp8tfFcUBGSdX0I9TSworLkQYS0K4Asd_t-ObA" refreshToken:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJmNDZlOTYzMDQ1ODU0MzI4YTUwOWE2ZDljYmE2YjU1NCIsImNvbXBhbnlJZCI6IjAiLCJoZWFkZXJQcmVmaXgiOiJCZWFyZXIgIiwidGVuYW50SWQiOiIyMCIsInRva2VuVHlwZSI6InJlZnJlc2hfdG9rZW4iLCJvcGVuQXBwbGljYXRpb25JZCI6IjAiLCJ1c2VySWQiOiIxMzkyMDM1NTY4MjA0NDIzMTY5IiwiZXhwIjoxNjgyMzI4NjkzLCJuYmYiOjE2ODE3MjM4OTN9.iQu24WYLPqr3g7LUklZFS7JlY5eO_smPDgUwM3z9s2ldK528nw1EMp0SQgy5USpKpgFzATliDLpb_UDXhx-8-uUjO9dtL8dY3P-I9xmpwjnF13I8eYg5h40hZa5ihuokURsOf9DnD7cjLEItQ_FCsT8rdu9vFzQSE-TWoTmkSV8"];
+ [[EZSDK sharedInstance] setRequestHttpsHostAndPlatform:@"https://test-gz.hdlcontrol.com" platform:1 homeId:@"1547099040465408002"];
+// [[EZSDK sharedInstance] setRequestHttpsHostAndPlatform:@"https://test-gz.hdlcontrol.com" platform:1 homeId:@"1644171733588557825"];
+ [[EZSDK sharedInstance] setEZAccessToken:@"ra.be9kj2gsdeldsty13rdsieay3wigmdxn-9dccz2nop6-11v2z1o-jslwzcqgz"];
+// [[EZSDK sharedInstance] setEZAccessToken:@"ra.3hkirwcadrpfmaa89wep99io3wto4yds-7zptb10d20-1wxg4f3-ygiojudee"];
+
+
+ //瀹氫綅鏉冮檺
+ _locationmanager = [[CLLocationManager alloc]init];
+ _locationmanager.delegate = self;
+ [_locationmanager requestWhenInUseAuthorization];
+ [_locationmanager startUpdatingLocation];
+
+ return YES;
+}
+
+- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
+// if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusAuthorizedAlways) {
+// [self performSegueWithIdentifier:@"go2WifiInfo" sender:nil];
+// }
+}
+-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
+ [_locationmanager stopUpdatingLocation];
+}
+
+#pragma mark - UISceneSession lifecycle
+
+
+//- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
+// // Called when a new scene session is being created.
+// // Use this method to select a configuration to create the new scene with.
+// return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
+//}
+//
+//
+//- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
+// // Called when the user discards a scene session.
+// // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
+// // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
+//}
+
+
+#pragma mark - Core Data stack
+
+@synthesize persistentContainer = _persistentContainer;
+
+- (NSPersistentContainer *)persistentContainer {
+ // The persistent container for the application. This implementation creates and returns a container, having loaded the store for the application to it.
+ @synchronized (self) {
+ if (_persistentContainer == nil) {
+ _persistentContainer = [[NSPersistentContainer alloc] initWithName:@"HDLEZDemo"];
+ [_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *storeDescription, NSError *error) {
+ if (error != nil) {
+ // Replace this implementation with code to handle the error appropriately.
+ // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
+
+ /*
+ Typical reasons for an error here include:
+ * The parent directory does not exist, cannot be created, or disallows writing.
+ * The persistent store is not accessible, due to permissions or data protection when the device is locked.
+ * The device is out of space.
+ * The store could not be migrated to the current model version.
+ Check the error message to determine what the actual problem was.
+ */
+ NSLog(@"Unresolved error %@, %@", error, error.userInfo);
+ abort();
+ }
+ }];
+ }
+ }
+
+ return _persistentContainer;
+}
+
+#pragma mark - Core Data Saving support
+
+- (void)saveContext {
+ NSManagedObjectContext *context = self.persistentContainer.viewContext;
+ NSError *error = nil;
+ if ([context hasChanges] && ![context save:&error]) {
+ // Replace this implementation with code to handle the error appropriately.
+ // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
+ NSLog(@"Unresolved error %@, %@", error, error.userInfo);
+ abort();
+ }
+}
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AccentColor.colorset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 0000000..eb87897
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Contents.json
new file mode 100644
index 0000000..0b05e18
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Contents.json
@@ -0,0 +1,77 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "filename" : "Icon-Small.png",
+ "idiom" : "iphone",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "Icon-Small@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "Icon-Small@3x.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "filename" : "Icon-Spotlight-40@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "Icon-Spotlight-40@3x.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "Icon.png",
+ "idiom" : "iphone",
+ "scale" : "1x",
+ "size" : "57x57"
+ },
+ {
+ "filename" : "Icon@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "57x57"
+ },
+ {
+ "filename" : "Icon-60@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "filename" : "Icon-60@3x.png",
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-60@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-60@2x.png
new file mode 100644
index 0000000..dbceea4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-60@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-60@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-60@3x.png
new file mode 100644
index 0000000..87aeccc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-60@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small.png
new file mode 100644
index 0000000..d1a5596
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small@2x.png
new file mode 100644
index 0000000..b3cf002
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small@3x.png
new file mode 100644
index 0000000..581c8d8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Small@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Spotlight-40@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Spotlight-40@2x.png
new file mode 100644
index 0000000..69160ad
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Spotlight-40@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Spotlight-40@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Spotlight-40@3x.png
new file mode 100644
index 0000000..11bb6bc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon-Spotlight-40@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon.png
new file mode 100644
index 0000000..c1c0b89
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon@2x.png
new file mode 100644
index 0000000..b78c28d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon-1.appiconset/Icon@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..9221b9b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,98 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "76x76"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "76x76"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "83.5x83.5"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/Contents.json
new file mode 100644
index 0000000..e3cf157
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "device_default.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "device_default@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/device_default.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/device_default.png
new file mode 100644
index 0000000..6bb62f9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/device_default.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/device_default@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/device_default@2x.png
new file mode 100644
index 0000000..9ee752d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/device_default.imageset/device_default@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/duijiangji.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/duijiangji.imageset/Contents.json
new file mode 100644
index 0000000..f97fca3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/duijiangji.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "duijiangji-2.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/duijiangji.imageset/duijiangji-2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/duijiangji.imageset/duijiangji-2.png
new file mode 100644
index 0000000..3cc8402
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/duijiangji.imageset/duijiangji-2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/Contents.json
new file mode 100644
index 0000000..2519bfb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "message.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "message@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/message.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/message.png
new file mode 100644
index 0000000..e8d7e2a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/message.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/message@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/message@2x.png
new file mode 100644
index 0000000..b09951e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message.imageset/message@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/Contents.json
new file mode 100644
index 0000000..c1b8903
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "message_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "message_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/message_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/message_sel.png
new file mode 100644
index 0000000..4c5bbf8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/message_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/message_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/message_sel@2x.png
new file mode 100644
index 0000000..7eb6bd3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/message_sel.imageset/message_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/Contents.json
new file mode 100644
index 0000000..6823c6e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "offline.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "offline@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/offline.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/offline.png
new file mode 100644
index 0000000..b9150fc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/offline.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/offline@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/offline@2x.png
new file mode 100644
index 0000000..b26f2f7
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/offline.imageset/offline@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/Contents.json
new file mode 100644
index 0000000..a81e0b0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "playback.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "playback@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/playback.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/playback.png
new file mode 100644
index 0000000..685601d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/playback.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/playback@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/playback@2x.png
new file mode 100644
index 0000000..8d23634
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback.imageset/playback@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/Contents.json
new file mode 100644
index 0000000..a9e8f30
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "playback_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "playback_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/playback_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/playback_sel.png
new file mode 100644
index 0000000..57b946b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/playback_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/playback_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/playback_sel@2x.png
new file mode 100644
index 0000000..f6e308a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/playback_sel.imageset/playback_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/Contents.json
new file mode 100644
index 0000000..ec63d63
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "setup.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "setup@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/setup.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/setup.png
new file mode 100644
index 0000000..3e72fcf
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/setup.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/setup@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/setup@2x.png
new file mode 100644
index 0000000..3ec9640
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup.imageset/setup@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/Contents.json
new file mode 100644
index 0000000..ea22170
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "setup_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "setup_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/setup_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/setup_sel.png
new file mode 100644
index 0000000..1685e84
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/setup_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/setup_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/setup_sel@2x.png
new file mode 100644
index 0000000..ef862fc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/DeviceList/setup_sel.imageset/setup_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json
new file mode 100644
index 0000000..f524f2f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/Contents.json
@@ -0,0 +1,64 @@
+{
+ "images" : [
+ {
+ "extent" : "full-screen",
+ "filename" : "LanuchImage-R5-5.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "3x",
+ "subtype" : "736h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "LanuchImage-R4-7.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "8.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "667h"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "LanuchImage-2x.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "LanuchImage-R4.png",
+ "idiom" : "iphone",
+ "minimum-system-version" : "7.0",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ },
+ {
+ "extent" : "full-screen",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "1x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "LanuchImage-2x.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x"
+ },
+ {
+ "extent" : "full-screen",
+ "filename" : "LanuchImage-R4.png",
+ "idiom" : "iphone",
+ "orientation" : "portrait",
+ "scale" : "2x",
+ "subtype" : "retina4"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-2x.png
new file mode 100644
index 0000000..0490a01
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R4-7.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R4-7.png
new file mode 100644
index 0000000..4334a23
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R4-7.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R4.png
new file mode 100644
index 0000000..8df3556
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R5-5.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R5-5.png
new file mode 100644
index 0000000..229ee78
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LaunchImage.launchimage/LanuchImage-R5-5.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio-2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio-2.imageset/Contents.json
new file mode 100644
index 0000000..542f42c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio-2.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "StreamStudio-2.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio-2.imageset/StreamStudio-2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio-2.imageset/StreamStudio-2.png
new file mode 100644
index 0000000..f4f84f5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio-2.imageset/StreamStudio-2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio.imageset/Contents.json
new file mode 100644
index 0000000..b7ab750
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "StreamStudio.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio.imageset/StreamStudio.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio.imageset/StreamStudio.png
new file mode 100644
index 0000000..0dc10b8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/StreamStudio.imageset/StreamStudio.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/cloud.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/cloud.imageset/Contents.json
new file mode 100644
index 0000000..55ef386
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/cloud.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "cloud.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/cloud.imageset/cloud.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/cloud.imageset/cloud.png
new file mode 100644
index 0000000..d246e8d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/cloud.imageset/cloud.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/Contents.json
new file mode 100644
index 0000000..e3acd91
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "picture_bg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "picture_bg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/picture_bg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/picture_bg.png
new file mode 100644
index 0000000..6d59dd0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/picture_bg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/picture_bg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/picture_bg@2x.png
new file mode 100644
index 0000000..fe4b56c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/picture_bg.imageset/picture_bg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/Contents.json
new file mode 100644
index 0000000..ad6392d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "play.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/play.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/play.png
new file mode 100644
index 0000000..85eb80e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/play.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/play@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/play@2x.png
new file mode 100644
index 0000000..854cdf9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play.imageset/play@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/Contents.json
new file mode 100644
index 0000000..c34d33b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "play_close.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_close@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/play_close.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/play_close.png
new file mode 100644
index 0000000..0ad333d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/play_close.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/play_close@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/play_close@2x.png
new file mode 100644
index 0000000..e5f1fb1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close.imageset/play_close@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/Contents.json
new file mode 100644
index 0000000..637d883
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "play_close_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_close_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/play_close_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/play_close_sel.png
new file mode 100644
index 0000000..9754105
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/play_close_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/play_close_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/play_close_sel@2x.png
new file mode 100644
index 0000000..13eb5cd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_close_sel.imageset/play_close_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/Contents.json
new file mode 100644
index 0000000..4cec557
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "play_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/play_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/play_sel.png
new file mode 100644
index 0000000..85e02b3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/play_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/play_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/play_sel@2x.png
new file mode 100644
index 0000000..5b3fc80
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/play_sel.imageset/play_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/Contents.json
new file mode 100644
index 0000000..83b47bb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_barrel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_barrel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/preview_barrel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/preview_barrel.png
new file mode 100644
index 0000000..1269e01
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/preview_barrel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/preview_barrel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/preview_barrel@2x.png
new file mode 100644
index 0000000..cad41ed
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel.imageset/preview_barrel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/Contents.json
new file mode 100644
index 0000000..032a237
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_barrel_dis.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_barrel_dis@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/preview_barrel_dis.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/preview_barrel_dis.png
new file mode 100644
index 0000000..881bb3f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/preview_barrel_dis.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/preview_barrel_dis@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/preview_barrel_dis@2x.png
new file mode 100644
index 0000000..5cdd845
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_dis.imageset/preview_barrel_dis@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/Contents.json
new file mode 100644
index 0000000..49c76e1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_barrel_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_barrel_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/preview_barrel_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/preview_barrel_sel.png
new file mode 100644
index 0000000..d7acf20
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/preview_barrel_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/preview_barrel_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/preview_barrel_sel@2x.png
new file mode 100644
index 0000000..a7660e7
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_barrel_sel.imageset/preview_barrel_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/Contents.json
new file mode 100644
index 0000000..bdb6947
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_recording.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_recording@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/preview_recording.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/preview_recording.png
new file mode 100644
index 0000000..8a3f44d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/preview_recording.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/preview_recording@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/preview_recording@2x.png
new file mode 100644
index 0000000..a0d840f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording.imageset/preview_recording@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/Contents.json
new file mode 100644
index 0000000..67c6a2c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_recording_dis.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_recording_dis@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/preview_recording_dis.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/preview_recording_dis.png
new file mode 100644
index 0000000..8f2fa68
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/preview_recording_dis.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/preview_recording_dis@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/preview_recording_dis@2x.png
new file mode 100644
index 0000000..17af37e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_dis.imageset/preview_recording_dis@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/Contents.json
new file mode 100644
index 0000000..f0744e9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_recording_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_recording_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/preview_recording_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/preview_recording_sel.png
new file mode 100644
index 0000000..582049b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/preview_recording_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/preview_recording_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/preview_recording_sel@2x.png
new file mode 100644
index 0000000..f7b8be1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_recording_sel.imageset/preview_recording_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/Contents.json
new file mode 100644
index 0000000..ccf1171
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_screenshot.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_screenshot@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/preview_screenshot.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/preview_screenshot.png
new file mode 100644
index 0000000..51f91f8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/preview_screenshot.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/preview_screenshot@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/preview_screenshot@2x.png
new file mode 100644
index 0000000..ce23ff6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot.imageset/preview_screenshot@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/Contents.json
new file mode 100644
index 0000000..c3db802
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_screenshot_dis.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_screenshot_dis@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/preview_screenshot_dis.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/preview_screenshot_dis.png
new file mode 100644
index 0000000..50eb992
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/preview_screenshot_dis.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/preview_screenshot_dis@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/preview_screenshot_dis@2x.png
new file mode 100644
index 0000000..071a302
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_dis.imageset/preview_screenshot_dis@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/Contents.json
new file mode 100644
index 0000000..b900df4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_screenshot_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_screenshot_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/preview_screenshot_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/preview_screenshot_sel.png
new file mode 100644
index 0000000..74fe3b1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/preview_screenshot_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/preview_screenshot_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/preview_screenshot_sel@2x.png
new file mode 100644
index 0000000..f9fb901
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_screenshot_sel.imageset/preview_screenshot_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..98275d0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_stoppaly_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_stoppaly_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png
new file mode 100644
index 0000000..7910053
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png
new file mode 100644
index 0000000..0668cef
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/Contents.json
new file mode 100644
index 0000000..d7aabbd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_stopplay_btn .png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_stopplay_btn @2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/preview_stopplay_btn .png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/preview_stopplay_btn .png
new file mode 100644
index 0000000..72c3fb4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/preview_stopplay_btn .png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png
new file mode 100644
index 0000000..003c00b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/Contents.json
new file mode 100644
index 0000000..d7aabbd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_stopplay_btn .png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_stopplay_btn @2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/preview_stopplay_btn .png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/preview_stopplay_btn .png
new file mode 100644
index 0000000..72c3fb4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/preview_stopplay_btn .png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png
new file mode 100644
index 0000000..003c00b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..0168d6f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_stopplay_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_stopplay_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png
new file mode 100644
index 0000000..7910053
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png
new file mode 100644
index 0000000..0668cef
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/Contents.json
new file mode 100644
index 0000000..b43f4df
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_talkback.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_talkback@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/preview_talkback.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/preview_talkback.png
new file mode 100644
index 0000000..e785577
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/preview_talkback.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/preview_talkback@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/preview_talkback@2x.png
new file mode 100644
index 0000000..12f5af4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback.imageset/preview_talkback@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/Contents.json
new file mode 100644
index 0000000..65f0448
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_talkback_dis.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_talkback_dis@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/preview_talkback_dis.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/preview_talkback_dis.png
new file mode 100644
index 0000000..e233237
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/preview_talkback_dis.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/preview_talkback_dis@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/preview_talkback_dis@2x.png
new file mode 100644
index 0000000..a960102
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_dis.imageset/preview_talkback_dis@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/Contents.json
new file mode 100644
index 0000000..955c426
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_talkback_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_talkback_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/preview_talkback_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/preview_talkback_sel.png
new file mode 100644
index 0000000..5155efd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/preview_talkback_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/preview_talkback_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/preview_talkback_sel@2x.png
new file mode 100644
index 0000000..4a13b1e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_talkback_sel.imageset/preview_talkback_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/Contents.json
new file mode 100644
index 0000000..885eb6b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_unvoice_btn.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_unvoice_btn@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/preview_unvoice_btn.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/preview_unvoice_btn.png
new file mode 100644
index 0000000..77c5688
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/preview_unvoice_btn.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png
new file mode 100644
index 0000000..2554612
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..f25f265
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_unvoice_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_unvoice_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png
new file mode 100644
index 0000000..2908329
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png
new file mode 100644
index 0000000..8858696
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/Contents.json
new file mode 100644
index 0000000..e7c16de
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_voice_btn.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_voice_btn@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/preview_voice_btn.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/preview_voice_btn.png
new file mode 100644
index 0000000..b330c2a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/preview_voice_btn.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/preview_voice_btn@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/preview_voice_btn@2x.png
new file mode 100644
index 0000000..2dff6b3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn.imageset/preview_voice_btn@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..01ea8c2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_voice_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_voice_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png
new file mode 100644
index 0000000..7276951
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png
new file mode 100644
index 0000000..1bbf161
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/Contents.json
new file mode 100644
index 0000000..9868ffb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_bg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_bg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/ptz_bg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/ptz_bg.png
new file mode 100644
index 0000000..752bf61
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/ptz_bg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/ptz_bg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/ptz_bg@2x.png
new file mode 100644
index 0000000..380bb27
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bg.imageset/ptz_bg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/Contents.json
new file mode 100644
index 0000000..c5293c8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_bottom_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_bottom_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/ptz_bottom_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/ptz_bottom_sel.png
new file mode 100644
index 0000000..d2a408f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/ptz_bottom_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/ptz_bottom_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/ptz_bottom_sel@2x.png
new file mode 100644
index 0000000..76d8d2d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_bottom_sel.imageset/ptz_bottom_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/Contents.json
new file mode 100644
index 0000000..488cc0d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_left_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_left_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/ptz_left_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/ptz_left_sel.png
new file mode 100644
index 0000000..7bb790f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/ptz_left_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/ptz_left_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/ptz_left_sel@2x.png
new file mode 100644
index 0000000..767c0ce
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_left_sel.imageset/ptz_left_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/Contents.json
new file mode 100644
index 0000000..7a5097b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_right_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_right_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/ptz_right_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/ptz_right_sel.png
new file mode 100644
index 0000000..cb55201
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/ptz_right_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/ptz_right_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/ptz_right_sel@2x.png
new file mode 100644
index 0000000..8a7f7e0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_right_sel.imageset/ptz_right_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/Contents.json
new file mode 100644
index 0000000..4eefcf9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_scale_arrow_down@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "ptz_scale_arrow_down@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/ptz_scale_arrow_down@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/ptz_scale_arrow_down@2x.png
new file mode 100644
index 0000000..f3749b5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/ptz_scale_arrow_down@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/ptz_scale_arrow_down@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/ptz_scale_arrow_down@3x.png
new file mode 100644
index 0000000..76381a1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_down.imageset/ptz_scale_arrow_down@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/Contents.json
new file mode 100644
index 0000000..f59b3d3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_scale_arrow_right@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "ptz_scale_arrow_right@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/ptz_scale_arrow_right@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/ptz_scale_arrow_right@2x.png
new file mode 100644
index 0000000..a52b621
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/ptz_scale_arrow_right@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/ptz_scale_arrow_right@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/ptz_scale_arrow_right@3x.png
new file mode 100644
index 0000000..53df4f2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_scale_arrow_right.imageset/ptz_scale_arrow_right@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/Contents.json
new file mode 100644
index 0000000..e428613
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_up_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_up_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/ptz_up_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/ptz_up_sel.png
new file mode 100644
index 0000000..c9636b6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/ptz_up_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/ptz_up_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/ptz_up_sel@2x.png
new file mode 100644
index 0000000..2c063f8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/ptz_up_sel.imageset/ptz_up_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/Contents.json
new file mode 100644
index 0000000..e690b49
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "spkImg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "spkImg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/spkImg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/spkImg.png
new file mode 100644
index 0000000..3eea86e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/spkImg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/spkImg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/spkImg@2x.png
new file mode 100644
index 0000000..e57f1e5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/LivePlay/spkImg.imageset/spkImg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/Contents.json
new file mode 100644
index 0000000..e1a8cfb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "message_callhelp.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "message_callhelp@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/message_callhelp.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/message_callhelp.png
new file mode 100644
index 0000000..28d68c0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/message_callhelp.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/message_callhelp@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/message_callhelp@2x.png
new file mode 100644
index 0000000..a8c182d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/message_callhelp.imageset/message_callhelp@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/Contents.json
new file mode 100644
index 0000000..69799cc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "no_message.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "no_message@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/no_message.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/no_message.png
new file mode 100644
index 0000000..8d1423f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/no_message.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/no_message@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/no_message@2x.png
new file mode 100644
index 0000000..d739789
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message-1.imageset/no_message@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/Contents.json
new file mode 100644
index 0000000..69799cc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "no_message.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "no_message@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/no_message.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/no_message.png
new file mode 100644
index 0000000..8d1423f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/no_message.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/no_message@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/no_message@2x.png
new file mode 100644
index 0000000..d739789
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Message/no_message.imageset/no_message@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_extension.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_extension.imageset/Contents.json
new file mode 100644
index 0000000..9c02ec1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_extension.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ic_extension@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_extension.imageset/ic_extension@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_extension.imageset/ic_extension@2x.png
new file mode 100644
index 0000000..8dad7b9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_extension.imageset/ic_extension@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_recordtype.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_recordtype.imageset/Contents.json
new file mode 100644
index 0000000..3bfccfd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_recordtype.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ic_recordtype@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_recordtype.imageset/ic_recordtype@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_recordtype.imageset/ic_recordtype@2x.png
new file mode 100644
index 0000000..b2b6248
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/ic_recordtype.imageset/ic_recordtype@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/Contents.json
new file mode 100644
index 0000000..2637062
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "large_back_btn.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "large_back_btn@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/large_back_btn.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/large_back_btn.png
new file mode 100644
index 0000000..e4b9c79
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/large_back_btn.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/large_back_btn@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/large_back_btn@2x.png
new file mode 100644
index 0000000..b9318f6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Navigationbar/large_back_btn.imageset/large_back_btn@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/Contents.json
new file mode 100644
index 0000000..251a426
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "addDevice_success.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "addDevice_success@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/addDevice_success.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/addDevice_success.png
new file mode 100644
index 0000000..9cda5ec
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/addDevice_success.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/addDevice_success@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/addDevice_success@2x.png
new file mode 100644
index 0000000..918784d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/addDevice_success.imageset/addDevice_success@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/Contents.json
new file mode 100644
index 0000000..21bf7fe
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_server1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_server1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/add_server1.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/add_server1.png
new file mode 100644
index 0000000..bcb6c34
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/add_server1.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/add_server1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/add_server1@2x.png
new file mode 100644
index 0000000..45257b5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server1.imageset/add_server1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/Contents.json
new file mode 100644
index 0000000..cf82d06
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_server2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_server2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/add_server2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/add_server2.png
new file mode 100644
index 0000000..d2d21d3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/add_server2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/add_server2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/add_server2@2x.png
new file mode 100644
index 0000000..9e4d171
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server2.imageset/add_server2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/Contents.json
new file mode 100644
index 0000000..dda6388
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_server3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_server3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/add_server3.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/add_server3.png
new file mode 100644
index 0000000..6480d6b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/add_server3.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/add_server3@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/add_server3@2x.png
new file mode 100644
index 0000000..052c2f9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server3.imageset/add_server3@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/Contents.json
new file mode 100644
index 0000000..b7268af
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_server4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_server4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/add_server4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/add_server4.png
new file mode 100644
index 0000000..71a3ad6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/add_server4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/add_server4@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/add_server4@2x.png
new file mode 100644
index 0000000..ada9984
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_server4.imageset/add_server4@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/Contents.json
new file mode 100644
index 0000000..8c4c5ed
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_success_icon.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_success_icon@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/add_success_icon.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/add_success_icon.png
new file mode 100644
index 0000000..b0bb699
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/add_success_icon.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/add_success_icon@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/add_success_icon@2x.png
new file mode 100644
index 0000000..c3c9f5d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/add_success_icon.imageset/add_success_icon@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/Contents.json
new file mode 100644
index 0000000..f692f01
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "blue_button.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "blue_button@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/blue_button.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/blue_button.png
new file mode 100644
index 0000000..c652af2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/blue_button.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/blue_button@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/blue_button@2x.png
new file mode 100644
index 0000000..e0443c9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button.imageset/blue_button@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/Contents.json
new file mode 100644
index 0000000..08e87e5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "blue_button_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "blue_button_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/blue_button_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/blue_button_sel.png
new file mode 100644
index 0000000..b6a9641
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/blue_button_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/blue_button_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/blue_button_sel@2x.png
new file mode 100644
index 0000000..6bcf118
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/blue_button_sel.imageset/blue_button_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/Contents.json
new file mode 100644
index 0000000..ca11428
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "button_disable.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "button_disable@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/button_disable.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/button_disable.png
new file mode 100644
index 0000000..244d7bd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/button_disable.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/button_disable@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/button_disable@2x.png
new file mode 100644
index 0000000..9ee4619
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/button_disable.imageset/button_disable@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/Contents.json
new file mode 100644
index 0000000..307aa33
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "close.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "close@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/close.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/close.png
new file mode 100644
index 0000000..6c6a737
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/close.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/close@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/close@2x.png
new file mode 100644
index 0000000..d3920af
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/close.imageset/close@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/Contents.json
new file mode 100644
index 0000000..88bb94f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "connect_wifi1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "connect_wifi1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/connect_wifi1.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/connect_wifi1.png
new file mode 100644
index 0000000..011301b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/connect_wifi1.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/connect_wifi1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/connect_wifi1@2x.png
new file mode 100644
index 0000000..3534903
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi1.imageset/connect_wifi1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/Contents.json
new file mode 100644
index 0000000..39c7788
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "connect_wifi2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "connect_wifi2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/connect_wifi2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/connect_wifi2.png
new file mode 100644
index 0000000..a7ce842
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/connect_wifi2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/connect_wifi2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/connect_wifi2@2x.png
new file mode 100644
index 0000000..14cdbf3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi2.imageset/connect_wifi2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/Contents.json
new file mode 100644
index 0000000..9837440
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "connect_wifi3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "connect_wifi3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/connect_wifi3.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/connect_wifi3.png
new file mode 100644
index 0000000..a8ffcdb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/connect_wifi3.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/connect_wifi3@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/connect_wifi3@2x.png
new file mode 100644
index 0000000..f5f1429
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi3.imageset/connect_wifi3@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/Contents.json
new file mode 100644
index 0000000..8dfb63a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "connect_wifi4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "connect_wifi4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/connect_wifi4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/connect_wifi4.png
new file mode 100644
index 0000000..17f1a9d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/connect_wifi4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/connect_wifi4@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/connect_wifi4@2x.png
new file mode 100644
index 0000000..20b7aa5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/connect_wifi4.imageset/connect_wifi4@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/Contents.json
new file mode 100644
index 0000000..001740d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "device.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "device@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/device.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/device.png
new file mode 100644
index 0000000..c4a40d4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/device.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/device@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/device@2x.png
new file mode 100644
index 0000000..9722fa8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device.imageset/device@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/Contents.json
new file mode 100644
index 0000000..1cccf9a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "device_reset.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "device_reset@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/device_reset.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/device_reset.png
new file mode 100644
index 0000000..c6b50f1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/device_reset.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/device_reset@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/device_reset@2x.png
new file mode 100644
index 0000000..d847b82
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/device_reset.imageset/device_reset@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/Contents.json
new file mode 100644
index 0000000..9013a37
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "failure_account.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "failure_account@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/failure_account.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/failure_account.png
new file mode 100644
index 0000000..b307285
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/failure_account.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/failure_account@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/failure_account@2x.png
new file mode 100644
index 0000000..ac4932b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_account.imageset/failure_account@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/Contents.json
new file mode 100644
index 0000000..23d78cc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "failure_server.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "failure_server@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/failure_server.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/failure_server.png
new file mode 100644
index 0000000..7b58bca
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/failure_server.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/failure_server@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/failure_server@2x.png
new file mode 100644
index 0000000..3364f9d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_server.imageset/failure_server@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/Contents.json
new file mode 100644
index 0000000..89ee288
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "failure_wifi.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "failure_wifi@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/failure_wifi.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/failure_wifi.png
new file mode 100644
index 0000000..1fb8959
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/failure_wifi.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/failure_wifi@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/failure_wifi@2x.png
new file mode 100644
index 0000000..299fc91
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/failure_wifi.imageset/failure_wifi@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/icn_location.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/icn_location.imageset/Contents.json
new file mode 100644
index 0000000..05ea6ec
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/icn_location.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "icn_location.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/icn_location.imageset/icn_location.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/icn_location.imageset/icn_location.png
new file mode 100644
index 0000000..97aa6ca
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/icn_location.imageset/icn_location.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/Contents.json
new file mode 100644
index 0000000..9b916d0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "link_account1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "link_account1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/link_account1.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/link_account1.png
new file mode 100644
index 0000000..e6615ad
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/link_account1.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/link_account1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/link_account1@2x.png
new file mode 100644
index 0000000..67e55ba
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account1.imageset/link_account1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/Contents.json
new file mode 100644
index 0000000..85222c6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "link_account2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "link_account2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/link_account2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/link_account2.png
new file mode 100644
index 0000000..ccc2b87
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/link_account2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/link_account2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/link_account2@2x.png
new file mode 100644
index 0000000..0c1bfd0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account2.imageset/link_account2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/Contents.json
new file mode 100644
index 0000000..2e11ac2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "link_account3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "link_account3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/link_account3.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/link_account3.png
new file mode 100644
index 0000000..c9e312a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/link_account3.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/link_account3@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/link_account3@2x.png
new file mode 100644
index 0000000..398e371
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account3.imageset/link_account3@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/Contents.json
new file mode 100644
index 0000000..8fa09f9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "link_account4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "link_account4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/link_account4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/link_account4.png
new file mode 100644
index 0000000..7064629
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/link_account4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/link_account4@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/link_account4@2x.png
new file mode 100644
index 0000000..d7822e1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/link_account4.imageset/link_account4@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/Contents.json
new file mode 100644
index 0000000..b048fab
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "no_wifi.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "no_wifi@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/no_wifi.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/no_wifi.png
new file mode 100644
index 0000000..f0664b0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/no_wifi.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/no_wifi@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/no_wifi@2x.png
new file mode 100644
index 0000000..c45795a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/no_wifi.imageset/no_wifi@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/Contents.json
new file mode 100644
index 0000000..d0c187e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "open.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "open@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/open.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/open.png
new file mode 100644
index 0000000..0133f1f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/open.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/open@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/open@2x.png
new file mode 100644
index 0000000..ea7dbb5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/open.imageset/open@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/Contents.json
new file mode 100644
index 0000000..b13f53a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "white_button.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "white_button@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/white_button.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/white_button.png
new file mode 100644
index 0000000..82791ff
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/white_button.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/white_button@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/white_button@2x.png
new file mode 100644
index 0000000..1c37e69
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button.imageset/white_button@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/Contents.json
new file mode 100644
index 0000000..48f7ca5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "white_button_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "white_button_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/white_button_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/white_button_sel.png
new file mode 100644
index 0000000..8527b2f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/white_button_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/white_button_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/white_button_sel@2x.png
new file mode 100644
index 0000000..7d90c5c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/white_button_sel.imageset/white_button_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/Contents.json
new file mode 100644
index 0000000..493a1bd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "wifi_bg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "wifi_bg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/wifi_bg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/wifi_bg.png
new file mode 100644
index 0000000..314fff3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/wifi_bg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/wifi_bg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/wifi_bg@2x.png
new file mode 100644
index 0000000..c93782b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/NetConfig/wifi_bg.imageset/wifi_bg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/guaduandianhua.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/guaduandianhua.imageset/Contents.json
new file mode 100644
index 0000000..1180dd8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/guaduandianhua.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "guaduandianhua.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/guaduandianhua.imageset/guaduandianhua.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/guaduandianhua.imageset/guaduandianhua.png
new file mode 100644
index 0000000..46c1dc8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/guaduandianhua.imageset/guaduandianhua.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/Contents.json
new file mode 100644
index 0000000..93cb3c9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo_loading_1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo_loading_1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/logo_loading_1.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/logo_loading_1.png
new file mode 100644
index 0000000..a2c457a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/logo_loading_1.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/logo_loading_1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/logo_loading_1@2x.png
new file mode 100644
index 0000000..1aa5551
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_1.imageset/logo_loading_1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/Contents.json
new file mode 100644
index 0000000..dce78c2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo_loading_2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo_loading_2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/logo_loading_2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/logo_loading_2.png
new file mode 100644
index 0000000..496e1a8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/logo_loading_2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/logo_loading_2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/logo_loading_2@2x.png
new file mode 100644
index 0000000..ba61f7c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_2.imageset/logo_loading_2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/Contents.json
new file mode 100644
index 0000000..f21d0a8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo_loading_3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo_loading_3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/logo_loading_3.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/logo_loading_3.png
new file mode 100644
index 0000000..3f37f67
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/logo_loading_3.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/logo_loading_3@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/logo_loading_3@2x.png
new file mode 100644
index 0000000..28dedfc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_3.imageset/logo_loading_3@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/Contents.json
new file mode 100644
index 0000000..b88300a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo_loading_4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo_loading_4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/logo_loading_4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/logo_loading_4.png
new file mode 100644
index 0000000..73617d1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/logo_loading_4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/logo_loading_4@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/logo_loading_4@2x.png
new file mode 100644
index 0000000..95254a1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/logo_loading_4.imageset/logo_loading_4@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/Contents.json
new file mode 100644
index 0000000..fc4f507
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "open_icon_1024.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "open_icon_1024@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/open_icon_1024.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/open_icon_1024.png
new file mode 100644
index 0000000..9fb7671
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/open_icon_1024.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/open_icon_1024@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/open_icon_1024@2x.png
new file mode 100644
index 0000000..044e08d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/open_icon_1024.imageset/open_icon_1024@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/Contents.json
new file mode 100644
index 0000000..915685e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "orange_button.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "orange_button@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/orange_button.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/orange_button.png
new file mode 100644
index 0000000..776d2b4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/orange_button.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/orange_button@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/orange_button@2x.png
new file mode 100644
index 0000000..21abd5a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button.imageset/orange_button@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/Contents.json
new file mode 100644
index 0000000..0344d3d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "orange_button_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "orange_button_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/orange_button_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/orange_button_sel.png
new file mode 100644
index 0000000..e165078
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/orange_button_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/orange_button_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/orange_button_sel@2x.png
new file mode 100644
index 0000000..be87b81
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Others/orange_button_sel.imageset/orange_button_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu--2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu--2.imageset/Contents.json
new file mode 100644
index 0000000..9d45159
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu--2.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "chuanshujilu--2.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu--2.imageset/chuanshujilu--2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu--2.imageset/chuanshujilu--2.png
new file mode 100644
index 0000000..4259ea6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu--2.imageset/chuanshujilu--2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu-.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu-.imageset/Contents.json
new file mode 100644
index 0000000..1a490bc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu-.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "chuanshujilu-.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu-.imageset/chuanshujilu-.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu-.imageset/chuanshujilu-.png
new file mode 100644
index 0000000..0763630
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/chuanshujilu-.imageset/chuanshujilu-.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/icon_download_fill.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/icon_download_fill.imageset/Contents.json
new file mode 100644
index 0000000..30ce1c3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/icon_download_fill.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "filename" : "icon_download_fill.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/icon_download_fill.imageset/icon_download_fill.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/icon_download_fill.imageset/icon_download_fill.png
new file mode 100644
index 0000000..96fb961
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/icon_download_fill.imageset/icon_download_fill.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/Contents.json
new file mode 100644
index 0000000..a4d4cd8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "no_video.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "no_video@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/no_video.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/no_video.png
new file mode 100644
index 0000000..5ee7de2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/no_video.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/no_video@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/no_video@2x.png
new file mode 100644
index 0000000..b2b05f4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/no_video.imageset/no_video@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/Contents.json
new file mode 100644
index 0000000..12980e4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "pause.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "pause@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/pause.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/pause.png
new file mode 100644
index 0000000..3093598
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/pause.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/pause@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/pause@2x.png
new file mode 100644
index 0000000..8ca260b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause.imageset/pause@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/Contents.json
new file mode 100644
index 0000000..1232c2d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "pause_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "pause_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/pause_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/pause_sel.png
new file mode 100644
index 0000000..ae0bc5c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/pause_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/pause_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/pause_sel@2x.png
new file mode 100644
index 0000000..3a8fea8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/pause_sel.imageset/pause_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_download.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_download.imageset/Contents.json
new file mode 100644
index 0000000..8847547
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_download.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_download@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_download.imageset/play_download@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_download.imageset/play_download@2x.png
new file mode 100644
index 0000000..9a6c96a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_download.imageset/play_download@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_rate.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_rate.imageset/Contents.json
new file mode 100644
index 0000000..2165a01
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_rate.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_rate.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_rate.imageset/play_rate.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_rate.imageset/play_rate.png
new file mode 100644
index 0000000..7e72cb8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/play_rate.imageset/play_rate.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/Contents.json
new file mode 100644
index 0000000..73a989d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_enlarge.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_enlarge@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/preview_enlarge.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/preview_enlarge.png
new file mode 100644
index 0000000..fafd7e5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/preview_enlarge.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/preview_enlarge@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/preview_enlarge@2x.png
new file mode 100644
index 0000000..74bf56d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge.imageset/preview_enlarge@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..d1b4589
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_enlarge_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_enlarge_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png
new file mode 100644
index 0000000..a823d6f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png
new file mode 100644
index 0000000..c1838af
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/Contents.json
new file mode 100644
index 0000000..3de25dc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_play_btn.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_play_btn@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/preview_play_btn.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/preview_play_btn.png
new file mode 100644
index 0000000..22b8248
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/preview_play_btn.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/preview_play_btn@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/preview_play_btn@2x.png
new file mode 100644
index 0000000..7d1bbbe
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn.imageset/preview_play_btn@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..7aafe66
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_play_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_play_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/preview_play_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/preview_play_btn_sel.png
new file mode 100644
index 0000000..9b398b5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/preview_play_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png
new file mode 100644
index 0000000..2ea80f4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/Contents.json
new file mode 100644
index 0000000..c3a2a0d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "slider.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "slider@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/slider.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/slider.png
new file mode 100644
index 0000000..55b4ee9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/slider.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/slider@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/slider@2x.png
new file mode 100644
index 0000000..6106de6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider.imageset/slider@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/Contents.json
new file mode 100644
index 0000000..e9469b4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "slider_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "slider_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/slider_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/slider_sel.png
new file mode 100644
index 0000000..fb1b326
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/slider_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/slider_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/slider_sel@2x.png
new file mode 100644
index 0000000..15a040b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Playback/slider_sel.imageset/slider_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/Contents.json
new file mode 100644
index 0000000..1ad2c93
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "upgrade.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "upgrade@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/upgrade.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/upgrade.png
new file mode 100644
index 0000000..db6b714
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/upgrade.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/upgrade@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/upgrade@2x.png
new file mode 100644
index 0000000..3df33e1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/Setting/upgrade.imageset/upgrade@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio-2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio-2.imageset/Contents.json
new file mode 100644
index 0000000..542f42c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio-2.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "StreamStudio-2.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio-2.imageset/StreamStudio-2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio-2.imageset/StreamStudio-2.png
new file mode 100644
index 0000000..f4f84f5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio-2.imageset/StreamStudio-2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio.imageset/Contents.json
new file mode 100644
index 0000000..b7ab750
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "StreamStudio.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio.imageset/StreamStudio.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio.imageset/StreamStudio.png
new file mode 100644
index 0000000..0dc10b8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/StreamStudio.imageset/StreamStudio.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/Contents.json
new file mode 100644
index 0000000..251a426
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "addDevice_success.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "addDevice_success@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/addDevice_success.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/addDevice_success.png
new file mode 100644
index 0000000..9cda5ec
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/addDevice_success.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/addDevice_success@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/addDevice_success@2x.png
new file mode 100644
index 0000000..918784d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/addDevice_success.imageset/addDevice_success@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/Contents.json
new file mode 100644
index 0000000..21bf7fe
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_server1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_server1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/add_server1.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/add_server1.png
new file mode 100644
index 0000000..bcb6c34
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/add_server1.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/add_server1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/add_server1@2x.png
new file mode 100644
index 0000000..45257b5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server1.imageset/add_server1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/Contents.json
new file mode 100644
index 0000000..cf82d06
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_server2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_server2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/add_server2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/add_server2.png
new file mode 100644
index 0000000..d2d21d3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/add_server2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/add_server2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/add_server2@2x.png
new file mode 100644
index 0000000..9e4d171
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server2.imageset/add_server2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/Contents.json
new file mode 100644
index 0000000..dda6388
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_server3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_server3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/add_server3.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/add_server3.png
new file mode 100644
index 0000000..6480d6b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/add_server3.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/add_server3@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/add_server3@2x.png
new file mode 100644
index 0000000..052c2f9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server3.imageset/add_server3@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/Contents.json
new file mode 100644
index 0000000..b7268af
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_server4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_server4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/add_server4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/add_server4.png
new file mode 100644
index 0000000..71a3ad6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/add_server4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/add_server4@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/add_server4@2x.png
new file mode 100644
index 0000000..ada9984
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_server4.imageset/add_server4@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/Contents.json
new file mode 100644
index 0000000..8c4c5ed
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "add_success_icon.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "add_success_icon@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/add_success_icon.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/add_success_icon.png
new file mode 100644
index 0000000..b0bb699
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/add_success_icon.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/add_success_icon@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/add_success_icon@2x.png
new file mode 100644
index 0000000..c3c9f5d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/add_success_icon.imageset/add_success_icon@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/Contents.json
new file mode 100644
index 0000000..f692f01
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "blue_button.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "blue_button@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/blue_button.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/blue_button.png
new file mode 100644
index 0000000..c652af2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/blue_button.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/blue_button@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/blue_button@2x.png
new file mode 100644
index 0000000..e0443c9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button.imageset/blue_button@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/Contents.json
new file mode 100644
index 0000000..08e87e5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "blue_button_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "blue_button_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/blue_button_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/blue_button_sel.png
new file mode 100644
index 0000000..b6a9641
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/blue_button_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/blue_button_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/blue_button_sel@2x.png
new file mode 100644
index 0000000..6bcf118
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/blue_button_sel.imageset/blue_button_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/Contents.json
new file mode 100644
index 0000000..ca11428
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "button_disable.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "button_disable@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/button_disable.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/button_disable.png
new file mode 100644
index 0000000..244d7bd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/button_disable.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/button_disable@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/button_disable@2x.png
new file mode 100644
index 0000000..9ee4619
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/button_disable.imageset/button_disable@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu--2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu--2.imageset/Contents.json
new file mode 100644
index 0000000..9d45159
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu--2.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "chuanshujilu--2.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu--2.imageset/chuanshujilu--2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu--2.imageset/chuanshujilu--2.png
new file mode 100644
index 0000000..4259ea6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu--2.imageset/chuanshujilu--2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu-.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu-.imageset/Contents.json
new file mode 100644
index 0000000..1a490bc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu-.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "chuanshujilu-.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu-.imageset/chuanshujilu-.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu-.imageset/chuanshujilu-.png
new file mode 100644
index 0000000..0763630
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/chuanshujilu-.imageset/chuanshujilu-.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/Contents.json
new file mode 100644
index 0000000..307aa33
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "close.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "close@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/close.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/close.png
new file mode 100644
index 0000000..6c6a737
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/close.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/close@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/close@2x.png
new file mode 100644
index 0000000..d3920af
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/close.imageset/close@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/cloud.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/cloud.imageset/Contents.json
new file mode 100644
index 0000000..55ef386
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/cloud.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "cloud.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/cloud.imageset/cloud.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/cloud.imageset/cloud.png
new file mode 100644
index 0000000..d246e8d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/cloud.imageset/cloud.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/Contents.json
new file mode 100644
index 0000000..88bb94f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "connect_wifi1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "connect_wifi1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/connect_wifi1.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/connect_wifi1.png
new file mode 100644
index 0000000..011301b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/connect_wifi1.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/connect_wifi1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/connect_wifi1@2x.png
new file mode 100644
index 0000000..3534903
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi1.imageset/connect_wifi1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/Contents.json
new file mode 100644
index 0000000..39c7788
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "connect_wifi2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "connect_wifi2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/connect_wifi2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/connect_wifi2.png
new file mode 100644
index 0000000..a7ce842
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/connect_wifi2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/connect_wifi2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/connect_wifi2@2x.png
new file mode 100644
index 0000000..14cdbf3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi2.imageset/connect_wifi2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/Contents.json
new file mode 100644
index 0000000..9837440
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "connect_wifi3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "connect_wifi3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/connect_wifi3.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/connect_wifi3.png
new file mode 100644
index 0000000..a8ffcdb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/connect_wifi3.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/connect_wifi3@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/connect_wifi3@2x.png
new file mode 100644
index 0000000..f5f1429
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi3.imageset/connect_wifi3@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/Contents.json
new file mode 100644
index 0000000..8dfb63a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "connect_wifi4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "connect_wifi4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/connect_wifi4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/connect_wifi4.png
new file mode 100644
index 0000000..17f1a9d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/connect_wifi4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/connect_wifi4@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/connect_wifi4@2x.png
new file mode 100644
index 0000000..20b7aa5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/connect_wifi4.imageset/connect_wifi4@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/Contents.json
new file mode 100644
index 0000000..001740d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "device.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "device@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/device.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/device.png
new file mode 100644
index 0000000..c4a40d4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/device.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/device@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/device@2x.png
new file mode 100644
index 0000000..9722fa8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device.imageset/device@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_bg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_bg.imageset/Contents.json
new file mode 100644
index 0000000..b1bc3ee
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_bg.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "device_bg.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_bg.imageset/device_bg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_bg.imageset/device_bg.png
new file mode 100644
index 0000000..e78c0ce
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_bg.imageset/device_bg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/Contents.json
new file mode 100644
index 0000000..e3cf157
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "device_default.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "device_default@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/device_default.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/device_default.png
new file mode 100644
index 0000000..6bb62f9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/device_default.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/device_default@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/device_default@2x.png
new file mode 100644
index 0000000..9ee752d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_default.imageset/device_default@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/Contents.json
new file mode 100644
index 0000000..1cccf9a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "device_reset.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "device_reset@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/device_reset.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/device_reset.png
new file mode 100644
index 0000000..c6b50f1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/device_reset.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/device_reset@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/device_reset@2x.png
new file mode 100644
index 0000000..d847b82
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/device_reset.imageset/device_reset@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/duijiangji.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/duijiangji.imageset/Contents.json
new file mode 100644
index 0000000..f97fca3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/duijiangji.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "duijiangji-2.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/duijiangji.imageset/duijiangji-2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/duijiangji.imageset/duijiangji-2.png
new file mode 100644
index 0000000..3cc8402
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/duijiangji.imageset/duijiangji-2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/Contents.json
new file mode 100644
index 0000000..9013a37
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "failure_account.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "failure_account@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/failure_account.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/failure_account.png
new file mode 100644
index 0000000..b307285
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/failure_account.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/failure_account@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/failure_account@2x.png
new file mode 100644
index 0000000..ac4932b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_account.imageset/failure_account@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/Contents.json
new file mode 100644
index 0000000..23d78cc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "failure_server.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "failure_server@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/failure_server.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/failure_server.png
new file mode 100644
index 0000000..7b58bca
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/failure_server.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/failure_server@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/failure_server@2x.png
new file mode 100644
index 0000000..3364f9d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_server.imageset/failure_server@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/Contents.json
new file mode 100644
index 0000000..89ee288
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "failure_wifi.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "failure_wifi@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/failure_wifi.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/failure_wifi.png
new file mode 100644
index 0000000..1fb8959
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/failure_wifi.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/failure_wifi@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/failure_wifi@2x.png
new file mode 100644
index 0000000..299fc91
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/failure_wifi.imageset/failure_wifi@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/Contents.json
new file mode 100644
index 0000000..3d04882
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_add_device_success@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_add_device_success@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/hdl_ez_add_device_success@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/hdl_ez_add_device_success@2x.png
new file mode 100644
index 0000000..ff75690
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/hdl_ez_add_device_success@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/hdl_ez_add_device_success@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/hdl_ez_add_device_success@3x.png
new file mode 100644
index 0000000..285ac69
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_add_device_success.imageset/hdl_ez_add_device_success@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/Contents.json
new file mode 100644
index 0000000..47d8ca9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_ic_nav_back@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_ic_nav_back@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/hdl_ez_ic_nav_back@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/hdl_ez_ic_nav_back@2x.png
new file mode 100644
index 0000000..360b01c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/hdl_ez_ic_nav_back@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/hdl_ez_ic_nav_back@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/hdl_ez_ic_nav_back@3x.png
new file mode 100644
index 0000000..b9a32a4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_nav_back.imageset/hdl_ez_ic_nav_back@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/Contents.json
new file mode 100644
index 0000000..bea5de2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_ic_unlock@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_ic_unlock@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/hdl_ez_ic_unlock@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/hdl_ez_ic_unlock@2x.png
new file mode 100644
index 0000000..0dee5f5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/hdl_ez_ic_unlock@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/hdl_ez_ic_unlock@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/hdl_ez_ic_unlock@3x.png
new file mode 100644
index 0000000..f1525fc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock.imageset/hdl_ez_ic_unlock@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/Contents.json
new file mode 100644
index 0000000..b94b3d2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_ic_unlock_disable@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_ic_unlock_disable@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/hdl_ez_ic_unlock_disable@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/hdl_ez_ic_unlock_disable@2x.png
new file mode 100644
index 0000000..f8fd633
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/hdl_ez_ic_unlock_disable@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/hdl_ez_ic_unlock_disable@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/hdl_ez_ic_unlock_disable@3x.png
new file mode 100644
index 0000000..2927b9a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_ic_unlock_disable.imageset/hdl_ez_ic_unlock_disable@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/Contents.json
new file mode 100644
index 0000000..50372df
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_list_next@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_list_next@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/hdl_ez_list_next@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/hdl_ez_list_next@2x.png
new file mode 100644
index 0000000..db56906
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/hdl_ez_list_next@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/hdl_ez_list_next@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/hdl_ez_list_next@3x.png
new file mode 100644
index 0000000..94c2b96
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next-1.imageset/hdl_ez_list_next@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/Contents.json
new file mode 100644
index 0000000..50372df
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_list_next@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_list_next@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/hdl_ez_list_next@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/hdl_ez_list_next@2x.png
new file mode 100644
index 0000000..b2b29ec
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/hdl_ez_list_next@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/hdl_ez_list_next@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/hdl_ez_list_next@3x.png
new file mode 100644
index 0000000..fac62dd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_list_next.imageset/hdl_ez_list_next@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/Contents.json
new file mode 100644
index 0000000..4a0641d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_temp_add@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_temp_add@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/hdl_ez_temp_add@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/hdl_ez_temp_add@2x.png
new file mode 100644
index 0000000..db56906
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/hdl_ez_temp_add@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/hdl_ez_temp_add@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/hdl_ez_temp_add@3x.png
new file mode 100644
index 0000000..94c2b96
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_add.imageset/hdl_ez_temp_add@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/Contents.json
new file mode 100644
index 0000000..5d8c56b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_temp_pass_word@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_temp_pass_word@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/hdl_ez_temp_pass_word@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/hdl_ez_temp_pass_word@2x.png
new file mode 100644
index 0000000..f679fe7
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/hdl_ez_temp_pass_word@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/hdl_ez_temp_pass_word@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/hdl_ez_temp_pass_word@3x.png
new file mode 100644
index 0000000..57093d5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_temp_pass_word.imageset/hdl_ez_temp_pass_word@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/Contents.json
new file mode 100644
index 0000000..a0274b5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_wifi_connect_step1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_wifi_connect_step1@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/hdl_ez_wifi_connect_step1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/hdl_ez_wifi_connect_step1@2x.png
new file mode 100644
index 0000000..144400f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/hdl_ez_wifi_connect_step1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/hdl_ez_wifi_connect_step1@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/hdl_ez_wifi_connect_step1@3x.png
new file mode 100644
index 0000000..8b637a0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step1.imageset/hdl_ez_wifi_connect_step1@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/Contents.json
new file mode 100644
index 0000000..789ea79
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_wifi_connect_step2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_wifi_connect_step2@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/hdl_ez_wifi_connect_step2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/hdl_ez_wifi_connect_step2@2x.png
new file mode 100644
index 0000000..f3e6d66
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/hdl_ez_wifi_connect_step2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/hdl_ez_wifi_connect_step2@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/hdl_ez_wifi_connect_step2@3x.png
new file mode 100644
index 0000000..a274b61
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step2.imageset/hdl_ez_wifi_connect_step2@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/Contents.json
new file mode 100644
index 0000000..a91c458
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_wifi_connect_step_one@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_wifi_connect_step_one@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/hdl_ez_wifi_connect_step_one@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/hdl_ez_wifi_connect_step_one@2x.png
new file mode 100644
index 0000000..29e36d1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/hdl_ez_wifi_connect_step_one@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/hdl_ez_wifi_connect_step_one@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/hdl_ez_wifi_connect_step_one@3x.png
new file mode 100644
index 0000000..bc3a447
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_one.imageset/hdl_ez_wifi_connect_step_one@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/Contents.json
new file mode 100644
index 0000000..ff42c4f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "hdl_ez_wifi_connect_step_two@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "hdl_ez_wifi_connect_step_two@3x.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/hdl_ez_wifi_connect_step_two@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/hdl_ez_wifi_connect_step_two@2x.png
new file mode 100644
index 0000000..07a5957
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/hdl_ez_wifi_connect_step_two@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/hdl_ez_wifi_connect_step_two@3x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/hdl_ez_wifi_connect_step_two@3x.png
new file mode 100644
index 0000000..a60b4bb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/hdl_ez_wifi_connect_step_two.imageset/hdl_ez_wifi_connect_step_two@3x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icn_location.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icn_location.imageset/Contents.json
new file mode 100644
index 0000000..05ea6ec
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icn_location.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "icn_location.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icn_location.imageset/icn_location.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icn_location.imageset/icn_location.png
new file mode 100644
index 0000000..97aa6ca
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icn_location.imageset/icn_location.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icon_download_fill.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icon_download_fill.imageset/Contents.json
new file mode 100644
index 0000000..30ce1c3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icon_download_fill.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "filename" : "icon_download_fill.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icon_download_fill.imageset/icon_download_fill.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icon_download_fill.imageset/icon_download_fill.png
new file mode 100644
index 0000000..96fb961
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/icon_download_fill.imageset/icon_download_fill.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/Contents.json
new file mode 100644
index 0000000..545dbc9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "join_qq_group.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "join_qq_group@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/join_qq_group.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/join_qq_group.png
new file mode 100644
index 0000000..8e2b2cb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/join_qq_group.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/join_qq_group@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/join_qq_group@2x.png
new file mode 100644
index 0000000..bcf0305
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/join_qq_group.imageset/join_qq_group@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/Contents.json
new file mode 100644
index 0000000..2637062
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "large_back_btn.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "large_back_btn@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/large_back_btn.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/large_back_btn.png
new file mode 100644
index 0000000..e4b9c79
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/large_back_btn.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/large_back_btn@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/large_back_btn@2x.png
new file mode 100644
index 0000000..b9318f6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/large_back_btn.imageset/large_back_btn@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/Contents.json
new file mode 100644
index 0000000..9b916d0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "link_account1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "link_account1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/link_account1.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/link_account1.png
new file mode 100644
index 0000000..e6615ad
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/link_account1.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/link_account1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/link_account1@2x.png
new file mode 100644
index 0000000..67e55ba
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account1.imageset/link_account1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/Contents.json
new file mode 100644
index 0000000..85222c6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "link_account2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "link_account2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/link_account2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/link_account2.png
new file mode 100644
index 0000000..ccc2b87
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/link_account2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/link_account2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/link_account2@2x.png
new file mode 100644
index 0000000..0c1bfd0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account2.imageset/link_account2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/Contents.json
new file mode 100644
index 0000000..2e11ac2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "link_account3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "link_account3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/link_account3.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/link_account3.png
new file mode 100644
index 0000000..c9e312a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/link_account3.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/link_account3@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/link_account3@2x.png
new file mode 100644
index 0000000..398e371
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account3.imageset/link_account3@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/Contents.json
new file mode 100644
index 0000000..8fa09f9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "link_account4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "link_account4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/link_account4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/link_account4.png
new file mode 100644
index 0000000..7064629
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/link_account4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/link_account4@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/link_account4@2x.png
new file mode 100644
index 0000000..d7822e1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/link_account4.imageset/link_account4@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/Contents.json
new file mode 100644
index 0000000..c1fd129
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/logo.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/logo.png
new file mode 100644
index 0000000..1ce3df0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/logo.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/logo@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/logo@2x.png
new file mode 100644
index 0000000..4045390
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo-1.imageset/logo@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/Contents.json
new file mode 100644
index 0000000..c1fd129
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/logo.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/logo.png
new file mode 100644
index 0000000..1ce3df0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/logo.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/logo@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/logo@2x.png
new file mode 100644
index 0000000..4045390
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo.imageset/logo@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/Contents.json
new file mode 100644
index 0000000..93cb3c9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo_loading_1.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo_loading_1@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/logo_loading_1.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/logo_loading_1.png
new file mode 100644
index 0000000..a2c457a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/logo_loading_1.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/logo_loading_1@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/logo_loading_1@2x.png
new file mode 100644
index 0000000..1aa5551
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_1.imageset/logo_loading_1@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/Contents.json
new file mode 100644
index 0000000..dce78c2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo_loading_2.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo_loading_2@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/logo_loading_2.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/logo_loading_2.png
new file mode 100644
index 0000000..496e1a8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/logo_loading_2.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/logo_loading_2@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/logo_loading_2@2x.png
new file mode 100644
index 0000000..ba61f7c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_2.imageset/logo_loading_2@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/Contents.json
new file mode 100644
index 0000000..f21d0a8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo_loading_3.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo_loading_3@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/logo_loading_3.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/logo_loading_3.png
new file mode 100644
index 0000000..3f37f67
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/logo_loading_3.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/logo_loading_3@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/logo_loading_3@2x.png
new file mode 100644
index 0000000..28dedfc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_3.imageset/logo_loading_3@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/Contents.json
new file mode 100644
index 0000000..b88300a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "logo_loading_4.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "logo_loading_4@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/logo_loading_4.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/logo_loading_4.png
new file mode 100644
index 0000000..73617d1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/logo_loading_4.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/logo_loading_4@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/logo_loading_4@2x.png
new file mode 100644
index 0000000..95254a1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/logo_loading_4.imageset/logo_loading_4@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/Contents.json
new file mode 100644
index 0000000..2519bfb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "message.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "message@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/message.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/message.png
new file mode 100644
index 0000000..e8d7e2a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/message.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/message@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/message@2x.png
new file mode 100644
index 0000000..b09951e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message.imageset/message@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/Contents.json
new file mode 100644
index 0000000..e1a8cfb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "message_callhelp.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "message_callhelp@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/message_callhelp.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/message_callhelp.png
new file mode 100644
index 0000000..28d68c0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/message_callhelp.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/message_callhelp@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/message_callhelp@2x.png
new file mode 100644
index 0000000..a8c182d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_callhelp.imageset/message_callhelp@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/Contents.json
new file mode 100644
index 0000000..c1b8903
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "message_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "message_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/message_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/message_sel.png
new file mode 100644
index 0000000..4c5bbf8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/message_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/message_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/message_sel@2x.png
new file mode 100644
index 0000000..7eb6bd3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/message_sel.imageset/message_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/Contents.json
new file mode 100644
index 0000000..69799cc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "no_message.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "no_message@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/no_message.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/no_message.png
new file mode 100644
index 0000000..8d1423f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/no_message.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/no_message@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/no_message@2x.png
new file mode 100644
index 0000000..d739789
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message-1.imageset/no_message@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/Contents.json
new file mode 100644
index 0000000..69799cc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "no_message.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "no_message@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/no_message.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/no_message.png
new file mode 100644
index 0000000..8d1423f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/no_message.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/no_message@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/no_message@2x.png
new file mode 100644
index 0000000..d739789
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_message.imageset/no_message@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/Contents.json
new file mode 100644
index 0000000..a4d4cd8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "no_video.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "no_video@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/no_video.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/no_video.png
new file mode 100644
index 0000000..5ee7de2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/no_video.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/no_video@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/no_video@2x.png
new file mode 100644
index 0000000..b2b05f4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_video.imageset/no_video@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/Contents.json
new file mode 100644
index 0000000..b048fab
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "no_wifi.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "no_wifi@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/no_wifi.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/no_wifi.png
new file mode 100644
index 0000000..f0664b0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/no_wifi.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/no_wifi@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/no_wifi@2x.png
new file mode 100644
index 0000000..c45795a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/no_wifi.imageset/no_wifi@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/Contents.json
new file mode 100644
index 0000000..6823c6e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "offline.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "offline@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/offline.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/offline.png
new file mode 100644
index 0000000..b9150fc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/offline.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/offline@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/offline@2x.png
new file mode 100644
index 0000000..b26f2f7
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/offline.imageset/offline@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/Contents.json
new file mode 100644
index 0000000..d0c187e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "open.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "open@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/open.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/open.png
new file mode 100644
index 0000000..0133f1f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/open.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/open@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/open@2x.png
new file mode 100644
index 0000000..ea7dbb5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open.imageset/open@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/Contents.json
new file mode 100644
index 0000000..fc4f507
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "open_icon_1024.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "open_icon_1024@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/open_icon_1024.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/open_icon_1024.png
new file mode 100644
index 0000000..9fb7671
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/open_icon_1024.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/open_icon_1024@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/open_icon_1024@2x.png
new file mode 100644
index 0000000..044e08d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/open_icon_1024.imageset/open_icon_1024@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/Contents.json
new file mode 100644
index 0000000..915685e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "orange_button.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "orange_button@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/orange_button.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/orange_button.png
new file mode 100644
index 0000000..776d2b4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/orange_button.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/orange_button@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/orange_button@2x.png
new file mode 100644
index 0000000..21abd5a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button.imageset/orange_button@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/Contents.json
new file mode 100644
index 0000000..0344d3d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "orange_button_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "orange_button_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/orange_button_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/orange_button_sel.png
new file mode 100644
index 0000000..e165078
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/orange_button_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/orange_button_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/orange_button_sel@2x.png
new file mode 100644
index 0000000..be87b81
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/orange_button_sel.imageset/orange_button_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/Contents.json
new file mode 100644
index 0000000..12980e4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "pause.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "pause@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/pause.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/pause.png
new file mode 100644
index 0000000..3093598
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/pause.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/pause@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/pause@2x.png
new file mode 100644
index 0000000..8ca260b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause.imageset/pause@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/Contents.json
new file mode 100644
index 0000000..1232c2d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "pause_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "pause_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/pause_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/pause_sel.png
new file mode 100644
index 0000000..ae0bc5c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/pause_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/pause_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/pause_sel@2x.png
new file mode 100644
index 0000000..3a8fea8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/pause_sel.imageset/pause_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/Contents.json
new file mode 100644
index 0000000..e3acd91
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "picture_bg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "picture_bg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/picture_bg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/picture_bg.png
new file mode 100644
index 0000000..6d59dd0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/picture_bg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/picture_bg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/picture_bg@2x.png
new file mode 100644
index 0000000..fe4b56c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/picture_bg.imageset/picture_bg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/Contents.json
new file mode 100644
index 0000000..ad6392d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "play.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/play.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/play.png
new file mode 100644
index 0000000..85eb80e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/play.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/play@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/play@2x.png
new file mode 100644
index 0000000..854cdf9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play.imageset/play@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/Contents.json
new file mode 100644
index 0000000..c34d33b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "play_close.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_close@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/play_close.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/play_close.png
new file mode 100644
index 0000000..0ad333d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/play_close.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/play_close@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/play_close@2x.png
new file mode 100644
index 0000000..e5f1fb1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close.imageset/play_close@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/Contents.json
new file mode 100644
index 0000000..637d883
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "play_close_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_close_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/play_close_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/play_close_sel.png
new file mode 100644
index 0000000..9754105
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/play_close_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/play_close_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/play_close_sel@2x.png
new file mode 100644
index 0000000..13eb5cd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_close_sel.imageset/play_close_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_rate.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_rate.imageset/Contents.json
new file mode 100644
index 0000000..2165a01
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_rate.imageset/Contents.json
@@ -0,0 +1,21 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_rate.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_rate.imageset/play_rate.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_rate.imageset/play_rate.png
new file mode 100644
index 0000000..7e72cb8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_rate.imageset/play_rate.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/Contents.json
new file mode 100644
index 0000000..4cec557
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "play_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "play_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/play_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/play_sel.png
new file mode 100644
index 0000000..85e02b3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/play_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/play_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/play_sel@2x.png
new file mode 100644
index 0000000..5b3fc80
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/play_sel.imageset/play_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/Contents.json
new file mode 100644
index 0000000..a81e0b0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "playback.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "playback@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/playback.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/playback.png
new file mode 100644
index 0000000..685601d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/playback.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/playback@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/playback@2x.png
new file mode 100644
index 0000000..8d23634
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback.imageset/playback@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/Contents.json
new file mode 100644
index 0000000..a9e8f30
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "playback_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "playback_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/playback_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/playback_sel.png
new file mode 100644
index 0000000..57b946b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/playback_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/playback_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/playback_sel@2x.png
new file mode 100644
index 0000000..f6e308a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/playback_sel.imageset/playback_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/Contents.json
new file mode 100644
index 0000000..83b47bb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_barrel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_barrel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/preview_barrel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/preview_barrel.png
new file mode 100644
index 0000000..1269e01
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/preview_barrel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/preview_barrel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/preview_barrel@2x.png
new file mode 100644
index 0000000..cad41ed
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel.imageset/preview_barrel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/Contents.json
new file mode 100644
index 0000000..032a237
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_barrel_dis.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_barrel_dis@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/preview_barrel_dis.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/preview_barrel_dis.png
new file mode 100644
index 0000000..881bb3f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/preview_barrel_dis.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/preview_barrel_dis@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/preview_barrel_dis@2x.png
new file mode 100644
index 0000000..5cdd845
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_dis.imageset/preview_barrel_dis@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/Contents.json
new file mode 100644
index 0000000..49c76e1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_barrel_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_barrel_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/preview_barrel_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/preview_barrel_sel.png
new file mode 100644
index 0000000..d7acf20
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/preview_barrel_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/preview_barrel_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/preview_barrel_sel@2x.png
new file mode 100644
index 0000000..a7660e7
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_barrel_sel.imageset/preview_barrel_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/Contents.json
new file mode 100644
index 0000000..73a989d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_enlarge.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_enlarge@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/preview_enlarge.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/preview_enlarge.png
new file mode 100644
index 0000000..fafd7e5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/preview_enlarge.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/preview_enlarge@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/preview_enlarge@2x.png
new file mode 100644
index 0000000..74bf56d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge.imageset/preview_enlarge@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..d1b4589
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_enlarge_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_enlarge_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png
new file mode 100644
index 0000000..a823d6f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png
new file mode 100644
index 0000000..c1838af
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_enlarge_btn_sel.imageset/preview_enlarge_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/Contents.json
new file mode 100644
index 0000000..3de25dc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_play_btn.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_play_btn@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/preview_play_btn.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/preview_play_btn.png
new file mode 100644
index 0000000..22b8248
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/preview_play_btn.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/preview_play_btn@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/preview_play_btn@2x.png
new file mode 100644
index 0000000..7d1bbbe
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn.imageset/preview_play_btn@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..7aafe66
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_play_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_play_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel.png
new file mode 100644
index 0000000..9b398b5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png
new file mode 100644
index 0000000..2ea80f4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_play_btn_sel.imageset/preview_play_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/Contents.json
new file mode 100644
index 0000000..bdb6947
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_recording.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_recording@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/preview_recording.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/preview_recording.png
new file mode 100644
index 0000000..8a3f44d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/preview_recording.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/preview_recording@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/preview_recording@2x.png
new file mode 100644
index 0000000..a0d840f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording.imageset/preview_recording@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/Contents.json
new file mode 100644
index 0000000..67c6a2c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_recording_dis.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_recording_dis@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/preview_recording_dis.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/preview_recording_dis.png
new file mode 100644
index 0000000..8f2fa68
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/preview_recording_dis.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/preview_recording_dis@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/preview_recording_dis@2x.png
new file mode 100644
index 0000000..17af37e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_dis.imageset/preview_recording_dis@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/Contents.json
new file mode 100644
index 0000000..f0744e9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_recording_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_recording_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/preview_recording_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/preview_recording_sel.png
new file mode 100644
index 0000000..582049b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/preview_recording_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/preview_recording_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/preview_recording_sel@2x.png
new file mode 100644
index 0000000..f7b8be1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_recording_sel.imageset/preview_recording_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/Contents.json
new file mode 100644
index 0000000..ccf1171
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_screenshot.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_screenshot@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/preview_screenshot.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/preview_screenshot.png
new file mode 100644
index 0000000..51f91f8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/preview_screenshot.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/preview_screenshot@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/preview_screenshot@2x.png
new file mode 100644
index 0000000..ce23ff6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot.imageset/preview_screenshot@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/Contents.json
new file mode 100644
index 0000000..c3db802
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_screenshot_dis.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_screenshot_dis@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/preview_screenshot_dis.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/preview_screenshot_dis.png
new file mode 100644
index 0000000..50eb992
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/preview_screenshot_dis.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/preview_screenshot_dis@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/preview_screenshot_dis@2x.png
new file mode 100644
index 0000000..071a302
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_dis.imageset/preview_screenshot_dis@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/Contents.json
new file mode 100644
index 0000000..b900df4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_screenshot_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_screenshot_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/preview_screenshot_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/preview_screenshot_sel.png
new file mode 100644
index 0000000..74fe3b1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/preview_screenshot_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/preview_screenshot_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/preview_screenshot_sel@2x.png
new file mode 100644
index 0000000..f9fb901
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_screenshot_sel.imageset/preview_screenshot_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..98275d0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_stoppaly_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_stoppaly_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png
new file mode 100644
index 0000000..7910053
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png
new file mode 100644
index 0000000..0668cef
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stoppaly_btn_sel.imageset/preview_stoppaly_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/Contents.json
new file mode 100644
index 0000000..d7aabbd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_stopplay_btn .png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_stopplay_btn @2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn .png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn .png
new file mode 100644
index 0000000..72c3fb4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn .png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png
new file mode 100644
index 0000000..003c00b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn .imageset/preview_stopplay_btn @2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/Contents.json
new file mode 100644
index 0000000..d7aabbd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_stopplay_btn .png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_stopplay_btn @2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn .png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn .png
new file mode 100644
index 0000000..72c3fb4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn .png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png
new file mode 100644
index 0000000..003c00b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn.imageset/preview_stopplay_btn @2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..0168d6f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_stopplay_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_stopplay_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png
new file mode 100644
index 0000000..7910053
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png
new file mode 100644
index 0000000..0668cef
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_stopplay_btn_sel.imageset/preview_stopplay_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/Contents.json
new file mode 100644
index 0000000..b43f4df
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_talkback.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_talkback@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/preview_talkback.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/preview_talkback.png
new file mode 100644
index 0000000..e785577
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/preview_talkback.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/preview_talkback@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/preview_talkback@2x.png
new file mode 100644
index 0000000..12f5af4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback.imageset/preview_talkback@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/Contents.json
new file mode 100644
index 0000000..65f0448
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_talkback_dis.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_talkback_dis@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/preview_talkback_dis.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/preview_talkback_dis.png
new file mode 100644
index 0000000..e233237
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/preview_talkback_dis.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/preview_talkback_dis@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/preview_talkback_dis@2x.png
new file mode 100644
index 0000000..a960102
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_dis.imageset/preview_talkback_dis@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/Contents.json
new file mode 100644
index 0000000..955c426
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_talkback_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_talkback_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/preview_talkback_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/preview_talkback_sel.png
new file mode 100644
index 0000000..5155efd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/preview_talkback_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/preview_talkback_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/preview_talkback_sel@2x.png
new file mode 100644
index 0000000..4a13b1e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_talkback_sel.imageset/preview_talkback_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/Contents.json
new file mode 100644
index 0000000..885eb6b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_unvoice_btn.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_unvoice_btn@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn.png
new file mode 100644
index 0000000..77c5688
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png
new file mode 100644
index 0000000..2554612
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn.imageset/preview_unvoice_btn@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..f25f265
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_unvoice_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_unvoice_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png
new file mode 100644
index 0000000..2908329
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png
new file mode 100644
index 0000000..8858696
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_unvoice_btn_sel.imageset/preview_unvoice_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/Contents.json
new file mode 100644
index 0000000..e7c16de
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_voice_btn.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_voice_btn@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn.png
new file mode 100644
index 0000000..b330c2a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn@2x.png
new file mode 100644
index 0000000..2dff6b3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn.imageset/preview_voice_btn@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/Contents.json
new file mode 100644
index 0000000..01ea8c2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "preview_voice_btn_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "preview_voice_btn_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png
new file mode 100644
index 0000000..7276951
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png
new file mode 100644
index 0000000..1bbf161
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/preview_voice_btn_sel.imageset/preview_voice_btn_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/Contents.json
new file mode 100644
index 0000000..9868ffb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_bg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_bg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/ptz_bg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/ptz_bg.png
new file mode 100644
index 0000000..752bf61
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/ptz_bg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/ptz_bg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/ptz_bg@2x.png
new file mode 100644
index 0000000..380bb27
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bg.imageset/ptz_bg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/Contents.json
new file mode 100644
index 0000000..c5293c8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_bottom_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_bottom_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/ptz_bottom_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/ptz_bottom_sel.png
new file mode 100644
index 0000000..d2a408f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/ptz_bottom_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/ptz_bottom_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/ptz_bottom_sel@2x.png
new file mode 100644
index 0000000..76d8d2d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_bottom_sel.imageset/ptz_bottom_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/Contents.json
new file mode 100644
index 0000000..488cc0d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_left_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_left_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/ptz_left_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/ptz_left_sel.png
new file mode 100644
index 0000000..7bb790f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/ptz_left_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/ptz_left_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/ptz_left_sel@2x.png
new file mode 100644
index 0000000..767c0ce
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_left_sel.imageset/ptz_left_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/Contents.json
new file mode 100644
index 0000000..7a5097b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_right_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_right_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/ptz_right_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/ptz_right_sel.png
new file mode 100644
index 0000000..cb55201
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/ptz_right_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/ptz_right_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/ptz_right_sel@2x.png
new file mode 100644
index 0000000..8a7f7e0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_right_sel.imageset/ptz_right_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/Contents.json
new file mode 100644
index 0000000..e428613
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "ptz_up_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "ptz_up_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/ptz_up_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/ptz_up_sel.png
new file mode 100644
index 0000000..c9636b6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/ptz_up_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/ptz_up_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/ptz_up_sel@2x.png
new file mode 100644
index 0000000..2c063f8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/ptz_up_sel.imageset/ptz_up_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/Contents.json
new file mode 100644
index 0000000..3fdd29a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "qr_scan_line.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "qr_scan_line@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/qr_scan_line.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/qr_scan_line.png
new file mode 100644
index 0000000..1b64c58
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/qr_scan_line.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/qr_scan_line@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/qr_scan_line@2x.png
new file mode 100644
index 0000000..f72e882
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/qr_scan_line.imageset/qr_scan_line@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/Contents.json
new file mode 100644
index 0000000..03dff31
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "results_pic_bg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "results_pic_bg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/results_pic_bg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/results_pic_bg.png
new file mode 100644
index 0000000..a8e20aa
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/results_pic_bg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/results_pic_bg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/results_pic_bg@2x.png
new file mode 100644
index 0000000..c97bc61
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/results_pic_bg.imageset/results_pic_bg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/Contents.json
new file mode 100644
index 0000000..ec63d63
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "setup.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "setup@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/setup.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/setup.png
new file mode 100644
index 0000000..3e72fcf
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/setup.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/setup@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/setup@2x.png
new file mode 100644
index 0000000..3ec9640
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup.imageset/setup@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/Contents.json
new file mode 100644
index 0000000..ea22170
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "setup_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "setup_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/setup_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/setup_sel.png
new file mode 100644
index 0000000..1685e84
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/setup_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/setup_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/setup_sel@2x.png
new file mode 100644
index 0000000..ef862fc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/setup_sel.imageset/setup_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/Contents.json
new file mode 100644
index 0000000..c3a2a0d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "slider.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "slider@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/slider.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/slider.png
new file mode 100644
index 0000000..55b4ee9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/slider.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/slider@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/slider@2x.png
new file mode 100644
index 0000000..6106de6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider.imageset/slider@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/Contents.json
new file mode 100644
index 0000000..e9469b4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "slider_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "slider_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/slider_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/slider_sel.png
new file mode 100644
index 0000000..fb1b326
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/slider_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/slider_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/slider_sel@2x.png
new file mode 100644
index 0000000..15a040b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/slider_sel.imageset/slider_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/Contents.json
new file mode 100644
index 0000000..e690b49
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "spkImg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "spkImg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/spkImg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/spkImg.png
new file mode 100644
index 0000000..3eea86e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/spkImg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/spkImg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/spkImg@2x.png
new file mode 100644
index 0000000..e57f1e5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/spkImg.imageset/spkImg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/Contents.json
new file mode 100644
index 0000000..1ad2c93
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "upgrade.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "upgrade@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/upgrade.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/upgrade.png
new file mode 100644
index 0000000..db6b714
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/upgrade.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/upgrade@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/upgrade@2x.png
new file mode 100644
index 0000000..3df33e1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/upgrade.imageset/upgrade@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/Contents.json
new file mode 100644
index 0000000..b13f53a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "white_button.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "white_button@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/white_button.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/white_button.png
new file mode 100644
index 0000000..82791ff
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/white_button.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/white_button@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/white_button@2x.png
new file mode 100644
index 0000000..1c37e69
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button.imageset/white_button@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/Contents.json
new file mode 100644
index 0000000..48f7ca5
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "white_button_sel.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "white_button_sel@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/white_button_sel.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/white_button_sel.png
new file mode 100644
index 0000000..8527b2f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/white_button_sel.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/white_button_sel@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/white_button_sel@2x.png
new file mode 100644
index 0000000..7d90c5c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/white_button_sel.imageset/white_button_sel@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/Contents.json b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/Contents.json
new file mode 100644
index 0000000..493a1bd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/Contents.json
@@ -0,0 +1,22 @@
+{
+ "images" : [
+ {
+ "filename" : "wifi_bg.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "wifi_bg@2x.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/wifi_bg.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/wifi_bg.png
new file mode 100644
index 0000000..314fff3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/wifi_bg.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/wifi_bg@2x.png b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/wifi_bg@2x.png
new file mode 100644
index 0000000..c93782b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Assets.xcassets/wifi_bg.imageset/wifi_bg@2x.png
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Base.lproj/LaunchScreen.storyboard b/EZDemo/HDLEZDemo/HDLEZDemo/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..3aa4810
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+ <device id="retina6_1" orientation="portrait" appearance="light"/>
+ <dependencies>
+ <deployment identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="System colors in document resources" minToolsVersion="11.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="EHf-IW-A2E">
+ <objects>
+ <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+ <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+ <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="53" y="375"/>
+ </scene>
+ </scenes>
+ <resources>
+ <systemColor name="systemBackgroundColor">
+ <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </systemColor>
+ </resources>
+</document>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Base.lproj/Main.storyboard b/EZDemo/HDLEZDemo/HDLEZDemo/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..08c76e6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Base.lproj/Main.storyboard
@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="9QW-mI-OM5">
+ <device id="retina6_1" orientation="portrait" appearance="light"/>
+ <dependencies>
+ <deployment identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="System colors in document resources" minToolsVersion="11.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--Navigation Controller-->
+ <scene sceneID="O8c-S3-gk1">
+ <objects>
+ <navigationController id="9QW-mI-OM5" sceneMemberID="viewController">
+ <navigationBar key="navigationBar" contentMode="scaleToFill" id="j8e-BJ-Bnd">
+ <rect key="frame" x="0.0" y="44" width="414" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </navigationBar>
+ <connections>
+ <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="n1k-OE-BFd"/>
+ </connections>
+ </navigationController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="qkH-h8-pOd" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="-1374" y="-13"/>
+ </scene>
+ <!--View Controller-->
+ <scene sceneID="tne-QT-ifu">
+ <objects>
+ <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+ <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yuD-D5-fhS">
+ <rect key="frame" x="146" y="467" width="124" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <state key="normal" title="Button"/>
+ <buttonConfiguration key="configuration" style="plain" title="璺宠浆鎽勫儚澶村垪琛�"/>
+ <connections>
+ <action selector="toDeviceList:" destination="BYZ-38-t0r" eventType="touchUpInside" id="GtI-Fd-6to"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="OLp-N2-Hg5">
+ <rect key="frame" x="167" y="558" width="82" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <state key="normal" title="Button"/>
+ <buttonConfiguration key="configuration" style="plain" title="娣诲姞璁惧"/>
+ <connections>
+ <action selector="addDevice:" destination="BYZ-38-t0r" eventType="touchUpInside" id="w68-PT-1Gj"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2KN-Sn-Woo">
+ <rect key="frame" x="160" y="639" width="82" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <state key="normal" title="Button"/>
+ <buttonConfiguration key="configuration" style="plain" title="涓存椂瀵嗙爜"/>
+ <connections>
+ <action selector="toTempView:" destination="BYZ-38-t0r" eventType="touchUpInside" id="otc-xW-CXt"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XPT-Vj-G6M">
+ <rect key="frame" x="146" y="384" width="124" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <state key="normal" title="Button"/>
+ <buttonConfiguration key="configuration" style="plain" title="璺宠浆闂ㄩ攣鎽勫儚澶�"/>
+ <connections>
+ <action selector="toDoorCamera:" destination="BYZ-38-t0r" eventType="touchUpInside" id="RhS-Eu-8Mg"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="6iO-em-eZH">
+ <rect key="frame" x="167" y="321" width="82" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <state key="normal" title="Button"/>
+ <buttonConfiguration key="configuration" style="plain" title="鍘嗗彶璁板綍"/>
+ <connections>
+ <action selector="toDeviceMsgListV:" destination="BYZ-38-t0r" eventType="touchUpInside" id="AwY-z6-dMr"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="T3k-N9-gyi">
+ <rect key="frame" x="138" y="597" width="139" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <state key="normal" title="Button"/>
+ <buttonConfiguration key="configuration" style="plain" title="娣诲姞鏃犻渶楠岃瘉璁惧"/>
+ <connections>
+ <action selector="addDeviceWithoutConfirm:" destination="BYZ-38-t0r" eventType="touchUpInside" id="YMr-o1-DSZ"/>
+ </connections>
+ </button>
+ </subviews>
+ <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
+ <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+ </view>
+ <navigationItem key="navigationItem" id="QQP-Xf-0Gc"/>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="-275.36231884057975" y="-13.392857142857142"/>
+ </scene>
+ </scenes>
+ <resources>
+ <systemColor name="systemBackgroundColor">
+ <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </systemColor>
+ </resources>
+</document>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZMain.storyboard b/EZDemo/HDLEZDemo/HDLEZDemo/EZMain.storyboard
new file mode 100644
index 0000000..63dec62
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZMain.storyboard
@@ -0,0 +1,2541 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="tPl-Go-Tmu">
+ <device id="retina4_7" orientation="portrait" appearance="light"/>
+ <dependencies>
+ <deployment version="4352" identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+ <capability name="System colors in document resources" minToolsVersion="11.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--Item-->
+ <scene sceneID="Ypd-kv-rjR">
+ <objects>
+ <navigationController id="tPl-Go-Tmu" sceneMemberID="viewController">
+ <tabBarItem key="tabBarItem" title="Item" id="EOh-Lf-fJU"/>
+ <navigationBar key="navigationBar" contentMode="scaleToFill" id="9n2-YJ-ND5">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </navigationBar>
+ <connections>
+ <segue destination="BYZ-38-t0r" kind="relationship" relationship="rootViewController" id="UYR-rC-4Ms"/>
+ </connections>
+ </navigationController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="Hqy-oN-m1b" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="-1056" y="145.72713643178412"/>
+ </scene>
+ <!--Ddns Device Table View Controller-->
+ <scene sceneID="Rpj-wC-3ly">
+ <objects>
+ <tableViewController id="qZw-LL-wzV" customClass="EZDdnsDeviceTableViewController" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="ecg-RF-Skt">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <prototypes>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="R2t-zM-WMl">
+ <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="R2t-zM-WMl" id="a02-NK-SeS">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </tableViewCellContentView>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="qZw-LL-wzV" id="qRO-vy-kkW"/>
+ <outlet property="delegate" destination="qZw-LL-wzV" id="sa1-QI-psZ"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" id="vnG-WW-NBt">
+ <nil key="title"/>
+ <segmentedControl key="titleView" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="UWK-Zd-fWJ">
+ <rect key="frame" x="112.5" y="6" width="150" height="32"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <segments>
+ <segment title="First"/>
+ <segment title="Second"/>
+ </segments>
+ <connections>
+ <action selector="segmentControl:" destination="qZw-LL-wzV" eventType="valueChanged" id="CHc-5h-ANs"/>
+ </connections>
+ </segmentedControl>
+ <barButtonItem key="rightBarButtonItem" systemItem="add" id="x58-0L-dAg">
+ <connections>
+ <action selector="go2AddDevice:" destination="qZw-LL-wzV" id="dHn-Xn-rfa"/>
+ </connections>
+ </barButtonItem>
+ </navigationItem>
+ <connections>
+ <outlet property="addButton" destination="x58-0L-dAg" id="pbn-8n-fSc"/>
+ <outlet property="segment" destination="UWK-Zd-fWJ" id="Jae-Gg-cKU"/>
+ <outlet property="segmentedControl" destination="UWK-Zd-fWJ" id="AD3-PE-NmO"/>
+ <segue destination="DY9-ia-PiP" kind="push" identifier="go2RealPlayFromDdns" id="q2I-Q5-CUY"/>
+ <segue destination="3Mz-U5-jsP" kind="push" identifier="go2CameraListFromDdns" id="uaA-Ji-Zwg"/>
+ </connections>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="kIa-kX-fnm" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="640" y="-716.9415292353824"/>
+ </scene>
+ <!--View Controller-->
+ <scene sceneID="tne-QT-ifu">
+ <objects>
+ <viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+ <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="logo" translatesAutoresizingMaskIntoConstraints="NO" id="MPX-n4-aGz">
+ <rect key="frame" x="82.5" y="100" width="210" height="94"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="94" id="UZa-4y-JdR"/>
+ <constraint firstAttribute="width" constant="210" id="xPZ-ku-beA"/>
+ </constraints>
+ </imageView>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9VU-hP-zCR">
+ <rect key="frame" x="45" y="247" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="39" id="Uox-Yc-kob"/>
+ <constraint firstAttribute="width" constant="285" id="wAy-Hx-fAn"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="鎺ュ彛璋冪敤Demo" backgroundImage="blue_button"/>
+ <state key="highlighted" backgroundImage="blue_button_sel"/>
+ <connections>
+ <action selector="goAPI:" destination="BYZ-38-t0r" eventType="touchUpInside" id="7BP-Ah-1v3"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="p2R-3f-bRm">
+ <rect key="frame" x="45" y="306" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="39" id="Dta-c4-zZr"/>
+ <constraint firstAttribute="width" constant="285" id="OT3-hb-4Yn"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="浜掕仈缃慏emo" backgroundImage="orange_button"/>
+ <state key="highlighted" backgroundImage="orange_button_sel"/>
+ <connections>
+ <action selector="go2CameraList:" destination="BYZ-38-t0r" eventType="touchUpInside" id="UL5-C6-Mmx"/>
+ </connections>
+ </button>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Jqc-fA-IF7">
+ <rect key="frame" x="45" y="598" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="285" id="47F-cH-WPe"/>
+ <constraint firstAttribute="height" constant="39" id="aWy-eI-cnW"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="钀ょ煶鐧诲綍" backgroundImage="blue_button"/>
+ <state key="highlighted" backgroundImage="blue_button_sel"/>
+ <connections>
+ <action selector="ezvizLogin:" destination="BYZ-38-t0r" eventType="touchUpInside" id="hcg-0O-Gq9"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="EWl-dl-v7z">
+ <rect key="frame" x="45" y="365" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="39" id="FhC-TV-ezu"/>
+ <constraint firstAttribute="width" constant="285" id="Niw-45-NHf"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="灞�鍩熺綉Demo" backgroundImage="orange_button"/>
+ <state key="highlighted" backgroundImage="orange_button_sel"/>
+ <connections>
+ <segue destination="lve-FH-V3q" kind="push" id="wdG-ur-OaH"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Tbh-3f-Kyo">
+ <rect key="frame" x="45" y="483" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="39" id="aUb-DN-crC"/>
+ <constraint firstAttribute="width" constant="285" id="u2c-90-3In"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="DDNS Demo" backgroundImage="orange_button"/>
+ <state key="highlighted" backgroundImage="orange_button_sel"/>
+ <connections>
+ <segue destination="qZw-LL-wzV" kind="push" id="yxL-uN-ZvY"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ps8-ku-D1c">
+ <rect key="frame" x="45" y="424" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="39" id="Mu0-my-UVK"/>
+ <constraint firstAttribute="width" constant="285" id="rGt-yT-DqQ"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="Support" backgroundImage="orange_button"/>
+ <state key="highlighted" backgroundImage="orange_button_sel"/>
+ <connections>
+ <action selector="supportBtnClick:" destination="BYZ-38-t0r" eventType="touchUpInside" id="7dM-lj-Wct"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="Jqc-fA-IF7" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="0u7-ic-ffM"/>
+ <constraint firstItem="ps8-ku-D1c" firstAttribute="top" secondItem="EWl-dl-v7z" secondAttribute="bottom" constant="20" id="5CP-Ff-rzS"/>
+ <constraint firstItem="ps8-ku-D1c" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="87a-rw-8Dg"/>
+ <constraint firstItem="MPX-n4-aGz" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="HBw-CM-yXP"/>
+ <constraint firstItem="EWl-dl-v7z" firstAttribute="top" secondItem="p2R-3f-bRm" secondAttribute="bottom" constant="20" id="I1V-DW-mIa"/>
+ <constraint firstItem="Tbh-3f-Kyo" firstAttribute="top" secondItem="ps8-ku-D1c" secondAttribute="bottom" constant="20" id="Lo4-Zt-LuM"/>
+ <constraint firstItem="EWl-dl-v7z" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="XaA-D1-njM"/>
+ <constraint firstItem="MPX-n4-aGz" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" constant="56" id="YVS-Pv-v3f"/>
+ <constraint firstItem="Tbh-3f-Kyo" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="b2a-zO-RHF"/>
+ <constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="Jqc-fA-IF7" secondAttribute="bottom" constant="30" id="goF-mU-CcC"/>
+ <constraint firstItem="p2R-3f-bRm" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="jEu-7v-93k"/>
+ <constraint firstItem="p2R-3f-bRm" firstAttribute="top" secondItem="9VU-hP-zCR" secondAttribute="bottom" constant="20" id="mFD-bH-Mvl"/>
+ <constraint firstItem="9VU-hP-zCR" firstAttribute="top" secondItem="MPX-n4-aGz" secondAttribute="bottom" constant="53" id="oSX-ki-Tc0"/>
+ <constraint firstItem="9VU-hP-zCR" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="xhU-6r-0Yy"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="zba-ac-7BA">
+ <barButtonItem key="rightBarButtonItem" title="娉ㄩ攢" id="TXG-Z3-M8g">
+ <connections>
+ <action selector="logout:" destination="BYZ-38-t0r" id="3ld-6c-xnS"/>
+ </connections>
+ </barButtonItem>
+ </navigationItem>
+ <connections>
+ <outlet property="ddnsDemoBtn" destination="Tbh-3f-Kyo" id="No4-8D-5VX"/>
+ <segue destination="PUV-T9-WXJ" kind="push" identifier="go2CameraList" id="ojB-EE-NfY"/>
+ <segue destination="eVp-8l-5eB" kind="push" identifier="go2DemoAPI" id="wH9-FQ-qsr"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="-235.19999999999999" y="145.72713643178412"/>
+ </scene>
+ <!--Device Table View Controller-->
+ <scene sceneID="rr5-Et-K6j">
+ <objects>
+ <tableViewController storyboardIdentifier="EZCameraList" id="PUV-T9-WXJ" customClass="EZDeviceTableViewController" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="89" sectionHeaderHeight="28" sectionFooterHeight="28" id="UD8-7k-qhK">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <prototypes>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZDeviceCell" rowHeight="73" id="Xkg-Dw-w2X" customClass="DeviceListCell">
+ <rect key="frame" x="0.0" y="44.5" width="375" height="73"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Xkg-Dw-w2X" id="Iet-JC-0rQ">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="73"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="oYg-rg-sRX">
+ <rect key="frame" x="5" y="5" width="112" height="63"/>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="oYg-rg-sRX" secondAttribute="height" multiplier="16:9" id="Qj2-1x-bY8"/>
+ </constraints>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="C2S" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="yuu-Ju-MKr">
+ <rect key="frame" x="127" y="5" width="238" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="N48-de-git"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hZX-eZ-E0u">
+ <rect key="frame" x="127" y="29" width="39" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="39" id="4QQ-tz-dPq"/>
+ <constraint firstAttribute="height" constant="39" id="RuZ-Pc-8zE"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <state key="normal" image="playback">
+ <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="go2Record:" destination="Xkg-Dw-w2X" eventType="touchUpInside" id="bav-o4-rz1"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AmG-2j-Y75">
+ <rect key="frame" x="186" y="29" width="39" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="39" id="Q42-XD-P1b"/>
+ <constraint firstAttribute="height" constant="39" id="iDX-Vm-hmw"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <state key="normal" image="message">
+ <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="go2Message:" destination="Xkg-Dw-w2X" eventType="touchUpInside" id="fKh-5v-6Ze"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4wC-NG-1q2">
+ <rect key="frame" x="5" y="5" width="112" height="63"/>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="4wC-NG-1q2" secondAttribute="height" multiplier="16:9" id="J7d-8O-Hsb"/>
+ </constraints>
+ <connections>
+ <action selector="go2Play:" destination="Xkg-Dw-w2X" eventType="touchUpInside" id="bRp-DU-PSA"/>
+ </connections>
+ </button>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="offline" translatesAutoresizingMaskIntoConstraints="NO" id="SXG-cT-WZd">
+ <rect key="frame" x="89" y="5" width="28" height="28"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="28" id="1bc-Qu-5o1"/>
+ <constraint firstAttribute="height" constant="28" id="o9l-At-R62"/>
+ </constraints>
+ </imageView>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0cb-tT-6Se">
+ <rect key="frame" x="245" y="29" width="39" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="39" id="Mps-h7-nX0"/>
+ <constraint firstAttribute="height" constant="39" id="hNG-1A-X3w"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" image="setup">
+ <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="go2Setting:" destination="Xkg-Dw-w2X" eventType="touchUpInside" id="2Bj-rO-BWL"/>
+ </connections>
+ </button>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ad0-s7-tSM">
+ <rect key="frame" x="304" y="29" width="39" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="39" id="DY8-Hg-cjL"/>
+ <constraint firstAttribute="height" constant="39" id="HnR-hR-8bi"/>
+ </constraints>
+ <state key="normal" image="duijiangji"/>
+ <connections>
+ <action selector="go2VideoTalk:" destination="Xkg-Dw-w2X" eventType="touchUpInside" id="ejA-qH-hlh"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="4wC-NG-1q2" firstAttribute="leading" secondItem="Iet-JC-0rQ" secondAttribute="leading" constant="5" id="2lM-8U-Coj"/>
+ <constraint firstItem="AmG-2j-Y75" firstAttribute="leading" secondItem="hZX-eZ-E0u" secondAttribute="trailing" constant="20" id="3AL-W4-tN5"/>
+ <constraint firstAttribute="bottom" secondItem="AmG-2j-Y75" secondAttribute="bottom" constant="5" id="4hD-YQ-TQt"/>
+ <constraint firstItem="4wC-NG-1q2" firstAttribute="top" secondItem="Iet-JC-0rQ" secondAttribute="top" constant="5" id="CpW-TJ-kmv"/>
+ <constraint firstItem="yuu-Ju-MKr" firstAttribute="top" secondItem="Iet-JC-0rQ" secondAttribute="top" constant="5" id="Exf-xl-NwN"/>
+ <constraint firstItem="oYg-rg-sRX" firstAttribute="top" secondItem="Iet-JC-0rQ" secondAttribute="top" constant="5" id="GPe-zd-5ci"/>
+ <constraint firstItem="hZX-eZ-E0u" firstAttribute="leading" secondItem="oYg-rg-sRX" secondAttribute="trailing" constant="10" id="GsL-bZ-Shg"/>
+ <constraint firstAttribute="bottom" secondItem="4wC-NG-1q2" secondAttribute="bottom" constant="5" id="VtW-8E-Wln"/>
+ <constraint firstAttribute="bottom" secondItem="0cb-tT-6Se" secondAttribute="bottom" constant="5" id="WlZ-vF-Hr6"/>
+ <constraint firstItem="yuu-Ju-MKr" firstAttribute="leading" secondItem="oYg-rg-sRX" secondAttribute="trailing" constant="10" id="Y4S-hv-y1P"/>
+ <constraint firstItem="SXG-cT-WZd" firstAttribute="trailing" secondItem="4wC-NG-1q2" secondAttribute="trailing" id="YqH-qI-e52"/>
+ <constraint firstItem="SXG-cT-WZd" firstAttribute="top" secondItem="4wC-NG-1q2" secondAttribute="top" id="cOF-ea-qDY"/>
+ <constraint firstItem="0cb-tT-6Se" firstAttribute="leading" secondItem="AmG-2j-Y75" secondAttribute="trailing" constant="20" id="iAI-d3-joG"/>
+ <constraint firstAttribute="trailing" secondItem="yuu-Ju-MKr" secondAttribute="trailing" constant="10" id="iF6-ia-hBT"/>
+ <constraint firstAttribute="bottom" secondItem="oYg-rg-sRX" secondAttribute="bottom" constant="5" id="mW5-ze-raR"/>
+ <constraint firstItem="ad0-s7-tSM" firstAttribute="leading" secondItem="0cb-tT-6Se" secondAttribute="trailing" constant="20" id="pUr-10-jnu"/>
+ <constraint firstAttribute="bottom" secondItem="ad0-s7-tSM" secondAttribute="bottom" constant="5" id="peC-1f-wPe"/>
+ <constraint firstAttribute="bottom" secondItem="hZX-eZ-E0u" secondAttribute="bottom" constant="5" id="xIw-Sw-cwS"/>
+ <constraint firstItem="oYg-rg-sRX" firstAttribute="leading" secondItem="Iet-JC-0rQ" secondAttribute="leading" constant="5" id="xwT-lV-EqG"/>
+ </constraints>
+ </tableViewCellContentView>
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <connections>
+ <outlet property="cameraImageView" destination="oYg-rg-sRX" id="Jy4-is-hdV"/>
+ <outlet property="messageButton" destination="AmG-2j-Y75" id="CYt-Tf-DqL"/>
+ <outlet property="nameLabel" destination="yuu-Ju-MKr" id="iYU-EQ-lA7"/>
+ <outlet property="offlineIcon" destination="SXG-cT-WZd" id="VXG-bh-GBD"/>
+ <outlet property="playButton" destination="4wC-NG-1q2" id="R0t-KW-2p5"/>
+ <outlet property="recordButton" destination="hZX-eZ-E0u" id="eaT-b6-TKr"/>
+ <outlet property="settingButton" destination="0cb-tT-6Se" id="fKK-di-Y5g"/>
+ <outlet property="videoTalkButton" destination="ad0-s7-tSM" id="HEM-dk-Tdi"/>
+ </connections>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="PUV-T9-WXJ" id="c9f-0M-cLC"/>
+ <outlet property="delegate" destination="PUV-T9-WXJ" id="ell-uM-Is0"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" id="QiI-QE-qqY">
+ <rightBarButtonItems>
+ <barButtonItem id="yGh-cj-oPZ">
+ <connections>
+ <action selector="go2AddDevice:" destination="PUV-T9-WXJ" id="D58-zZ-Ox4"/>
+ </connections>
+ </barButtonItem>
+ <barButtonItem title="娉ㄩ攢" id="5JV-V5-93l">
+ <connections>
+ <action selector="go2MultiPlay:" destination="PUV-T9-WXJ" id="dR3-5L-hra"/>
+ </connections>
+ </barButtonItem>
+ </rightBarButtonItems>
+ </navigationItem>
+ <connections>
+ <outlet property="addButton" destination="yGh-cj-oPZ" id="KX9-xN-pem"/>
+ <outlet property="logoutBtn" destination="5JV-V5-93l" id="mDS-mp-F4P"/>
+ <segue destination="uBF-Yq-Qo0" kind="push" identifier="go2LivePlay" id="X3Q-o5-p8V"/>
+ <segue destination="I6z-uV-dEU" kind="push" identifier="go2Playback" id="Qls-Y0-o2u"/>
+ <segue destination="MVz-Sq-jf5" kind="push" identifier="go2MessageList" id="Kgx-sc-mTL"/>
+ <segue destination="3ZH-14-C2h" kind="push" identifier="go2Setting" id="1Wl-6O-XOm"/>
+ <segue destination="mDf-rT-1AG" kind="push" identifier="go2CameraList" id="lW4-fY-Ttr"/>
+ </connections>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="NKy-d7-m62" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="724" y="242"/>
+ </scene>
+ <!--Camera Table View Controller-->
+ <scene sceneID="TjS-bX-rfT">
+ <objects>
+ <tableViewController id="mDf-rT-1AG" customClass="EZCameraTableViewController" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="yIX-z0-9in">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <prototypes>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZCameraCell" id="7Im-ni-l3z">
+ <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="7Im-ni-l3z" id="DdN-J1-0fa">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </tableViewCellContentView>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="mDf-rT-1AG" id="eU2-XI-Pwl"/>
+ <outlet property="delegate" destination="mDf-rT-1AG" id="KwM-WJ-FUe"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" id="fvt-9v-OHF"/>
+ <connections>
+ <segue destination="uBF-Yq-Qo0" kind="push" identifier="go2LivePlay" id="oPv-Bb-2n6"/>
+ <segue destination="I6z-uV-dEU" kind="push" identifier="go2Playback" id="GcW-2d-Vr6"/>
+ </connections>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="BbG-Me-SeW" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1414.4000000000001" y="705.24737631184416"/>
+ </scene>
+ <!--Hub璁惧娴嬭瘯涓撶敤-->
+ <scene sceneID="G9e-94-Nua">
+ <objects>
+ <viewController storyboardIdentifier="EZHubDebugViewController" id="cjX-Lt-BP9" customClass="EZHubDebugViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="EWY-eJ-jtQ"/>
+ <viewControllerLayoutGuide type="bottom" id="osv-DW-PLK"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="9Li-8P-hDA">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="璁惧搴忓垪鍙�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iwL-Ah-WH0">
+ <rect key="frame" x="20" y="150" width="72" height="17"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="bezel" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="3Ww-0Y-zfl">
+ <rect key="frame" x="102" y="138.5" width="253" height="40"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="zI7-mv-iMH"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="1" borderStyle="bezel" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="iAj-OV-oUu">
+ <rect key="frame" x="102" y="198.5" width="253" height="40"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="jeW-7w-Zss"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2s3-2Z-WBg">
+ <rect key="frame" x="170" y="258.5" width="35" height="33"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <state key="normal" title="璺宠浆">
+ <color key="titleColor" systemColor="darkTextColor"/>
+ </state>
+ <connections>
+ <action selector="clickNextBtn:" destination="cjX-Lt-BP9" eventType="touchUpInside" id="gpT-6m-bB8"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tip: 璇疯緭鍏ユ纭殑搴忓垪鍙峰強閫氶亾鍙疯繘琛岄瑙�/鍥炴斁" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Tju-Bo-s8t">
+ <rect key="frame" x="20" y="642.5" width="335" height="14.5"/>
+ <fontDescription key="fontDescription" type="system" pointSize="12"/>
+ <color key="textColor" systemColor="systemGrayColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="閫氶亾鍙�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gfd-eM-Uwg">
+ <rect key="frame" x="20" y="210" width="43" height="17"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+ <constraints>
+ <constraint firstItem="iAj-OV-oUu" firstAttribute="centerY" secondItem="Gfd-eM-Uwg" secondAttribute="centerY" id="4Dc-j5-BF4"/>
+ <constraint firstItem="iAj-OV-oUu" firstAttribute="leading" secondItem="3Ww-0Y-zfl" secondAttribute="leading" id="9S5-Z0-yep"/>
+ <constraint firstItem="2s3-2Z-WBg" firstAttribute="centerX" secondItem="9Li-8P-hDA" secondAttribute="centerX" id="Ewb-Mt-WOw"/>
+ <constraint firstItem="Gfd-eM-Uwg" firstAttribute="leading" secondItem="iwL-Ah-WH0" secondAttribute="leading" id="H8P-Hf-0w3"/>
+ <constraint firstItem="2s3-2Z-WBg" firstAttribute="top" secondItem="iAj-OV-oUu" secondAttribute="bottom" constant="20" id="Jca-Gb-xbn"/>
+ <constraint firstItem="iwL-Ah-WH0" firstAttribute="top" secondItem="EWY-eJ-jtQ" secondAttribute="bottom" constant="150" id="S4R-2z-VJG"/>
+ <constraint firstAttribute="trailing" secondItem="Tju-Bo-s8t" secondAttribute="trailing" constant="20" id="Wol-pi-jwB"/>
+ <constraint firstAttribute="trailing" secondItem="3Ww-0Y-zfl" secondAttribute="trailing" constant="20" id="Ywb-iw-0Co"/>
+ <constraint firstItem="iAj-OV-oUu" firstAttribute="top" secondItem="3Ww-0Y-zfl" secondAttribute="bottom" constant="20" id="azT-tB-cNb"/>
+ <constraint firstItem="3Ww-0Y-zfl" firstAttribute="centerY" secondItem="iwL-Ah-WH0" secondAttribute="centerY" id="bUr-p5-c0c"/>
+ <constraint firstItem="3Ww-0Y-zfl" firstAttribute="leading" secondItem="iwL-Ah-WH0" secondAttribute="trailing" constant="10" id="gAu-hK-yWx"/>
+ <constraint firstItem="osv-DW-PLK" firstAttribute="top" secondItem="Tju-Bo-s8t" secondAttribute="bottom" constant="10" id="hk5-mb-cah"/>
+ <constraint firstItem="Tju-Bo-s8t" firstAttribute="leading" secondItem="9Li-8P-hDA" secondAttribute="leading" constant="20" id="q6g-dT-jVP"/>
+ <constraint firstItem="iAj-OV-oUu" firstAttribute="trailing" secondItem="3Ww-0Y-zfl" secondAttribute="trailing" id="yqG-Yl-wlg"/>
+ <constraint firstItem="iwL-Ah-WH0" firstAttribute="leading" secondItem="9Li-8P-hDA" secondAttribute="leading" constant="20" id="zBe-CH-hDj"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" title="Hub璁惧娴嬭瘯涓撶敤" id="yPB-O2-7ly"/>
+ <connections>
+ <outlet property="channelNo" destination="iAj-OV-oUu" id="Hv3-RO-7Sn"/>
+ <outlet property="deviceSerial" destination="3Ww-0Y-zfl" id="frj-1l-EVk"/>
+ <outlet property="nextBtn" destination="2s3-2Z-WBg" id="lKP-OE-VZc"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="GD7-bW-eej" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="2245.5999999999999" y="843.32833583208401"/>
+ </scene>
+ <!--DemoAPI Table View Controller-->
+ <scene sceneID="K6d-tL-5Zo">
+ <objects>
+ <tableViewController id="eVp-8l-5eB" customClass="DemoAPITableViewController" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="CfU-2M-GhS">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <prototypes>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="DemoAPICell" id="wpS-t4-02o">
+ <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="wpS-t4-02o" id="8mM-ux-z21">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </tableViewCellContentView>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="eVp-8l-5eB" id="1sZ-CF-mcF"/>
+ <outlet property="delegate" destination="eVp-8l-5eB" id="QDd-Zc-npE"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" id="uwl-Qi-lCX">
+ <barButtonItem key="rightBarButtonItem" title="娴嬭瘯" id="eaB-Su-wjk">
+ <color key="tintColor" red="0.46666666666666667" green="0.6588235294117647" blue="0.98039215686274506" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <connections>
+ <action selector="checkCancel:" destination="eVp-8l-5eB" id="gJG-PL-kXX"/>
+ </connections>
+ </barButtonItem>
+ </navigationItem>
+ <connections>
+ <segue destination="gYM-MT-67r" kind="push" identifier="go2Play" id="vGU-HX-hFr"/>
+ </connections>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="piY-CP-R86" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="-236.80000000000001" y="-794.30284857571223"/>
+ </scene>
+ <!--Local Device List View Controller-->
+ <scene sceneID="OzV-ek-MDM">
+ <objects>
+ <tableViewController id="lve-FH-V3q" customClass="EZLocalDeviceListViewController" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="eYm-4q-VdW">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <prototypes>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="UVM-wN-ME4">
+ <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="UVM-wN-ME4" id="PFk-ak-8nJ">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </tableViewCellContentView>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="lve-FH-V3q" id="zuS-vV-dCl"/>
+ <outlet property="delegate" destination="lve-FH-V3q" id="Uwu-Sl-2aT"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" id="roW-Vh-54I"/>
+ <connections>
+ <segue destination="DY9-ia-PiP" kind="push" identifier="go2LocalRealPlay" id="9Tu-UR-Cms"/>
+ <segue destination="3Mz-U5-jsP" kind="push" identifier="go2CameraList" id="vdt-wN-aOY"/>
+ </connections>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="fUd-tf-VAT" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1316.8" y="-303.14842578710648"/>
+ </scene>
+ <!--Play Demo View Controller-->
+ <scene sceneID="8fm-uL-tzd">
+ <objects>
+ <viewController id="gYM-MT-67r" customClass="EZPlayDemoViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="74A-e0-tbe"/>
+ <viewControllerLayoutGuide type="bottom" id="J7W-UF-HXH"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="Ele-7y-Sts">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8AH-ts-VAl">
+ <rect key="frame" x="0.0" y="44" width="187.5" height="100"/>
+ <color key="backgroundColor" red="0.17321318387985229" green="0.74333697557449341" blue="0.45914602279663086" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="100" id="uyH-gu-qB2"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="frT-lO-vkv">
+ <rect key="frame" x="187.5" y="144" width="187.5" height="100"/>
+ <color key="backgroundColor" red="0.17321318387985229" green="0.74333697557449341" blue="0.45914602279663086" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XlI-CJ-eCW">
+ <rect key="frame" x="0.0" y="144" width="187.5" height="100"/>
+ <color key="backgroundColor" red="0.93333333330000001" green="0.65490196079999996" blue="0.40000000000000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="iCt-fy-olc">
+ <rect key="frame" x="187.5" y="44" width="187.5" height="100"/>
+ <color key="backgroundColor" red="0.85770881180000003" green="0.211302614" blue="0.113631911" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </view>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="trailing" secondItem="iCt-fy-olc" secondAttribute="trailing" id="8cG-EV-Zci"/>
+ <constraint firstItem="iCt-fy-olc" firstAttribute="width" secondItem="8AH-ts-VAl" secondAttribute="width" id="K2g-7q-aVl"/>
+ <constraint firstItem="frT-lO-vkv" firstAttribute="top" secondItem="iCt-fy-olc" secondAttribute="bottom" id="UhO-aa-pdv"/>
+ <constraint firstItem="iCt-fy-olc" firstAttribute="top" secondItem="74A-e0-tbe" secondAttribute="bottom" id="Ur2-hP-wfh"/>
+ <constraint firstItem="frT-lO-vkv" firstAttribute="leading" secondItem="XlI-CJ-eCW" secondAttribute="trailing" id="XIn-Kk-1nK"/>
+ <constraint firstItem="8AH-ts-VAl" firstAttribute="top" secondItem="74A-e0-tbe" secondAttribute="bottom" id="Y3l-Rf-RQU"/>
+ <constraint firstItem="iCt-fy-olc" firstAttribute="leading" secondItem="8AH-ts-VAl" secondAttribute="trailing" id="a1g-Bl-WQa"/>
+ <constraint firstItem="XlI-CJ-eCW" firstAttribute="width" secondItem="8AH-ts-VAl" secondAttribute="width" id="bjQ-gf-dGk"/>
+ <constraint firstAttribute="trailing" secondItem="frT-lO-vkv" secondAttribute="trailing" id="cb9-Tf-upe"/>
+ <constraint firstItem="8AH-ts-VAl" firstAttribute="leading" secondItem="Ele-7y-Sts" secondAttribute="leading" id="dpm-HC-1mA"/>
+ <constraint firstItem="XlI-CJ-eCW" firstAttribute="height" secondItem="8AH-ts-VAl" secondAttribute="height" id="g4q-KH-ZfP"/>
+ <constraint firstItem="frT-lO-vkv" firstAttribute="height" secondItem="8AH-ts-VAl" secondAttribute="height" id="nsU-MN-xXd"/>
+ <constraint firstItem="iCt-fy-olc" firstAttribute="height" secondItem="8AH-ts-VAl" secondAttribute="height" id="qhP-df-mYo"/>
+ <constraint firstItem="XlI-CJ-eCW" firstAttribute="leading" secondItem="Ele-7y-Sts" secondAttribute="leading" id="rzL-GK-xxp"/>
+ <constraint firstItem="frT-lO-vkv" firstAttribute="width" secondItem="8AH-ts-VAl" secondAttribute="width" id="wH2-YL-hfv"/>
+ <constraint firstItem="XlI-CJ-eCW" firstAttribute="top" secondItem="8AH-ts-VAl" secondAttribute="bottom" id="zP3-Uf-px6"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="FYr-cz-ceJ"/>
+ <connections>
+ <outlet property="playerView1" destination="8AH-ts-VAl" id="RyF-dg-Xlo"/>
+ <outlet property="playerView2" destination="iCt-fy-olc" id="8Pp-VG-cj3"/>
+ <outlet property="playerView3" destination="XlI-CJ-eCW" id="ths-4T-Wdu"/>
+ <outlet property="playerView4" destination="frT-lO-vkv" id="HA5-cm-w4R"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="5b9-k6-eNq" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="667.20000000000005" y="-1505.8470764617691"/>
+ </scene>
+ <!--Local Camera List View Controller-->
+ <scene sceneID="GiH-NW-r0j">
+ <objects>
+ <tableViewController id="3Mz-U5-jsP" customClass="EZLocalCameraListViewController" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="chP-35-ge9">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <prototypes>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" id="VhH-MZ-U0P">
+ <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="VhH-MZ-U0P" id="Kep-2I-4hb">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </tableViewCellContentView>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="3Mz-U5-jsP" id="Shx-EK-Y4b"/>
+ <outlet property="delegate" destination="3Mz-U5-jsP" id="SyV-co-OYw"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" id="qGc-YD-tfD"/>
+ <connections>
+ <segue destination="DY9-ia-PiP" kind="push" identifier="cameraList2RealPlay" id="EFm-VJ-o0S"/>
+ </connections>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="sT3-wg-h8c" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="2160" y="-1504.9475262368817"/>
+ </scene>
+ <!--Local Real Play View Controller-->
+ <scene sceneID="Ob9-Vq-jik">
+ <objects>
+ <viewController id="DY9-ia-PiP" customClass="EZLocalRealPlayViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="h0Y-TV-n1t"/>
+ <viewControllerLayoutGuide type="bottom" id="4wj-tV-fqx"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="EEp-D8-32M">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hdv-eQ-Pot">
+ <rect key="frame" x="0.0" y="44" width="375" height="211"/>
+ <color key="backgroundColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="hdv-eQ-Pot" secondAttribute="height" multiplier="16:9" id="qjy-ev-K4v"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dGh-tv-6od">
+ <rect key="frame" x="0.0" y="467" width="375" height="200"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="zmO-yA-U7o">
+ <rect key="frame" x="110.5" y="23" width="154" height="154"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="154" id="bmK-aA-z2Y"/>
+ <constraint firstAttribute="width" constant="154" id="dtm-z6-bF8"/>
+ </constraints>
+ <state key="normal" image="ptz_bg" backgroundImage="ptz_bg"/>
+ <state key="disabled" image="ptz_bg" backgroundImage="ptz_bg"/>
+ <state key="highlighted" image="ptz_bg"/>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="o3J-1O-xKa">
+ <rect key="frame" x="162.5" y="23" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="50" id="T7U-Lb-iYk"/>
+ <constraint firstAttribute="width" constant="50" id="yvd-VM-S0F"/>
+ </constraints>
+ <connections>
+ <action selector="ptzStart:" destination="DY9-ia-PiP" eventType="touchDown" id="FmE-If-DJB"/>
+ <action selector="ptzStop:" destination="DY9-ia-PiP" eventType="touchUpInside" id="KYK-NW-8CI"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YPs-v6-rGE">
+ <rect key="frame" x="162.5" y="127" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="50" id="4vC-Qa-KjP"/>
+ <constraint firstAttribute="height" constant="50" id="5Fr-vb-ovm"/>
+ </constraints>
+ <connections>
+ <action selector="ptzStart:" destination="DY9-ia-PiP" eventType="touchDown" id="Va2-ev-nNu"/>
+ <action selector="ptzStop:" destination="DY9-ia-PiP" eventType="touchUpInside" id="i53-0h-UuB"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4FY-hr-et5">
+ <rect key="frame" x="214.5" y="74" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="50" id="3Gt-6l-mih"/>
+ <constraint firstAttribute="height" constant="50" id="p6U-Hl-acN"/>
+ </constraints>
+ <connections>
+ <action selector="ptzStart:" destination="DY9-ia-PiP" eventType="touchDown" id="j9n-PS-Beo"/>
+ <action selector="ptzStop:" destination="DY9-ia-PiP" eventType="touchUpInside" id="JwY-1I-u4H"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="AGq-mS-fpu">
+ <rect key="frame" x="110.5" y="75" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="50" id="HCc-Dx-2z4"/>
+ <constraint firstAttribute="width" constant="50" id="q60-ir-KZb"/>
+ </constraints>
+ <connections>
+ <action selector="ptzStart:" destination="DY9-ia-PiP" eventType="touchDown" id="4Bd-We-F5z"/>
+ <action selector="ptzStop:" destination="DY9-ia-PiP" eventType="touchUpInside" id="6k7-62-FlS"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstItem="AGq-mS-fpu" firstAttribute="centerY" secondItem="dGh-tv-6od" secondAttribute="centerY" priority="750" id="6Ua-84-TEt"/>
+ <constraint firstItem="YPs-v6-rGE" firstAttribute="centerX" secondItem="dGh-tv-6od" secondAttribute="centerX" priority="750" id="EM0-2a-fAq"/>
+ <constraint firstAttribute="centerX" secondItem="AGq-mS-fpu" secondAttribute="trailing" priority="750" constant="27" id="L0Z-lO-ka5"/>
+ <constraint firstAttribute="height" constant="200" id="LlC-4K-Vpc"/>
+ <constraint firstAttribute="centerY" secondItem="o3J-1O-xKa" secondAttribute="bottom" priority="750" constant="27" id="PiS-5g-E5f"/>
+ <constraint firstItem="4FY-hr-et5" firstAttribute="centerY" secondItem="dGh-tv-6od" secondAttribute="centerY" priority="750" constant="-1" id="Sba-Vg-Qul"/>
+ <constraint firstItem="zmO-yA-U7o" firstAttribute="centerX" secondItem="dGh-tv-6od" secondAttribute="centerX" priority="750" id="a6V-Dn-JYu"/>
+ <constraint firstItem="o3J-1O-xKa" firstAttribute="centerX" secondItem="dGh-tv-6od" secondAttribute="centerX" priority="750" id="bhI-hp-Gej"/>
+ <constraint firstItem="zmO-yA-U7o" firstAttribute="centerY" secondItem="dGh-tv-6od" secondAttribute="centerY" priority="750" id="lMq-ZA-nLj"/>
+ <constraint firstItem="YPs-v6-rGE" firstAttribute="top" secondItem="dGh-tv-6od" secondAttribute="centerY" priority="750" constant="27" id="nZd-DA-LUI"/>
+ <constraint firstItem="4FY-hr-et5" firstAttribute="leading" secondItem="dGh-tv-6od" secondAttribute="centerX" priority="750" constant="27" id="ohc-aO-VyY"/>
+ </constraints>
+ </view>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstItem="dGh-tv-6od" firstAttribute="leading" secondItem="EEp-D8-32M" secondAttribute="leading" id="6jN-4v-8p4"/>
+ <constraint firstAttribute="trailing" secondItem="dGh-tv-6od" secondAttribute="trailing" id="IYo-ow-hER"/>
+ <constraint firstAttribute="trailing" secondItem="hdv-eQ-Pot" secondAttribute="trailing" id="OT6-ma-tdH"/>
+ <constraint firstItem="4wj-tV-fqx" firstAttribute="top" secondItem="dGh-tv-6od" secondAttribute="bottom" id="ccD-0a-h62"/>
+ <constraint firstItem="hdv-eQ-Pot" firstAttribute="leading" secondItem="EEp-D8-32M" secondAttribute="leading" id="gV9-Mb-Mcx"/>
+ <constraint firstItem="hdv-eQ-Pot" firstAttribute="top" secondItem="h0Y-TV-n1t" secondAttribute="bottom" id="ydp-0t-Luo"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="31P-xi-HNx"/>
+ <connections>
+ <outlet property="playerView" destination="hdv-eQ-Pot" id="dwq-TG-eDg"/>
+ <outlet property="ptzBgBtn" destination="zmO-yA-U7o" id="P8c-Ec-ZWf"/>
+ <outlet property="ptzDownBtn" destination="YPs-v6-rGE" id="nGW-Uw-VJv"/>
+ <outlet property="ptzLeftBtn" destination="AGq-mS-fpu" id="QaN-LS-GA3"/>
+ <outlet property="ptzRightBtn" destination="4FY-hr-et5" id="QwW-Dl-DXG"/>
+ <outlet property="ptzUpBtn" destination="o3J-1O-xKa" id="2If-64-zQF"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="MCh-vn-O5v" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="2159.1999999999998" y="-702.99850074962524"/>
+ </scene>
+ <!--Live Play View Controller-->
+ <scene sceneID="nO0-GE-9oX">
+ <objects>
+ <viewController storyboardIdentifier="EZLivePlayViewController" id="uBF-Yq-Qo0" customClass="EZLivePlayViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="heE-pR-PSR"/>
+ <viewControllerLayoutGuide type="bottom" id="3qm-Zv-a7S"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="PYB-vu-Xcw">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="gFl-PI-CLn">
+ <rect key="frame" x="0.0" y="44" width="375" height="623"/>
+ </imageView>
+ <scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NRj-hs-uOI">
+ <rect key="frame" x="0.0" y="44" width="375" height="211"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1Xz-5f-ZJx">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="211"/>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="1Xz-5f-ZJx" secondAttribute="height" multiplier="16:9" id="7NS-WA-bEr"/>
+ </constraints>
+ </view>
+ </subviews>
+ <constraints>
+ <constraint firstItem="1Xz-5f-ZJx" firstAttribute="centerY" secondItem="NRj-hs-uOI" secondAttribute="centerY" id="DTc-SB-nnD"/>
+ <constraint firstAttribute="width" secondItem="NRj-hs-uOI" secondAttribute="height" multiplier="16:9" id="FHe-T4-BRJ"/>
+ <constraint firstItem="1Xz-5f-ZJx" firstAttribute="width" secondItem="NRj-hs-uOI" secondAttribute="width" id="JfK-ti-Ys7"/>
+ <constraint firstItem="1Xz-5f-ZJx" firstAttribute="height" secondItem="NRj-hs-uOI" secondAttribute="height" id="QcN-dO-GL9"/>
+ <constraint firstAttribute="bottom" secondItem="1Xz-5f-ZJx" secondAttribute="bottom" id="ted-kP-rO7"/>
+ <constraint firstAttribute="trailing" secondItem="1Xz-5f-ZJx" secondAttribute="trailing" id="wA6-Da-kWF"/>
+ <constraint firstItem="1Xz-5f-ZJx" firstAttribute="centerX" secondItem="NRj-hs-uOI" secondAttribute="centerX" id="zUn-i2-2qZ"/>
+ </constraints>
+ <viewLayoutGuide key="contentLayoutGuide" id="ENM-3Y-cS8"/>
+ <viewLayoutGuide key="frameLayoutGuide" id="itJ-oF-sXb"/>
+ </scrollView>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2bL-GF-xWw">
+ <rect key="frame" x="0.0" y="44" width="375" height="40"/>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="u99-on-soH"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" 00:00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yrc-c9-rvb">
+ <rect key="frame" x="147.5" y="54" width="80" height="24"/>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="80" id="O7b-Gn-efp"/>
+ <constraint firstAttribute="height" constant="24" id="ZGt-2H-p7D"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dTs-1h-o4p">
+ <rect key="frame" x="157" y="162" width="61" height="93"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="picture_bg" translatesAutoresizingMaskIntoConstraints="NO" id="oew-Eh-y6G">
+ <rect key="frame" x="0.0" y="0.0" width="61" height="93"/>
+ </imageView>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="skK-Ar-y6h">
+ <rect key="frame" x="0.0" y="5" width="61" height="25"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="25" id="FvR-rx-0Us"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="楂樻竻"/>
+ <state key="highlighted">
+ <color key="titleColor" red="0.83529411760000005" green="0.35294117650000001" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="qualitySelectedClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="ehq-ZC-DP7"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WSh-Ao-McO">
+ <rect key="frame" x="0.0" y="30" width="61" height="25"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="25" id="R6l-x2-qDN"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="鍧囪 "/>
+ <state key="highlighted">
+ <color key="titleColor" red="0.83529411760000005" green="0.35294117650000001" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="qualitySelectedClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="r2V-mn-r3i"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="UlQ-aK-1VP">
+ <rect key="frame" x="0.0" y="55" width="61" height="25"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="娴佺晠"/>
+ <state key="highlighted">
+ <color key="titleColor" red="0.83529411760000005" green="0.35294117650000001" blue="0.1764705882" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="qualitySelectedClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="zNC-JB-2X8"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="WSh-Ao-McO" firstAttribute="top" secondItem="skK-Ar-y6h" secondAttribute="bottom" id="1lW-7e-eiC"/>
+ <constraint firstAttribute="width" constant="61" id="7Vp-xX-qkl"/>
+ <constraint firstItem="skK-Ar-y6h" firstAttribute="trailing" secondItem="WSh-Ao-McO" secondAttribute="trailing" id="9yE-XT-Sk2"/>
+ <constraint firstItem="skK-Ar-y6h" firstAttribute="top" secondItem="dTs-1h-o4p" secondAttribute="top" constant="5" id="GWJ-7g-A0e"/>
+ <constraint firstItem="oew-Eh-y6G" firstAttribute="centerX" secondItem="UlQ-aK-1VP" secondAttribute="centerX" id="L87-O0-VoA"/>
+ <constraint firstItem="UlQ-aK-1VP" firstAttribute="top" secondItem="WSh-Ao-McO" secondAttribute="bottom" id="WgL-bD-701"/>
+ <constraint firstItem="skK-Ar-y6h" firstAttribute="leading" secondItem="WSh-Ao-McO" secondAttribute="leading" id="YhJ-Jr-x79"/>
+ <constraint firstItem="oew-Eh-y6G" firstAttribute="centerY" secondItem="dTs-1h-o4p" secondAttribute="centerY" id="c1M-Xb-cfJ"/>
+ <constraint firstAttribute="height" constant="93" id="d7D-mg-BSx"/>
+ <constraint firstAttribute="bottom" secondItem="UlQ-aK-1VP" secondAttribute="bottom" constant="13" id="ebx-RF-FUE"/>
+ <constraint firstItem="skK-Ar-y6h" firstAttribute="centerX" secondItem="dTs-1h-o4p" secondAttribute="centerX" id="mlv-DW-3jJ"/>
+ <constraint firstItem="WSh-Ao-McO" firstAttribute="leading" secondItem="UlQ-aK-1VP" secondAttribute="leading" id="pfM-pi-Gro"/>
+ <constraint firstItem="WSh-Ao-McO" firstAttribute="trailing" secondItem="UlQ-aK-1VP" secondAttribute="trailing" id="qLx-ym-avm"/>
+ <constraint firstItem="oew-Eh-y6G" firstAttribute="leading" secondItem="skK-Ar-y6h" secondAttribute="leading" id="wYS-ai-oQn"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1FE-Su-4U4">
+ <rect key="frame" x="0.0" y="255" width="375" height="37"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xSp-4i-Jwh">
+ <rect key="frame" x="0.0" y="0.0" width="75" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="vvT-rg-bpU"/>
+ </constraints>
+ <state key="normal" image="preview_play_btn"/>
+ <state key="highlighted" image="preview_play_btn_sel"/>
+ <connections>
+ <action selector="playButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="h84-BQ-Rba"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tAW-X2-E9K">
+ <rect key="frame" x="75" y="0.0" width="75" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="yUl-JS-zBO"/>
+ </constraints>
+ <state key="normal" image="preview_voice_btn"/>
+ <state key="selected" image="preview_unvoice_btn"/>
+ <state key="highlighted" image="preview_voice_btn_sel"/>
+ <connections>
+ <action selector="voiceButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="99b-Tz-nsx"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MqM-GF-jSr">
+ <rect key="frame" x="225" y="0.0" width="75" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="dpN-py-vBv"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="lTh-qe-8pV">
+ <rect key="frame" x="300" y="0.0" width="75" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="b2W-Lf-XIu"/>
+ </constraints>
+ <state key="normal" image="preview_enlarge"/>
+ <state key="highlighted" image="preview_enlarge_btn_sel"/>
+ <connections>
+ <action selector="large:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="DiS-En-dkK"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JEB-Q6-XNh">
+ <rect key="frame" x="150" y="0.0" width="75" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="vOh-Oc-1dN"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="楂樻竻">
+ <color key="titleColor" red="0.70588235294117641" green="0.70588235294117641" blue="0.70588235294117641" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="qualityButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Hze-u0-cgn"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="xSp-4i-Jwh" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="top" id="1W5-cF-JRC"/>
+ <constraint firstItem="lTh-qe-8pV" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="top" id="HsY-AZ-lgd"/>
+ <constraint firstItem="tAW-X2-E9K" firstAttribute="width" secondItem="xSp-4i-Jwh" secondAttribute="width" id="Mx5-If-rHb"/>
+ <constraint firstItem="MqM-GF-jSr" firstAttribute="width" secondItem="xSp-4i-Jwh" secondAttribute="width" id="NLP-kf-u95"/>
+ <constraint firstAttribute="height" constant="37" id="Onr-j0-g93"/>
+ <constraint firstItem="JEB-Q6-XNh" firstAttribute="width" secondItem="xSp-4i-Jwh" secondAttribute="width" id="P8q-8H-VNk"/>
+ <constraint firstItem="MqM-GF-jSr" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="top" id="Rht-jJ-nst"/>
+ <constraint firstItem="lTh-qe-8pV" firstAttribute="width" secondItem="xSp-4i-Jwh" secondAttribute="width" id="XLi-l4-xmh"/>
+ <constraint firstItem="tAW-X2-E9K" firstAttribute="leading" secondItem="xSp-4i-Jwh" secondAttribute="trailing" id="Zd3-bK-ayn"/>
+ <constraint firstAttribute="trailing" secondItem="lTh-qe-8pV" secondAttribute="trailing" id="aid-gD-fi2"/>
+ <constraint firstItem="MqM-GF-jSr" firstAttribute="leading" secondItem="JEB-Q6-XNh" secondAttribute="trailing" id="ea4-ei-JXX"/>
+ <constraint firstItem="tAW-X2-E9K" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="top" id="gFD-BU-g3r"/>
+ <constraint firstItem="JEB-Q6-XNh" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="top" id="iOt-L6-Zqu"/>
+ <constraint firstItem="JEB-Q6-XNh" firstAttribute="leading" secondItem="tAW-X2-E9K" secondAttribute="trailing" id="o02-Wm-XvO"/>
+ <constraint firstItem="lTh-qe-8pV" firstAttribute="leading" secondItem="MqM-GF-jSr" secondAttribute="trailing" id="q8x-LF-oDx"/>
+ <constraint firstItem="xSp-4i-Jwh" firstAttribute="leading" secondItem="1FE-Su-4U4" secondAttribute="leading" id="qZZ-Fc-8jt"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7Gq-77-ypg">
+ <rect key="frame" x="0.0" y="292" width="375" height="375"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="fUI-tR-jyG">
+ <rect key="frame" x="77.5" y="87.5" width="100" height="100"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="100" id="4pV-lo-eLV"/>
+ <constraint firstAttribute="height" constant="100" id="CFM-rZ-KQg"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="浜戝彴" image="preview_barrel">
+ <color key="titleColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="disabled" image="preview_barrel_dis"/>
+ <state key="highlighted" image="preview_barrel_sel"/>
+ <connections>
+ <action selector="ptzViewShow:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="KFK-7A-xxO"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4Eh-hh-84T">
+ <rect key="frame" x="197.5" y="87.5" width="100" height="100"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="100" id="MdX-on-ZlR"/>
+ <constraint firstAttribute="height" constant="100" id="uZ6-ZC-fku"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="瀵硅" image="preview_talkback">
+ <color key="titleColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="disabled" image="preview_talkback_dis"/>
+ <state key="selected" image="preview_talkback_sel"/>
+ <state key="highlighted" image="preview_talkback_sel"/>
+ <connections>
+ <action selector="talkButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="jgM-EH-Af3"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wEO-O3-gSJ">
+ <rect key="frame" x="77.5" y="187.5" width="100" height="100"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="100" id="HNG-1d-auy"/>
+ <constraint firstAttribute="height" constant="100" id="fFt-WV-T6O"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="鎴浘" image="preview_screenshot">
+ <color key="titleColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="disabled" image="preview_screenshot_dis"/>
+ <state key="highlighted" image="preview_screenshot_sel"/>
+ <connections>
+ <action selector="capture:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="0Wz-FX-QwF"/>
+ </connections>
+ </button>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Lrx-9r-gJZ">
+ <rect key="frame" x="0.0" y="287" width="375" height="88"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Un0-bC-uwU">
+ <rect key="frame" x="325" y="0.0" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="50" id="BBB-mL-3uD"/>
+ <constraint firstAttribute="height" constant="50" id="p9L-7l-33x"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <state key="normal" image="play_close">
+ <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="highlighted" image="play_close_sel"/>
+ <connections>
+ <action selector="closePtzView:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="M9G-1Z-zup"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cRL-ov-Bad">
+ <rect key="frame" x="110.5" y="-33" width="154" height="154"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="154" id="2qV-nc-X2D"/>
+ <constraint firstAttribute="height" constant="154" id="CCV-cO-2RB"/>
+ </constraints>
+ <state key="normal" image="ptz_bg" backgroundImage="ptz_bg"/>
+ <state key="disabled" image="ptz_bg" backgroundImage="ptz_bg"/>
+ <state key="highlighted" image="ptz_bg"/>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="46J-XC-G3M">
+ <rect key="frame" x="162.5" y="-33" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="50" id="bG6-29-hdH"/>
+ <constraint firstAttribute="height" constant="50" id="sI2-gA-aFQ"/>
+ </constraints>
+ <connections>
+ <action selector="ptzControlButtonTouchDown:" destination="uBF-Yq-Qo0" eventType="touchDown" id="cSg-Lv-heL"/>
+ <action selector="ptzControlButtonTouchUpInside:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Kde-Iu-u0r"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YpD-H2-J3L">
+ <rect key="frame" x="162.5" y="71" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="50" id="8xd-ja-amB"/>
+ <constraint firstAttribute="height" constant="50" id="fYS-8a-jfb"/>
+ </constraints>
+ <connections>
+ <action selector="ptzControlButtonTouchDown:" destination="uBF-Yq-Qo0" eventType="touchDown" id="Jna-by-hAL"/>
+ <action selector="ptzControlButtonTouchUpInside:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="UnJ-rv-mKN"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WlW-FZ-jz8">
+ <rect key="frame" x="214.5" y="18" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="50" id="JyV-sT-9Nd"/>
+ <constraint firstAttribute="height" constant="50" id="bVy-Jx-0Yf"/>
+ </constraints>
+ <connections>
+ <action selector="ptzControlButtonTouchDown:" destination="uBF-Yq-Qo0" eventType="touchDown" id="JTa-za-IYF"/>
+ <action selector="ptzControlButtonTouchUpInside:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="qQE-bR-BGo"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="g5e-Uk-Wgs">
+ <rect key="frame" x="110.5" y="19" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="50" id="ZN7-OU-GCA"/>
+ <constraint firstAttribute="height" constant="50" id="et2-oA-SKp"/>
+ </constraints>
+ <connections>
+ <action selector="ptzControlButtonTouchDown:" destination="uBF-Yq-Qo0" eventType="touchDown" id="dUb-me-TLa"/>
+ <action selector="ptzControlButtonTouchUpInside:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="fLI-BA-pIU"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="Un0-bC-uwU" firstAttribute="top" secondItem="Lrx-9r-gJZ" secondAttribute="top" priority="750" id="54o-Gk-b6S"/>
+ <constraint firstItem="g5e-Uk-Wgs" firstAttribute="centerY" secondItem="Lrx-9r-gJZ" secondAttribute="centerY" priority="750" id="B6c-z9-8Z3"/>
+ <constraint firstAttribute="centerY" secondItem="46J-XC-G3M" secondAttribute="bottom" priority="750" constant="27" id="JC3-vr-CVu"/>
+ <constraint firstItem="WlW-FZ-jz8" firstAttribute="leading" secondItem="Lrx-9r-gJZ" secondAttribute="centerX" priority="750" constant="27" id="Lou-j5-1Pd"/>
+ <constraint firstAttribute="trailing" secondItem="Un0-bC-uwU" secondAttribute="trailing" priority="750" id="Sti-kb-CQy"/>
+ <constraint firstItem="cRL-ov-Bad" firstAttribute="centerY" secondItem="Lrx-9r-gJZ" secondAttribute="centerY" priority="750" id="YRB-a6-pUb"/>
+ <constraint firstItem="46J-XC-G3M" firstAttribute="centerX" secondItem="Lrx-9r-gJZ" secondAttribute="centerX" priority="750" id="Yhz-to-Ubw"/>
+ <constraint firstItem="YpD-H2-J3L" firstAttribute="centerX" secondItem="Lrx-9r-gJZ" secondAttribute="centerX" priority="750" id="bcZ-X7-5dx"/>
+ <constraint firstItem="cRL-ov-Bad" firstAttribute="centerX" secondItem="Lrx-9r-gJZ" secondAttribute="centerX" priority="750" id="bfJ-TI-Rsq"/>
+ <constraint firstItem="YpD-H2-J3L" firstAttribute="top" secondItem="Lrx-9r-gJZ" secondAttribute="centerY" priority="750" constant="27" id="eFC-gN-nKT"/>
+ <constraint firstItem="WlW-FZ-jz8" firstAttribute="centerY" secondItem="Lrx-9r-gJZ" secondAttribute="centerY" priority="750" constant="-1" id="etm-6s-8kr"/>
+ <constraint firstAttribute="centerX" secondItem="g5e-Uk-Wgs" secondAttribute="trailing" priority="750" constant="27" id="iRs-7W-6aC"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="IqL-eW-ddl">
+ <rect key="frame" x="0.0" y="287" width="375" height="88"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="j3z-1C-gSQ">
+ <rect key="frame" x="325" y="0.0" width="50" height="50"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="50" id="2sf-D2-cKQ"/>
+ <constraint firstAttribute="width" constant="50" id="reU-yg-Liw"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <state key="normal" image="play_close">
+ <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="highlighted" image="play_close_sel"/>
+ <connections>
+ <action selector="closeTalkView:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="ftP-Gi-Ucl"/>
+ </connections>
+ </button>
+ <imageView contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="preview_talkback" highlightedImage="spkImg" translatesAutoresizingMaskIntoConstraints="NO" id="SdD-om-sXP">
+ <rect key="frame" x="137.5" y="-6" width="100" height="100"/>
+ <gestureRecognizers/>
+ <constraints>
+ <constraint firstAttribute="height" constant="100" id="5Av-B7-ISV"/>
+ <constraint firstAttribute="width" constant="100" id="UDJ-l5-0jj"/>
+ </constraints>
+ <connections>
+ <outletCollection property="gestureRecognizers" destination="ltq-Kf-jdp" appends="YES" id="olW-ao-9WJ"/>
+ </connections>
+ </imageView>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="SdD-om-sXP" firstAttribute="centerX" secondItem="IqL-eW-ddl" secondAttribute="centerX" id="6eQ-63-K20"/>
+ <constraint firstItem="j3z-1C-gSQ" firstAttribute="top" secondItem="IqL-eW-ddl" secondAttribute="top" id="9NY-bI-b6q"/>
+ <constraint firstAttribute="trailing" secondItem="j3z-1C-gSQ" secondAttribute="trailing" id="Qg8-Nn-00G"/>
+ <constraint firstItem="SdD-om-sXP" firstAttribute="centerY" secondItem="IqL-eW-ddl" secondAttribute="centerY" id="rol-jB-yzQ"/>
+ </constraints>
+ </view>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xQS-rQ-Xez">
+ <rect key="frame" x="197.5" y="187.5" width="100" height="100"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="100" id="Gjc-CC-41w"/>
+ <constraint firstAttribute="height" constant="100" id="Kpb-pS-Xes"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="褰曞儚" image="preview_recording">
+ <color key="titleColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="disabled" image="preview_recording_dis"/>
+ <state key="selected" image="preview_recording_sel"/>
+ <state key="highlighted" image="preview_recording_sel"/>
+ <connections>
+ <action selector="localButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="ghH-Hn-KkG"/>
+ </connections>
+ </button>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WYB-ca-Ox6">
+ <rect key="frame" x="323" y="20" width="32" height="32"/>
+ <state key="normal" image="cloud"/>
+ <connections>
+ <action selector="clickCloudBtn:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Ft8-PW-PT5"/>
+ </connections>
+ </button>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="浜戝瓨鍌�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wXb-RI-dLd">
+ <rect key="frame" x="319" y="52" width="40" height="16"/>
+ <fontDescription key="fontDescription" type="system" pointSize="13"/>
+ <color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="纭В鐮�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oNR-gT-NPm">
+ <rect key="frame" x="8" y="8" width="37" height="14.5"/>
+ <fontDescription key="fontDescription" type="system" pointSize="12"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="X2B-Km-Emd">
+ <rect key="frame" x="327" y="87" width="24" height="24"/>
+ <state key="normal" backgroundImage="StreamStudio-2"/>
+ <state key="selected" backgroundImage="chuanshujilu--2"/>
+ <connections>
+ <action selector="clickStreamBtn:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="SWh-1d-pGr"/>
+ </connections>
+ </button>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5WH-Ih-9Yw">
+ <rect key="frame" x="8" y="32.5" width="31" height="15"/>
+ <fontDescription key="fontDescription" type="system" pointSize="12"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="bottom" secondItem="Lrx-9r-gJZ" secondAttribute="bottom" id="1Qx-tP-K0s"/>
+ <constraint firstItem="wEO-O3-gSJ" firstAttribute="top" secondItem="fUI-tR-jyG" secondAttribute="bottom" priority="250" id="2zd-sl-7ZI"/>
+ <constraint firstAttribute="centerY" secondItem="fUI-tR-jyG" secondAttribute="top" priority="250" constant="100" id="4p2-rr-TGl"/>
+ <constraint firstItem="4Eh-hh-84T" firstAttribute="leading" secondItem="fUI-tR-jyG" secondAttribute="trailing" priority="250" constant="20" id="5ta-Jr-LcA"/>
+ <constraint firstItem="fUI-tR-jyG" firstAttribute="trailing" secondItem="7Gq-77-ypg" secondAttribute="centerX" priority="250" constant="-10" id="656-5B-ekl"/>
+ <constraint firstItem="IqL-eW-ddl" firstAttribute="leading" secondItem="7Gq-77-ypg" secondAttribute="leading" priority="750" id="8LC-eV-05C"/>
+ <constraint firstItem="oNR-gT-NPm" firstAttribute="leading" secondItem="7Gq-77-ypg" secondAttribute="leading" constant="8" id="9Ds-Ki-Rud"/>
+ <constraint firstItem="wXb-RI-dLd" firstAttribute="top" secondItem="WYB-ca-Ox6" secondAttribute="bottom" id="9Mu-5s-lbJ"/>
+ <constraint firstAttribute="trailing" secondItem="IqL-eW-ddl" secondAttribute="trailing" priority="750" id="AU9-VP-gIS"/>
+ <constraint firstItem="X2B-Km-Emd" firstAttribute="top" secondItem="wXb-RI-dLd" secondAttribute="bottom" constant="19" id="Bct-NX-l16"/>
+ <constraint firstItem="Lrx-9r-gJZ" firstAttribute="leading" secondItem="7Gq-77-ypg" secondAttribute="leading" priority="750" id="CLz-G3-usS"/>
+ <constraint firstItem="xQS-rQ-Xez" firstAttribute="top" secondItem="4Eh-hh-84T" secondAttribute="bottom" priority="250" id="ChR-na-m9f"/>
+ <constraint firstItem="X2B-Km-Emd" firstAttribute="centerX" secondItem="wXb-RI-dLd" secondAttribute="centerX" id="DSU-sp-o9u"/>
+ <constraint firstItem="5WH-Ih-9Yw" firstAttribute="leading" secondItem="oNR-gT-NPm" secondAttribute="leading" id="Df9-NZ-c56"/>
+ <constraint firstItem="4Eh-hh-84T" firstAttribute="top" secondItem="fUI-tR-jyG" secondAttribute="top" priority="250" id="Dwr-ff-Xpd"/>
+ <constraint firstItem="WYB-ca-Ox6" firstAttribute="top" secondItem="7Gq-77-ypg" secondAttribute="top" constant="20" id="Gur-C3-MNq"/>
+ <constraint firstAttribute="bottom" secondItem="IqL-eW-ddl" secondAttribute="bottom" id="Hr3-33-Biv"/>
+ <constraint firstItem="IqL-eW-ddl" firstAttribute="top" secondItem="7Gq-77-ypg" secondAttribute="top" priority="750" constant="287" id="IcU-Zd-4MD"/>
+ <constraint firstItem="wXb-RI-dLd" firstAttribute="centerX" secondItem="WYB-ca-Ox6" secondAttribute="centerX" id="K7C-mh-05P"/>
+ <constraint firstAttribute="trailing" secondItem="WYB-ca-Ox6" secondAttribute="trailing" constant="20" id="UDa-kD-WGc"/>
+ <constraint firstItem="xQS-rQ-Xez" firstAttribute="leading" secondItem="wEO-O3-gSJ" secondAttribute="trailing" priority="250" constant="20" id="XcG-14-Ntg"/>
+ <constraint firstItem="Lrx-9r-gJZ" firstAttribute="top" secondItem="7Gq-77-ypg" secondAttribute="top" priority="750" constant="287" id="fpM-bl-0VS"/>
+ <constraint firstItem="oNR-gT-NPm" firstAttribute="top" secondItem="7Gq-77-ypg" secondAttribute="top" constant="8" id="g6p-Bd-Y1V"/>
+ <constraint firstAttribute="trailing" secondItem="Lrx-9r-gJZ" secondAttribute="trailing" priority="750" id="g8l-zu-mnf"/>
+ <constraint firstItem="5WH-Ih-9Yw" firstAttribute="top" secondItem="oNR-gT-NPm" secondAttribute="bottom" constant="10" id="nqI-Fr-Meo"/>
+ <constraint firstItem="wEO-O3-gSJ" firstAttribute="leading" secondItem="fUI-tR-jyG" secondAttribute="leading" priority="250" id="rZn-id-4zF"/>
+ <constraint firstItem="xQS-rQ-Xez" firstAttribute="top" secondItem="4Eh-hh-84T" secondAttribute="bottom" priority="250" id="w6w-WA-yEe"/>
+ <constraint firstItem="wEO-O3-gSJ" firstAttribute="top" secondItem="fUI-tR-jyG" secondAttribute="bottom" priority="250" id="xHk-cr-HsT"/>
+ </constraints>
+ </view>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="nkn-oC-NfP">
+ <rect key="frame" x="0.0" y="44" width="40" height="40"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="WQV-Fb-Hpn"/>
+ <constraint firstAttribute="width" constant="40" id="rqc-sI-jaX"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <state key="normal" image="large_back_btn"/>
+ <connections>
+ <action selector="largeBack:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Pup-Sq-Zr5"/>
+ </connections>
+ </button>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yYv-tJ-QCV">
+ <rect key="frame" x="160.5" y="122.5" width="54" height="54"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="54" id="TXE-KQ-iJl"/>
+ <constraint firstAttribute="height" constant="54" id="nqy-4G-kEq"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <state key="normal" image="play"/>
+ <state key="highlighted" image="play_sel"/>
+ <connections>
+ <action selector="playButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Ujr-Nu-Y44"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="YwB-6z-DKL">
+ <rect key="frame" x="0.0" y="134.5" width="375" height="30"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="30" id="eMk-ij-ZRD"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" alpha="0.69999999999999996" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3XK-Ur-ZIj">
+ <rect key="frame" x="16" y="139" width="0.0" height="0.0"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="Yrc-c9-rvb" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" constant="10" id="0Cf-Q8-Mwq"/>
+ <constraint firstAttribute="trailing" secondItem="YwB-6z-DKL" secondAttribute="trailing" id="0oZ-sb-kgM"/>
+ <constraint firstItem="YwB-6z-DKL" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="135-mO-STg"/>
+ <constraint firstItem="7Gq-77-ypg" firstAttribute="top" secondItem="1FE-Su-4U4" secondAttribute="bottom" priority="751" id="4Dh-L5-Wxp"/>
+ <constraint firstItem="YwB-6z-DKL" firstAttribute="centerX" secondItem="PYB-vu-Xcw" secondAttribute="centerX" id="58C-Bi-adb"/>
+ <constraint firstItem="dTs-1h-o4p" firstAttribute="centerX" secondItem="PYB-vu-Xcw" secondAttribute="centerX" id="7Nq-GR-ypc"/>
+ <constraint firstAttribute="trailing" secondItem="1FE-Su-4U4" secondAttribute="trailing" id="9po-jh-PJt"/>
+ <constraint firstItem="1FE-Su-4U4" firstAttribute="top" secondItem="NRj-hs-uOI" secondAttribute="bottom" id="Aeo-vo-x5Y"/>
+ <constraint firstAttribute="trailing" secondItem="NRj-hs-uOI" secondAttribute="trailing" id="G3Q-MC-BpN"/>
+ <constraint firstItem="2bL-GF-xWw" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" id="JNG-uc-9XA"/>
+ <constraint firstItem="NRj-hs-uOI" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" id="PXn-FW-8dk"/>
+ <constraint firstItem="3qm-Zv-a7S" firstAttribute="top" secondItem="7Gq-77-ypg" secondAttribute="bottom" id="PfJ-VS-6RB"/>
+ <constraint firstItem="1FE-Su-4U4" firstAttribute="top" secondItem="dTs-1h-o4p" secondAttribute="bottom" id="Qae-km-Xxm"/>
+ <constraint firstItem="NRj-hs-uOI" firstAttribute="centerY" secondItem="yYv-tJ-QCV" secondAttribute="centerY" id="TGA-a5-AUm"/>
+ <constraint firstItem="nkn-oC-NfP" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" id="Tn0-Se-wHE"/>
+ <constraint firstItem="nkn-oC-NfP" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="YSp-TA-bZd"/>
+ <constraint firstItem="yYv-tJ-QCV" firstAttribute="centerX" secondItem="YwB-6z-DKL" secondAttribute="centerX" id="Yt6-5R-nAw"/>
+ <constraint firstItem="2bL-GF-xWw" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="adY-eM-6Nb"/>
+ <constraint firstItem="NRj-hs-uOI" firstAttribute="centerY" secondItem="YwB-6z-DKL" secondAttribute="centerY" id="cjf-nt-XqE"/>
+ <constraint firstItem="3qm-Zv-a7S" firstAttribute="top" secondItem="gFl-PI-CLn" secondAttribute="bottom" id="fSZ-Xw-PGz"/>
+ <constraint firstItem="gFl-PI-CLn" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="hvI-bX-2fD"/>
+ <constraint firstItem="3XK-Ur-ZIj" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" constant="16" id="hya-DL-nrl"/>
+ <constraint firstItem="1FE-Su-4U4" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="mfp-Y3-aJF"/>
+ <constraint firstItem="7Gq-77-ypg" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="nIY-1B-8KJ"/>
+ <constraint firstItem="NRj-hs-uOI" firstAttribute="leading" secondItem="PYB-vu-Xcw" secondAttribute="leading" id="opo-g8-z05"/>
+ <constraint firstAttribute="trailing" secondItem="7Gq-77-ypg" secondAttribute="trailing" id="pjs-uX-99u"/>
+ <constraint firstAttribute="trailing" secondItem="2bL-GF-xWw" secondAttribute="trailing" id="sJ1-Mt-Ys4"/>
+ <constraint firstItem="gFl-PI-CLn" firstAttribute="top" secondItem="heE-pR-PSR" secondAttribute="bottom" id="sJh-Px-GtM"/>
+ <constraint firstAttribute="trailing" secondItem="gFl-PI-CLn" secondAttribute="trailing" id="vZX-0k-C1e"/>
+ <constraint firstItem="3XK-Ur-ZIj" firstAttribute="top" secondItem="2bL-GF-xWw" secondAttribute="bottom" constant="55" id="vyg-ls-OTR"/>
+ <constraint firstItem="Yrc-c9-rvb" firstAttribute="centerX" secondItem="PYB-vu-Xcw" secondAttribute="centerX" id="y5l-xh-jsd"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="vpB-aG-zb3"/>
+ <connections>
+ <outlet property="bottomView" destination="7Gq-77-ypg" id="kLP-FN-Tvv"/>
+ <outlet property="captureButton" destination="wEO-O3-gSJ" id="ABn-Ub-QEs"/>
+ <outlet property="cloudBtn" destination="WYB-ca-Ox6" id="E4S-1L-4uS"/>
+ <outlet property="cloudTip" destination="wXb-RI-dLd" id="bCu-fP-8IF"/>
+ <outlet property="controlButton" destination="fUI-tR-jyG" id="uqI-1T-h8V"/>
+ <outlet property="currentHDStatus" destination="oNR-gT-NPm" id="STe-rh-VhG"/>
+ <outlet property="emptyButton" destination="MqM-GF-jSr" id="jD7-hz-yfd"/>
+ <outlet property="highButton" destination="skK-Ar-y6h" id="jbk-j5-fCX"/>
+ <outlet property="largeBackButton" destination="nkn-oC-NfP" id="kwo-DU-hgk"/>
+ <outlet property="largeButton" destination="lTh-qe-8pV" id="feK-gX-fjt"/>
+ <outlet property="largeTitleLabel" destination="2bL-GF-xWw" id="mev-Ko-lDT"/>
+ <outlet property="localRecordButton" destination="xQS-rQ-Xez" id="Z0M-JE-cTx"/>
+ <outlet property="localRecordLabel" destination="Yrc-c9-rvb" id="1z2-Zz-9nr"/>
+ <outlet property="localRecrodContraint" destination="0Cf-Q8-Mwq" id="c08-mO-Xbr"/>
+ <outlet property="lowButton" destination="UlQ-aK-1VP" id="ISE-DJ-W5I"/>
+ <outlet property="messageLabel" destination="YwB-6z-DKL" id="196-Ds-Vl6"/>
+ <outlet property="middleButton" destination="WSh-Ao-McO" id="vty-N8-cDz"/>
+ <outlet property="playButton" destination="xSp-4i-Jwh" id="DUU-ap-reQ"/>
+ <outlet property="playerPlayButton" destination="yYv-tJ-QCV" id="EIB-lc-14l"/>
+ <outlet property="playerView" destination="1Xz-5f-ZJx" id="tYS-5X-mCe"/>
+ <outlet property="ptzCloseButton" destination="Un0-bC-uwU" id="pBM-jg-Hsv"/>
+ <outlet property="ptzControlButton" destination="cRL-ov-Bad" id="dO9-KY-Fpn"/>
+ <outlet property="ptzDownButton" destination="YpD-H2-J3L" id="9Hs-IT-QQk"/>
+ <outlet property="ptzLeftButton" destination="g5e-Uk-Wgs" id="fki-ie-i36"/>
+ <outlet property="ptzRightButton" destination="WlW-FZ-jz8" id="iaG-Q2-Wi2"/>
+ <outlet property="ptzUpButton" destination="46J-XC-G3M" id="Ixx-Pf-YV3"/>
+ <outlet property="ptzView" destination="Lrx-9r-gJZ" id="Ow3-oS-CtM"/>
+ <outlet property="ptzViewContraint" destination="fpM-bl-0VS" id="hPO-oy-rgu"/>
+ <outlet property="qualityButton" destination="JEB-Q6-XNh" id="z41-pC-jcF"/>
+ <outlet property="qualityView" destination="dTs-1h-o4p" id="cwe-H0-P0z"/>
+ <outlet property="scrollView" destination="NRj-hs-uOI" id="eoY-a5-7Nt"/>
+ <outlet property="speakImageView" destination="SdD-om-sXP" id="vut-X7-g34"/>
+ <outlet property="streamPlayBtn" destination="X2B-Km-Emd" id="wjk-zR-FDC"/>
+ <outlet property="streamTypeLabel" destination="5WH-Ih-9Yw" id="azv-2u-5FX"/>
+ <outlet property="talkButton" destination="4Eh-hh-84T" id="XX0-Zw-Ftd"/>
+ <outlet property="talkCloseButton" destination="j3z-1C-gSQ" id="7jR-OW-01U"/>
+ <outlet property="talkView" destination="IqL-eW-ddl" id="hTy-iu-CUA"/>
+ <outlet property="talkViewContraint" destination="IcU-Zd-4MD" id="vMR-vH-k7J"/>
+ <outlet property="toolBar" destination="1FE-Su-4U4" id="CTH-vb-IfL"/>
+ <outlet property="voiceButton" destination="tAW-X2-E9K" id="N5O-Qz-qd6"/>
+ <outlet property="zoomSizeLabel" destination="3XK-Ur-ZIj" id="vYD-CM-uoE"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="XkP-ug-XyL" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ <tapGestureRecognizer id="ltq-Kf-jdp">
+ <connections>
+ <action selector="talkPressed:" destination="uBF-Yq-Qo0" id="9nW-Qf-Oh1"/>
+ </connections>
+ </tapGestureRecognizer>
+ </objects>
+ <point key="canvasLocation" x="2170.4000000000001" y="-23.838080959520241"/>
+ </scene>
+ <!--Playback View Controller-->
+ <scene sceneID="eUQ-yT-QiD">
+ <objects>
+ <viewController storyboardIdentifier="EZPlaybackViewController" id="I6z-uV-dEU" customClass="EZPlaybackViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="0R4-Gk-cpw"/>
+ <viewControllerLayoutGuide type="bottom" id="37Q-1L-JHq"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="6jg-tf-s0b">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kQU-Pc-qqv">
+ <rect key="frame" x="0.0" y="44" width="375" height="211"/>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <gestureRecognizers/>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="kQU-Pc-qqv" secondAttribute="height" multiplier="16:9" id="0Wa-du-utY"/>
+ </constraints>
+ <connections>
+ <outletCollection property="gestureRecognizers" destination="znC-g9-QOc" appends="YES" id="Rsv-hA-OU9"/>
+ </connections>
+ </view>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SJH-Sa-TMv">
+ <rect key="frame" x="0.0" y="44" width="375" height="40"/>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="o94-Gh-tdc"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3j6-e7-ztE">
+ <rect key="frame" x="0.0" y="255" width="375" height="44"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Bu9-Qz-3Ij">
+ <rect key="frame" x="187.5" y="0.0" width="187.5" height="44"/>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="SD鍗″綍鍍�">
+ <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="selected">
+ <color key="titleColor" red="0.10859914124011993" green="0.54394680261611938" blue="0.85770881175994873" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="highlighted">
+ <color key="titleColor" red="0.10859914124011993" green="0.54394680261611938" blue="0.85770881175994873" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="deviceButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="klD-8b-xvO"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="E3a-LC-jG1">
+ <rect key="frame" x="0.0" y="0.0" width="187.5" height="44"/>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="浜戝瓨鍌�">
+ <color key="titleColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="selected">
+ <color key="titleColor" red="0.10859914124011993" green="0.54394680261611938" blue="0.85770881175994873" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="highlighted">
+ <color key="titleColor" red="0.10859914124011993" green="0.54394680261611938" blue="0.85770881175994873" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="cloudButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="wfa-2r-mE4"/>
+ </connections>
+ </button>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="o6e-rL-gRl">
+ <rect key="frame" x="44" y="42" width="100" height="2"/>
+ <color key="backgroundColor" red="0.10859914124011993" green="0.54394680261611938" blue="0.85770881175994873" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="2" id="6MV-Yf-u0v"/>
+ <constraint firstAttribute="width" constant="100" id="tRm-sK-AEy"/>
+ </constraints>
+ </imageView>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="E3a-LC-jG1" firstAttribute="top" secondItem="3j6-e7-ztE" secondAttribute="top" id="27O-8F-zGo"/>
+ <constraint firstItem="E3a-LC-jG1" firstAttribute="leading" secondItem="3j6-e7-ztE" secondAttribute="leading" id="6fJ-x7-f2s"/>
+ <constraint firstAttribute="height" constant="44" id="U3c-fO-8g1"/>
+ <constraint firstAttribute="bottom" secondItem="Bu9-Qz-3Ij" secondAttribute="bottom" id="d3E-fM-Rgx"/>
+ <constraint firstAttribute="bottom" secondItem="o6e-rL-gRl" secondAttribute="bottom" id="dof-FH-aUf"/>
+ <constraint firstAttribute="trailing" secondItem="Bu9-Qz-3Ij" secondAttribute="trailing" id="fYI-cL-36a"/>
+ <constraint firstItem="Bu9-Qz-3Ij" firstAttribute="leading" secondItem="E3a-LC-jG1" secondAttribute="trailing" id="htQ-Ki-sMp"/>
+ <constraint firstAttribute="bottom" secondItem="E3a-LC-jG1" secondAttribute="bottom" id="lRb-bP-hv0"/>
+ <constraint firstItem="o6e-rL-gRl" firstAttribute="centerX" secondItem="E3a-LC-jG1" secondAttribute="centerX" id="oxC-bm-Nxp"/>
+ <constraint firstItem="Bu9-Qz-3Ij" firstAttribute="width" secondItem="E3a-LC-jG1" secondAttribute="width" id="pnZ-lj-8jS"/>
+ <constraint firstItem="Bu9-Qz-3Ij" firstAttribute="top" secondItem="3j6-e7-ztE" secondAttribute="top" id="ptS-eh-XSH"/>
+ </constraints>
+ </view>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hY1-Ac-Oot">
+ <rect key="frame" x="0.0" y="44" width="40" height="40"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="AFV-2p-wo1"/>
+ <constraint firstAttribute="width" constant="40" id="h15-cw-wZH"/>
+ </constraints>
+ <state key="normal" image="large_back_btn"/>
+ <connections>
+ <action selector="largeBack:" destination="I6z-uV-dEU" eventType="touchUpInside" id="E4s-vE-mXI"/>
+ </connections>
+ </button>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="buq-PS-h5p">
+ <rect key="frame" x="0.0" y="195" width="375" height="60"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Z3E-1u-wEn">
+ <rect key="frame" x="0.0" y="23" width="60" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="BNn-Tm-SaF"/>
+ <constraint firstAttribute="width" constant="60" id="mZh-Ks-yHR"/>
+ </constraints>
+ <state key="normal" image="preview_play_btn"/>
+ <connections>
+ <action selector="playButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="nzq-1I-c5F"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="t6K-Cq-gMh">
+ <rect key="frame" x="60" y="23" width="60" height="37"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="60" id="PRG-n5-0Ed"/>
+ <constraint firstAttribute="height" constant="37" id="nC8-FN-WAT"/>
+ </constraints>
+ <state key="normal" image="preview_voice_btn"/>
+ <connections>
+ <action selector="voiceButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="aAV-1Z-FGI"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7aB-y0-gtH">
+ <rect key="frame" x="315" y="23" width="60" height="37"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="60" id="XfK-j2-a6d"/>
+ <constraint firstAttribute="height" constant="37" id="o7j-tw-1vI"/>
+ </constraints>
+ <state key="normal" image="preview_enlarge"/>
+ <state key="highlighted" image="preview_enlarge_btn_sel"/>
+ <connections>
+ <action selector="large:" destination="I6z-uV-dEU" eventType="touchUpInside" id="gJE-qX-38a"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ruu-Hg-3Tx">
+ <rect key="frame" x="0.0" y="0.0" width="34" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="0Xh-uc-DaE"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="12"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <slider opaque="NO" contentMode="scaleToFill" semanticContentAttribute="playback" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="e5d-g8-Knj">
+ <rect key="frame" x="35.5" y="-5" width="303.5" height="31"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="30" id="4zL-xp-G9T"/>
+ </constraints>
+ <color key="thumbTintColor" red="0.10859914124011993" green="0.54394680261611938" blue="0.85770881175994873" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <connections>
+ <action selector="duringValueChange:" destination="I6z-uV-dEU" eventType="touchUpInside" id="I9w-HO-pCv"/>
+ </connections>
+ </slider>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ESG-x4-J8R">
+ <rect key="frame" x="341" y="0.0" width="34" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="2SN-fe-EDR"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="12"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ej7-SD-EGu">
+ <rect key="frame" x="120" y="23" width="60" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="gaR-jU-rDU"/>
+ <constraint firstAttribute="width" constant="60" id="hDY-tf-ODd"/>
+ </constraints>
+ <state key="normal" image="play_rate"/>
+ <connections>
+ <action selector="clickRateBtn:" destination="I6z-uV-dEU" eventType="touchUpInside" id="XwB-R2-Aun"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gRk-Pf-zJ6">
+ <rect key="frame" x="290" y="30" width="20" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="9fx-g9-N3E"/>
+ <constraint firstAttribute="width" constant="20" id="J09-k3-gR7"/>
+ </constraints>
+ <state key="normal" backgroundImage="StreamStudio"/>
+ <state key="selected" backgroundImage="chuanshujilu-"/>
+ <connections>
+ <action selector="clickStreamBtn:" destination="I6z-uV-dEU" eventType="touchUpInside" id="XrC-J3-i4l"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="Z3E-1u-wEn" firstAttribute="leading" secondItem="buq-PS-h5p" secondAttribute="leading" id="1R2-0e-zLb"/>
+ <constraint firstItem="t6K-Cq-gMh" firstAttribute="leading" secondItem="Z3E-1u-wEn" secondAttribute="trailing" id="4m4-IR-mc0"/>
+ <constraint firstItem="ruu-Hg-3Tx" firstAttribute="leading" secondItem="buq-PS-h5p" secondAttribute="leading" id="7Mx-RJ-l3f"/>
+ <constraint firstAttribute="bottom" secondItem="7aB-y0-gtH" secondAttribute="bottom" id="7tH-jm-Tc8"/>
+ <constraint firstItem="7aB-y0-gtH" firstAttribute="leading" secondItem="gRk-Pf-zJ6" secondAttribute="trailing" constant="5" id="8Ex-wx-3ye"/>
+ <constraint firstItem="ruu-Hg-3Tx" firstAttribute="top" secondItem="buq-PS-h5p" secondAttribute="top" id="Er7-IE-Hng"/>
+ <constraint firstItem="e5d-g8-Knj" firstAttribute="leading" secondItem="ruu-Hg-3Tx" secondAttribute="trailing" constant="3.5" id="P23-Qx-aw5"/>
+ <constraint firstItem="Ej7-SD-EGu" firstAttribute="centerY" secondItem="t6K-Cq-gMh" secondAttribute="centerY" id="Ppi-XZ-Pvb"/>
+ <constraint firstItem="ESG-x4-J8R" firstAttribute="top" secondItem="buq-PS-h5p" secondAttribute="top" id="Pxo-mC-azU"/>
+ <constraint firstAttribute="bottom" secondItem="t6K-Cq-gMh" secondAttribute="bottom" id="TlR-1T-jdW"/>
+ <constraint firstItem="ESG-x4-J8R" firstAttribute="leading" secondItem="e5d-g8-Knj" secondAttribute="trailing" constant="4" id="UZA-Gk-8yQ"/>
+ <constraint firstAttribute="bottom" secondItem="Z3E-1u-wEn" secondAttribute="bottom" id="i3E-OX-iln"/>
+ <constraint firstItem="ESG-x4-J8R" firstAttribute="width" secondItem="ruu-Hg-3Tx" secondAttribute="width" id="lZC-MU-A3Y"/>
+ <constraint firstItem="Ej7-SD-EGu" firstAttribute="leading" secondItem="t6K-Cq-gMh" secondAttribute="trailing" id="of7-XD-uI1"/>
+ <constraint firstAttribute="bottom" secondItem="gRk-Pf-zJ6" secondAttribute="bottom" constant="10" id="pO2-v2-n1y"/>
+ <constraint firstItem="e5d-g8-Knj" firstAttribute="centerY" secondItem="ESG-x4-J8R" secondAttribute="centerY" id="pTj-gC-TCd"/>
+ <constraint firstAttribute="height" constant="60" id="tMQ-jL-rdi"/>
+ <constraint firstAttribute="trailing" secondItem="ESG-x4-J8R" secondAttribute="trailing" id="vMR-I6-RPC"/>
+ <constraint firstAttribute="trailing" secondItem="7aB-y0-gtH" secondAttribute="trailing" id="vXW-8l-Y0i"/>
+ </constraints>
+ </view>
+ <collectionView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" dataMode="prototypes" translatesAutoresizingMaskIntoConstraints="NO" id="jim-qG-8NV">
+ <rect key="frame" x="0.0" y="299" width="375" height="368"/>
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <collectionViewFlowLayout key="collectionViewLayout" minimumLineSpacing="1" minimumInteritemSpacing="1" id="rBI-Vc-Dgo">
+ <size key="itemSize" width="106" height="80"/>
+ <size key="headerReferenceSize" width="0.0" height="0.0"/>
+ <size key="footerReferenceSize" width="0.0" height="0.0"/>
+ <inset key="sectionInset" minX="0.0" minY="0.0" maxX="0.0" maxY="0.0"/>
+ </collectionViewFlowLayout>
+ <cells>
+ <collectionViewCell opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" reuseIdentifier="RecordCell" id="RGd-D5-AuH" customClass="EZRecordCell">
+ <rect key="frame" x="0.0" y="0.0" width="106" height="80"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <view key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center">
+ <rect key="frame" x="0.0" y="0.0" width="106" height="80"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="RAf-ZJ-cA4">
+ <rect key="frame" x="5" y="5" width="96" height="54"/>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="RAf-ZJ-cA4" secondAttribute="height" multiplier="16:9" id="BF0-NY-eA0"/>
+ </constraints>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="9:00" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UHi-Q3-DiS">
+ <rect key="frame" x="5" y="59" width="96" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="ZKH-0e-YF1"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ZIg-yn-0X2">
+ <rect key="frame" x="81" y="60" width="20" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="8Bf-mj-T2z"/>
+ <constraint firstAttribute="width" constant="20" id="X18-v9-UpS"/>
+ </constraints>
+ <state key="normal" backgroundImage="icon_download_fill"/>
+ <connections>
+ <action selector="clickDownloadBtn:" destination="RGd-D5-AuH" eventType="touchUpInside" id="hGG-35-w9L"/>
+ </connections>
+ </button>
+ </subviews>
+ </view>
+ <constraints>
+ <constraint firstAttribute="trailing" secondItem="RAf-ZJ-cA4" secondAttribute="trailing" constant="5" id="058-0j-pFi"/>
+ <constraint firstItem="UHi-Q3-DiS" firstAttribute="top" secondItem="RAf-ZJ-cA4" secondAttribute="bottom" id="0dX-Yd-K5a"/>
+ <constraint firstAttribute="trailing" secondItem="UHi-Q3-DiS" secondAttribute="trailing" constant="5" id="60b-dd-X7i"/>
+ <constraint firstAttribute="trailing" secondItem="ZIg-yn-0X2" secondAttribute="trailing" constant="5" id="VwM-m6-cIf"/>
+ <constraint firstItem="RAf-ZJ-cA4" firstAttribute="leading" secondItem="RGd-D5-AuH" secondAttribute="leading" constant="5" id="Vy4-Re-M6J"/>
+ <constraint firstItem="UHi-Q3-DiS" firstAttribute="leading" secondItem="RGd-D5-AuH" secondAttribute="leading" constant="5" id="nB3-ow-NuN"/>
+ <constraint firstItem="RAf-ZJ-cA4" firstAttribute="top" secondItem="RGd-D5-AuH" secondAttribute="top" constant="5" id="rQw-Mf-4sZ"/>
+ <constraint firstAttribute="bottom" secondItem="ZIg-yn-0X2" secondAttribute="bottom" id="z5D-m5-IEK"/>
+ </constraints>
+ <connections>
+ <outlet property="downloadBtn" destination="ZIg-yn-0X2" id="lle-UI-ZQ8"/>
+ <outlet property="imageView" destination="RAf-ZJ-cA4" id="veW-nv-l2v"/>
+ <outlet property="timeLabel" destination="UHi-Q3-DiS" id="KhY-hH-jGY"/>
+ </connections>
+ </collectionViewCell>
+ </cells>
+ <connections>
+ <outlet property="dataSource" destination="I6z-uV-dEU" id="YTa-Q8-Fhz"/>
+ <outlet property="delegate" destination="I6z-uV-dEU" id="Dui-l6-Z8k"/>
+ </connections>
+ </collectionView>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="no_video" translatesAutoresizingMaskIntoConstraints="NO" id="KsP-XU-bB0">
+ <rect key="frame" x="140.5" y="361" width="94" height="94"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="94" id="aF8-gn-fXB"/>
+ <constraint firstAttribute="width" constant="94" id="kaI-f1-60h"/>
+ </constraints>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="绌虹┖濡備篃" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pg3-8C-ucI">
+ <rect key="frame" x="137.5" y="465" width="100" height="20"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="100" id="lIY-Ce-8Ca"/>
+ <constraint firstAttribute="height" constant="20" id="zIg-E3-en7"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ihF-af-cva">
+ <rect key="frame" x="338.5" y="54" width="26.5" height="12"/>
+ <fontDescription key="fontDescription" type="system" pointSize="10"/>
+ <color key="textColor" systemColor="systemRedColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="3j6-e7-ztE" firstAttribute="top" secondItem="buq-PS-h5p" secondAttribute="bottom" id="3Mc-Kc-zIp"/>
+ <constraint firstItem="kQU-Pc-qqv" firstAttribute="leading" secondItem="6jg-tf-s0b" secondAttribute="leading" id="3Sz-uF-O8o"/>
+ <constraint firstItem="ihF-af-cva" firstAttribute="top" secondItem="0R4-Gk-cpw" secondAttribute="bottom" constant="10" id="4k9-qQ-Y1T"/>
+ <constraint firstItem="hY1-Ac-Oot" firstAttribute="top" secondItem="0R4-Gk-cpw" secondAttribute="bottom" id="9Ug-e9-Uoo"/>
+ <constraint firstAttribute="trailing" secondItem="SJH-Sa-TMv" secondAttribute="trailing" id="DEn-Yl-3tq"/>
+ <constraint firstItem="SJH-Sa-TMv" firstAttribute="top" secondItem="0R4-Gk-cpw" secondAttribute="bottom" id="HT2-C4-AZF"/>
+ <constraint firstItem="pg3-8C-ucI" firstAttribute="centerX" secondItem="KsP-XU-bB0" secondAttribute="centerX" id="M6E-SJ-WIb"/>
+ <constraint firstItem="jim-qG-8NV" firstAttribute="leading" secondItem="6jg-tf-s0b" secondAttribute="leading" priority="750" id="MM9-Au-SHa"/>
+ <constraint firstItem="pg3-8C-ucI" firstAttribute="centerX" secondItem="6jg-tf-s0b" secondAttribute="centerX" id="NQC-uO-jWc"/>
+ <constraint firstItem="kQU-Pc-qqv" firstAttribute="top" secondItem="0R4-Gk-cpw" secondAttribute="bottom" id="OXa-qo-Lsw"/>
+ <constraint firstItem="buq-PS-h5p" firstAttribute="leading" secondItem="6jg-tf-s0b" secondAttribute="leading" id="OsY-kO-MRO"/>
+ <constraint firstItem="KsP-XU-bB0" firstAttribute="centerX" secondItem="6jg-tf-s0b" secondAttribute="centerX" id="Q5m-B0-oCq"/>
+ <constraint firstItem="37Q-1L-JHq" firstAttribute="top" secondItem="jim-qG-8NV" secondAttribute="bottom" priority="750" id="RsB-sO-mlP"/>
+ <constraint firstAttribute="trailing" secondItem="3j6-e7-ztE" secondAttribute="trailing" id="YKO-sP-hff"/>
+ <constraint firstItem="pg3-8C-ucI" firstAttribute="top" secondItem="KsP-XU-bB0" secondAttribute="bottom" constant="10" id="b75-Vp-dDd"/>
+ <constraint firstItem="hY1-Ac-Oot" firstAttribute="leading" secondItem="6jg-tf-s0b" secondAttribute="leading" id="dR6-0O-enX"/>
+ <constraint firstAttribute="trailing" secondItem="kQU-Pc-qqv" secondAttribute="trailing" id="gHU-T0-W7K"/>
+ <constraint firstItem="3j6-e7-ztE" firstAttribute="leading" secondItem="6jg-tf-s0b" secondAttribute="leading" id="gcY-Ef-gk6"/>
+ <constraint firstAttribute="trailing" secondItem="jim-qG-8NV" secondAttribute="trailing" priority="750" id="hqn-nx-fIj"/>
+ <constraint firstItem="KsP-XU-bB0" firstAttribute="top" secondItem="3j6-e7-ztE" secondAttribute="bottom" constant="62" id="kZI-9D-bd3"/>
+ <constraint firstAttribute="trailing" secondItem="ihF-af-cva" secondAttribute="trailing" constant="10" id="mtn-nO-5qu"/>
+ <constraint firstAttribute="trailing" secondItem="buq-PS-h5p" secondAttribute="trailing" id="qAj-RS-bdT"/>
+ <constraint firstItem="3j6-e7-ztE" firstAttribute="top" secondItem="kQU-Pc-qqv" secondAttribute="bottom" id="tGf-lM-bPe"/>
+ <constraint firstItem="SJH-Sa-TMv" firstAttribute="leading" secondItem="6jg-tf-s0b" secondAttribute="leading" id="xkf-hy-wp1"/>
+ <constraint firstItem="jim-qG-8NV" firstAttribute="top" secondItem="3j6-e7-ztE" secondAttribute="bottom" priority="750" id="zW5-Vq-dsE"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="sif-Bh-S2V">
+ <nil key="title"/>
+ <view key="titleView" contentMode="scaleToFill" id="UjG-SJ-r1Q">
+ <rect key="frame" x="123.5" y="5.5" width="128" height="33"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <subviews>
+ <textField hidden="YES" opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="fpz-XF-SsG">
+ <rect key="frame" x="15" y="1.5" width="100" height="30"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="wgh-Q4-NmD">
+ <rect key="frame" x="0.0" y="1.5" width="128" height="30"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <state key="normal">
+ <color key="titleColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <connections>
+ <action selector="dateButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="blD-SP-xPZ"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
+ </view>
+ </navigationItem>
+ <connections>
+ <outlet property="cloudButton" destination="E3a-LC-jG1" id="w84-9D-fe3"/>
+ <outlet property="dateButton" destination="wgh-Q4-NmD" id="6RC-vg-9e9"/>
+ <outlet property="datePicker" destination="2LL-d5-JwH" id="Pls-Im-jvK"/>
+ <outlet property="dateTextField" destination="fpz-XF-SsG" id="WL6-gA-aBD"/>
+ <outlet property="dateToolbar" destination="MFi-iV-2pJ" id="zVX-ie-4k3"/>
+ <outlet property="deviceButton" destination="Bu9-Qz-3Ij" id="Vjp-T8-uI2"/>
+ <outlet property="duringSlider" destination="e5d-g8-Knj" id="Lpe-ZO-jGT"/>
+ <outlet property="duringTimeLabel" destination="ESG-x4-J8R" id="wb2-WA-Geu"/>
+ <outlet property="largeBackButton" destination="hY1-Ac-Oot" id="3vD-sf-OT1"/>
+ <outlet property="largeButton" destination="7aB-y0-gtH" id="K80-Il-ovl"/>
+ <outlet property="largeTitleLabel" destination="SJH-Sa-TMv" id="Azk-pA-lo4"/>
+ <outlet property="noVideoImageView" destination="KsP-XU-bB0" id="uuy-I7-RjU"/>
+ <outlet property="noVideoLabel" destination="pg3-8C-ucI" id="pWG-m9-pOS"/>
+ <outlet property="playButton" destination="Z3E-1u-wEn" id="kh9-WC-095"/>
+ <outlet property="playTimeLabel" destination="ruu-Hg-3Tx" id="wAa-dH-XNO"/>
+ <outlet property="playbackList" destination="jim-qG-8NV" id="dpb-Sy-z2g"/>
+ <outlet property="playerToolbox" destination="buq-PS-h5p" id="1ue-bg-0Vs"/>
+ <outlet property="playerToolboxConstraint" destination="tMQ-jL-rdi" id="STA-TC-Nan"/>
+ <outlet property="playerView" destination="kQU-Pc-qqv" id="3bN-i4-Fsq"/>
+ <outlet property="rateBtn" destination="Ej7-SD-EGu" id="tQg-wJ-TOV"/>
+ <outlet property="selectedImageView" destination="o6e-rL-gRl" id="kKp-Rj-4xP"/>
+ <outlet property="selectedImageViewConstraint" destination="oxC-bm-Nxp" id="Gf0-Nx-xD8"/>
+ <outlet property="streamPlayBtn" destination="gRk-Pf-zJ6" id="HZ0-EC-KRr"/>
+ <outlet property="streamTypeLabel" destination="ihF-af-cva" id="QG5-YG-QRx"/>
+ <outlet property="toolView" destination="3j6-e7-ztE" id="EVc-wy-QXh"/>
+ <outlet property="voiceButton" destination="t6K-Cq-gMh" id="01u-zp-E0p"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="ns5-vM-KXW" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ <datePicker contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" datePickerMode="date" id="2LL-d5-JwH">
+ <rect key="frame" x="0.0" y="0.0" width="320" height="216"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+ </datePicker>
+ <toolbar opaque="NO" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="MFi-iV-2pJ">
+ <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+ <items>
+ <barButtonItem title="鍙栨秷" id="6Za-cr-nzm">
+ <connections>
+ <action selector="cancel:" destination="I6z-uV-dEU" id="i0b-WR-Dv5"/>
+ </connections>
+ </barButtonItem>
+ <barButtonItem style="plain" systemItem="flexibleSpace" id="cbF-Ui-mjA"/>
+ <barButtonItem title="纭畾" id="cQF-0W-PL0">
+ <connections>
+ <action selector="confirm:" destination="I6z-uV-dEU" id="18j-pJ-5Vt"/>
+ </connections>
+ </barButtonItem>
+ </items>
+ </toolbar>
+ <tapGestureRecognizer id="znC-g9-QOc">
+ <connections>
+ <action selector="showToolBar:" destination="I6z-uV-dEU" id="PGf-kv-HRg"/>
+ </connections>
+ </tapGestureRecognizer>
+ </objects>
+ <point key="canvasLocation" x="1172" y="1463"/>
+ </scene>
+ <!--Message List View Controller-->
+ <scene sceneID="La1-sv-OP4">
+ <objects>
+ <tableViewController id="MVz-Sq-jf5" customClass="EZMessageListViewController" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="100" sectionHeaderHeight="28" sectionFooterHeight="28" id="p2y-0I-SRU">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <prototypes>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="MessageCell" rowHeight="75" id="St6-kz-bZE" customClass="MessageListCell">
+ <rect key="frame" x="0.0" y="44.5" width="375" height="75"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="St6-kz-bZE" id="gqt-AI-8vk">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="75"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Anm-pP-Im6">
+ <rect key="frame" x="5" y="5" width="90" height="65"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="65" id="HyQ-tw-ere"/>
+ <constraint firstAttribute="width" constant="90" id="U11-iq-gFE"/>
+ </constraints>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="浜轰綋鎰熷簲浜嬩欢" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="oq1-TQ-afe">
+ <rect key="frame" x="119" y="13" width="92" height="18"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.20000000000000001" green="0.20000000000000001" blue="0.20000000000000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="鏉ヨ嚜:123456789" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SpQ-pQ-wyI">
+ <rect key="frame" x="119" y="45" width="176" height="20"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.67843137254901964" green="0.67843137254901964" blue="0.67843137254901964" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jy3-lI-DsU">
+ <rect key="frame" x="100" y="32" width="10" height="10"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <color key="backgroundColor" red="0.10859914124011993" green="0.54394680261611938" blue="0.85770881175994873" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" text="9:00" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="0SD-HE-m6y">
+ <rect key="frame" x="219" y="13" width="140" height="18"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.67843137254901964" green="0.67843137254901964" blue="0.67843137254901964" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <constraints>
+ <constraint firstItem="Anm-pP-Im6" firstAttribute="top" secondItem="gqt-AI-8vk" secondAttribute="top" constant="5" id="7EA-Vw-H4t"/>
+ <constraint firstItem="oq1-TQ-afe" firstAttribute="top" secondItem="gqt-AI-8vk" secondAttribute="topMargin" constant="2" id="EHj-Jp-msb"/>
+ <constraint firstItem="0SD-HE-m6y" firstAttribute="leading" secondItem="oq1-TQ-afe" secondAttribute="trailing" constant="8" id="Ekl-gJ-6xS"/>
+ <constraint firstItem="0SD-HE-m6y" firstAttribute="top" secondItem="gqt-AI-8vk" secondAttribute="topMargin" constant="2" id="Sdl-Mq-ojW"/>
+ <constraint firstItem="Anm-pP-Im6" firstAttribute="leading" secondItem="gqt-AI-8vk" secondAttribute="leading" constant="5" id="YEj-dB-5Qx"/>
+ <constraint firstItem="oq1-TQ-afe" firstAttribute="leading" secondItem="Anm-pP-Im6" secondAttribute="trailing" constant="24" id="pmt-zE-HsN"/>
+ <constraint firstItem="0SD-HE-m6y" firstAttribute="trailing" secondItem="gqt-AI-8vk" secondAttribute="trailingMargin" id="sdj-ui-vjw"/>
+ </constraints>
+ </tableViewCellContentView>
+ <connections>
+ <outlet property="actionImageView" destination="Anm-pP-Im6" id="QSW-GD-H4R"/>
+ <outlet property="descriptionLabel" destination="SpQ-pQ-wyI" id="rxz-7r-ehE"/>
+ <outlet property="readStatusIcon" destination="jy3-lI-DsU" id="eIz-si-mpJ"/>
+ <outlet property="timeLabel" destination="0SD-HE-m6y" id="433-ly-kMQ"/>
+ <outlet property="titleLabel" destination="oq1-TQ-afe" id="V2K-db-ufc"/>
+ </connections>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="MVz-Sq-jf5" id="d2f-CU-fmv"/>
+ <outlet property="delegate" destination="MVz-Sq-jf5" id="qhi-uc-zr4"/>
+ </connections>
+ </tableView>
+ <toolbarItems>
+ <barButtonItem title="鍒犻櫎" style="plain" id="6yZ-4A-Vvl">
+ <color key="tintColor" red="0.85770881180000003" green="0.211302614" blue="0.113631911" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <connections>
+ <action selector="deleteMessage:" destination="MVz-Sq-jf5" id="Vdj-g1-A36"/>
+ </connections>
+ </barButtonItem>
+ <barButtonItem style="plain" systemItem="flexibleSpace" id="mzb-N8-DSD"/>
+ <barButtonItem title="鏍囪宸茶" id="tHi-Fa-i4d">
+ <connections>
+ <action selector="readMessage:" destination="MVz-Sq-jf5" id="4ul-Xs-xvT"/>
+ </connections>
+ </barButtonItem>
+ </toolbarItems>
+ <navigationItem key="navigationItem" id="ARC-rQ-wIY">
+ <barButtonItem key="rightBarButtonItem" systemItem="edit" id="dHf-dn-ncL">
+ <connections>
+ <action selector="editTableView:" destination="MVz-Sq-jf5" id="47f-Zy-tav"/>
+ </connections>
+ </barButtonItem>
+ </navigationItem>
+ <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
+ <connections>
+ <outlet property="deleteSelected" destination="6yZ-4A-Vvl" id="nNN-ry-Dws"/>
+ <outlet property="editButton" destination="dHf-dn-ncL" id="ZeI-ph-uuY"/>
+ <outlet property="noMessage" destination="sFU-KM-YgO" id="DMZ-7P-zoo"/>
+ <outlet property="noMessageLabel" destination="u19-7q-vxu" id="X2k-k1-Tha"/>
+ <outlet property="readAll" destination="tHi-Fa-i4d" id="Fv3-O0-Gd1"/>
+ <segue destination="Vpd-pS-Twe" kind="push" identifier="go2MessagePhoto" id="NXd-Cg-MwP"/>
+ </connections>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="UIp-4e-qNh" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="no_message" id="sFU-KM-YgO">
+ <rect key="frame" x="0.0" y="0.0" width="94" height="94"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ </imageView>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="鏆傛棤娑堟伅" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="u19-7q-vxu">
+ <rect key="frame" x="0.0" y="0.0" width="90" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.53333333329999999" green="0.53333333329999999" blue="0.53333333329999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </objects>
+ <point key="canvasLocation" x="54.399999999999999" y="1235.9820089955024"/>
+ </scene>
+ <!--Setting View Controller-->
+ <scene sceneID="8uc-oI-R8b">
+ <objects>
+ <tableViewController id="3ZH-14-C2h" customClass="EZSettingViewController" sceneMemberID="viewController">
+ <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="wlo-g7-YSk">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <prototypes>
+ <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="EZSettingCell" id="Mk7-Ag-WW0">
+ <rect key="frame" x="0.0" y="49.5" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="Mk7-Ag-WW0" id="Pt3-DC-cCE">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
+ <autoresizingMask key="autoresizingMask"/>
+ </tableViewCellContentView>
+ </tableViewCell>
+ </prototypes>
+ <connections>
+ <outlet property="dataSource" destination="3ZH-14-C2h" id="I4R-NW-aqQ"/>
+ <outlet property="delegate" destination="3ZH-14-C2h" id="0Ve-Vu-DDA"/>
+ </connections>
+ </tableView>
+ <navigationItem key="navigationItem" id="OqD-LX-c7f"/>
+ <connections>
+ <outlet property="actionSwitch" destination="8jg-ac-7ea" id="xIr-pf-25h"/>
+ <outlet property="currentVersionLabel" destination="RBc-j1-IEr" id="0eE-u0-usA"/>
+ <outlet property="hdSwitch" destination="KBU-5V-GwK" id="lf0-8b-Qeq"/>
+ <outlet property="nVersionLabel" destination="bvq-5A-JW8" id="dqy-G7-H05"/>
+ <outlet property="nameLabel" destination="8Y3-zX-Cnw" id="w24-b8-OXa"/>
+ <outlet property="serialLabel" destination="9VV-np-Xv9" id="Vvo-rR-zdY"/>
+ <outlet property="updateImageView" destination="A8K-Mk-xFS" id="qqg-Hg-1rw"/>
+ <outlet property="videoSwitch" destination="eKv-yq-ycl" id="HD9-JX-sBQ"/>
+ <segue destination="yga-gr-cbw" kind="push" identifier="go2setDeviceName" id="MqZ-43-B1F"/>
+ <segue destination="B6I-K3-uvg" kind="push" identifier="go2Upgrade" id="iXV-Xg-6Ai"/>
+ </connections>
+ </tableViewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="0Ah-46-kfZ" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" id="8jg-ac-7ea">
+ <rect key="frame" x="0.0" y="0.0" width="51" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <connections>
+ <action selector="actionSwitchChanged:" destination="3ZH-14-C2h" eventType="valueChanged" id="urQ-Ay-8Ik"/>
+ </connections>
+ </switch>
+ <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" id="eKv-yq-ycl">
+ <rect key="frame" x="0.0" y="0.0" width="51" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <connections>
+ <action selector="encryptChanged:" destination="3ZH-14-C2h" eventType="touchUpInside" id="P8B-M0-dUl"/>
+ </connections>
+ </switch>
+ <switch opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" contentHorizontalAlignment="center" contentVerticalAlignment="center" id="KBU-5V-GwK">
+ <rect key="frame" x="0.0" y="0.0" width="51" height="31"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <connections>
+ <action selector="HDChanged:" destination="3ZH-14-C2h" eventType="valueChanged" id="fHK-6L-vL6"/>
+ </connections>
+ </switch>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="璁惧鍚�" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8Y3-zX-Cnw">
+ <rect key="frame" x="0.0" y="0.0" width="72" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.53333333329999999" green="0.53333333329999999" blue="0.53333333329999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="123456789" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="9VV-np-Xv9">
+ <rect key="frame" x="0.0" y="0.0" width="122" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.53333333333333333" green="0.53333333333333333" blue="0.53333333333333333" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="RBc-j1-IEr">
+ <rect key="frame" x="0.0" y="0.0" width="120" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
+ <color key="textColor" red="0.53333333329999999" green="0.53333333329999999" blue="0.53333333329999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="bvq-5A-JW8">
+ <rect key="frame" x="0.0" y="0.0" width="112" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="upgrade" id="A8K-Mk-xFS">
+ <rect key="frame" x="0.0" y="0.0" width="45" height="21"/>
+ <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+ </imageView>
+ </objects>
+ <point key="canvasLocation" x="2998.4000000000001" y="340.02998500749629"/>
+ </scene>
+ <!--Edit View Controller-->
+ <scene sceneID="5rr-1N-SjW">
+ <objects>
+ <viewController id="yga-gr-cbw" customClass="EZEditViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="7aP-Sp-tAl"/>
+ <viewControllerLayoutGuide type="bottom" id="z34-zQ-g1R"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="kWR-Bn-Cd6">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="璇疯緭鍏ヨ澶囧悕绉�" textAlignment="natural" minimumFontSize="17" clearButtonMode="whileEditing" translatesAutoresizingMaskIntoConstraints="NO" id="r1W-d8-Rg7">
+ <rect key="frame" x="0.0" y="94" width="375" height="40"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="40" id="NLX-OK-XZ7"/>
+ </constraints>
+ <color key="textColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xdQ-Ec-12V">
+ <rect key="frame" x="45" y="194" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="285" id="F6x-VP-pj1"/>
+ <constraint firstAttribute="height" constant="39" id="eMs-1w-UTL"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="淇濆瓨" backgroundImage="blue_button"/>
+ <connections>
+ <action selector="saveName:" destination="yga-gr-cbw" eventType="touchUpInside" id="MNJ-A6-Kp1"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="涓嶈秴杩�50涓瓧绗�" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xj6-wT-AiB">
+ <rect key="frame" x="9" y="145" width="216" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="H5l-ew-D4h"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.53333333329999999" green="0.53333333329999999" blue="0.53333333329999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="r1W-d8-Rg7" firstAttribute="leading" secondItem="kWR-Bn-Cd6" secondAttribute="leading" id="0Ir-GL-kg9"/>
+ <constraint firstItem="xj6-wT-AiB" firstAttribute="leading" secondItem="kWR-Bn-Cd6" secondAttribute="leading" constant="9" id="6YT-M5-I8Q"/>
+ <constraint firstItem="xj6-wT-AiB" firstAttribute="top" secondItem="r1W-d8-Rg7" secondAttribute="bottom" constant="11" id="71h-89-SKQ"/>
+ <constraint firstAttribute="trailing" secondItem="r1W-d8-Rg7" secondAttribute="trailing" id="Fh5-VC-xdu"/>
+ <constraint firstItem="r1W-d8-Rg7" firstAttribute="top" secondItem="7aP-Sp-tAl" secondAttribute="bottom" constant="50" id="cwe-OY-Bkj"/>
+ <constraint firstAttribute="trailing" secondItem="xj6-wT-AiB" secondAttribute="trailing" constant="150" id="fQK-zd-btb"/>
+ <constraint firstItem="xdQ-Ec-12V" firstAttribute="top" secondItem="r1W-d8-Rg7" secondAttribute="bottom" constant="60" id="gPG-aa-4Zb"/>
+ <constraint firstItem="xdQ-Ec-12V" firstAttribute="centerX" secondItem="kWR-Bn-Cd6" secondAttribute="centerX" id="sft-Qz-JsK"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="QoW-uz-ej1"/>
+ <connections>
+ <outlet property="deviceNameTextField" destination="r1W-d8-Rg7" id="hPG-Ge-HhP"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="7Bh-zP-3pb" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="3920" y="-109.74512743628186"/>
+ </scene>
+ <!--Message Photo View Controller-->
+ <scene sceneID="ekE-W8-1DW">
+ <objects>
+ <viewController id="Vpd-pS-Twe" customClass="EZMessagePhotoViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="aBf-9x-ztY"/>
+ <viewControllerLayoutGuide type="bottom" id="cZ6-zM-7Go"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="Uu5-Ms-thn">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="i18-UP-bcI">
+ <rect key="frame" x="0.0" y="487" width="375" height="180"/>
+ <subviews>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="鍙戠敓浜轰綋鎰熷簲浜嬩欢" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AUI-sk-GM6">
+ <rect key="frame" x="10" y="25" width="355" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="Vp3-qH-8RB"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="2015/11/18 19:12:22" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="QVM-WI-RUj">
+ <rect key="frame" x="10" y="45" width="355" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="MCb-HL-HmO"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.53333333333333333" green="0.53333333333333333" blue="0.53333333333333333" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="鏉ヨ嚜锛欳2mini" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xta-Lo-bjB">
+ <rect key="frame" x="10" y="65" width="355" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="eUk-DP-f6r"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.53333333333333333" green="0.53333333333333333" blue="0.53333333333333333" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MZk-cJ-Fkp">
+ <rect key="frame" x="45" y="117" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="285" id="SdI-Fw-BPc"/>
+ <constraint firstAttribute="height" constant="39" id="uIB-3c-LVw"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <state key="normal" title="娑堟伅褰曞儚" backgroundImage="blue_button"/>
+ <connections>
+ <action selector="go2Next:" destination="Vpd-pS-Twe" eventType="touchUpInside" id="BbC-Xc-fQb"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.75419657939189189" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="xta-Lo-bjB" firstAttribute="leading" secondItem="i18-UP-bcI" secondAttribute="leading" constant="10" id="3HX-J5-kZY"/>
+ <constraint firstAttribute="height" constant="180" id="978-QH-KUo"/>
+ <constraint firstItem="MZk-cJ-Fkp" firstAttribute="centerX" secondItem="i18-UP-bcI" secondAttribute="centerX" id="D67-dM-j65"/>
+ <constraint firstItem="MZk-cJ-Fkp" firstAttribute="top" secondItem="xta-Lo-bjB" secondAttribute="bottom" constant="32" id="MF0-Qv-j3E"/>
+ <constraint firstAttribute="bottom" secondItem="MZk-cJ-Fkp" secondAttribute="bottom" constant="24" id="NUE-KB-P0B"/>
+ <constraint firstItem="QVM-WI-RUj" firstAttribute="leading" secondItem="i18-UP-bcI" secondAttribute="leading" constant="10" id="OX0-R0-1T0"/>
+ <constraint firstItem="MZk-cJ-Fkp" firstAttribute="centerX" secondItem="QVM-WI-RUj" secondAttribute="centerX" id="PaH-5Q-bUp"/>
+ <constraint firstAttribute="trailing" secondItem="QVM-WI-RUj" secondAttribute="trailing" constant="10" id="UM8-2T-oqc"/>
+ <constraint firstItem="QVM-WI-RUj" firstAttribute="top" secondItem="AUI-sk-GM6" secondAttribute="bottom" id="aCH-vh-CIY"/>
+ <constraint firstAttribute="trailing" secondItem="AUI-sk-GM6" secondAttribute="trailing" constant="10" id="iu6-gz-PlM"/>
+ <constraint firstItem="AUI-sk-GM6" firstAttribute="leading" secondItem="i18-UP-bcI" secondAttribute="leading" constant="10" id="npp-Na-uXn"/>
+ <constraint firstItem="AUI-sk-GM6" firstAttribute="top" secondItem="i18-UP-bcI" secondAttribute="top" constant="25" id="rQO-pV-naS"/>
+ <constraint firstItem="MZk-cJ-Fkp" firstAttribute="centerX" secondItem="AUI-sk-GM6" secondAttribute="centerX" id="t2b-3L-Nl4"/>
+ <constraint firstAttribute="trailing" secondItem="xta-Lo-bjB" secondAttribute="trailing" constant="10" id="xur-1Q-gHl"/>
+ </constraints>
+ </view>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="trailing" secondItem="i18-UP-bcI" secondAttribute="trailing" id="YBz-8q-wDZ"/>
+ <constraint firstItem="i18-UP-bcI" firstAttribute="leading" secondItem="Uu5-Ms-thn" secondAttribute="leading" id="oMB-hN-b6R"/>
+ <constraint firstItem="cZ6-zM-7Go" firstAttribute="top" secondItem="i18-UP-bcI" secondAttribute="bottom" id="xbC-N7-Z5b"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="Hfr-L6-q9G"/>
+ <nil key="simulatedBottomBarMetrics"/>
+ <connections>
+ <outlet property="contentLabel" destination="xta-Lo-bjB" id="6Lv-rT-1hU"/>
+ <outlet property="messageDetailInfoView" destination="i18-UP-bcI" id="8VI-SS-xAE"/>
+ <outlet property="recordButton" destination="MZk-cJ-Fkp" id="RIE-3g-ybt"/>
+ <outlet property="timeLabel" destination="QVM-WI-RUj" id="OzY-nA-Oqo"/>
+ <outlet property="titleLabel" destination="AUI-sk-GM6" id="X2c-dH-RAT"/>
+ <segue destination="Ziu-Is-xdi" kind="push" identifier="go2MessagePlayback" id="QL2-r6-I3I"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="0Y4-gX-Pdl" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="-318.39999999999998" y="2107.6461769115444"/>
+ </scene>
+ <!--Message Playback View Controller-->
+ <scene sceneID="7U5-ja-hx3">
+ <objects>
+ <viewController id="Ziu-Is-xdi" customClass="EZMessagePlaybackViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="nfL-if-wgC"/>
+ <viewControllerLayoutGuide type="bottom" id="AVQ-gq-N1c"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="mkg-WK-bfu">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="wifi_bg" translatesAutoresizingMaskIntoConstraints="NO" id="XNo-QF-Cb8">
+ <rect key="frame" x="0.0" y="32" width="375" height="635"/>
+ </imageView>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Sid-Ff-mRw">
+ <rect key="frame" x="0.0" y="44" width="375" height="211"/>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <gestureRecognizers/>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="Sid-Ff-mRw" secondAttribute="height" multiplier="16:9" id="pQd-K0-kef"/>
+ </constraints>
+ <connections>
+ <outletCollection property="gestureRecognizers" destination="QGi-M4-3ct" appends="YES" id="TmO-Rk-ErH"/>
+ </connections>
+ </view>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" 00:00" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IqR-oy-XmU">
+ <rect key="frame" x="147.5" y="54" width="80" height="24"/>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="80" id="57P-5k-0tb"/>
+ <constraint firstAttribute="height" constant="24" id="Mqb-tw-Qxq"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="XID-G7-Q1F">
+ <rect key="frame" x="0.0" y="44" width="40" height="40"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="40" id="AOT-6h-sls"/>
+ <constraint firstAttribute="height" constant="40" id="JO7-Hb-1i7"/>
+ </constraints>
+ <state key="normal" image="large_back_btn"/>
+ <connections>
+ <action selector="largeBack:" destination="I6z-uV-dEU" eventType="touchUpInside" id="Dhi-B6-M16"/>
+ <action selector="largeBack:" destination="Ziu-Is-xdi" eventType="touchUpInside" id="kFm-ga-gme"/>
+ </connections>
+ </button>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="b60-F5-UgT">
+ <rect key="frame" x="0.0" y="195" width="375" height="60"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="a6a-IS-kTU">
+ <rect key="frame" x="0.0" y="23" width="60" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="AfH-0T-CMk"/>
+ <constraint firstAttribute="width" constant="60" id="vaX-fO-27D"/>
+ </constraints>
+ <state key="normal" image="preview_play_btn"/>
+ <connections>
+ <action selector="playButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="5y4-UP-Cq4"/>
+ <action selector="playButtonClicked:" destination="Ziu-Is-xdi" eventType="touchUpInside" id="R09-nh-Kz2"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="S3H-Nc-Lu9">
+ <rect key="frame" x="60" y="23" width="60" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="BbD-6J-wMN"/>
+ <constraint firstAttribute="width" constant="60" id="k0h-am-AUy"/>
+ </constraints>
+ <state key="normal" image="preview_voice_btn"/>
+ <connections>
+ <action selector="voiceButtonClicked:" destination="I6z-uV-dEU" eventType="touchUpInside" id="7dA-sY-rJM"/>
+ <action selector="voiceButtonClicked:" destination="Ziu-Is-xdi" eventType="touchUpInside" id="RRJ-y0-y4j"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="cLa-FB-IQC">
+ <rect key="frame" x="315" y="23" width="60" height="37"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="37" id="Dhh-Hn-9xJ"/>
+ <constraint firstAttribute="width" constant="60" id="lQa-uK-fRg"/>
+ </constraints>
+ <state key="normal" image="preview_enlarge"/>
+ <state key="highlighted" image="preview_enlarge_btn_sel"/>
+ <connections>
+ <action selector="large:" destination="I6z-uV-dEU" eventType="touchUpInside" id="EgA-TW-66G"/>
+ <action selector="large:" destination="Ziu-Is-xdi" eventType="touchUpInside" id="cNC-Fk-JVO"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="arc-1g-3CP">
+ <rect key="frame" x="0.0" y="0.0" width="34" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="qCj-Pb-rep"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="12"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <slider opaque="NO" contentMode="scaleToFill" semanticContentAttribute="playback" contentHorizontalAlignment="center" contentVerticalAlignment="center" minValue="0.0" maxValue="1" translatesAutoresizingMaskIntoConstraints="NO" id="5mo-5w-CGH">
+ <rect key="frame" x="35.5" y="-5" width="303.5" height="31"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="30" id="BZH-q0-NfT"/>
+ </constraints>
+ <color key="thumbTintColor" red="0.10859914124011993" green="0.54394680261611938" blue="0.85770881175994873" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <connections>
+ <action selector="duringValueChange:" destination="I6z-uV-dEU" eventType="touchUpInside" id="UNW-03-tB5"/>
+ <action selector="duringValueChange:" destination="Ziu-Is-xdi" eventType="touchUpInside" id="yFD-GS-9zU"/>
+ </connections>
+ </slider>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="00:00" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="68c-It-TWh">
+ <rect key="frame" x="341" y="0.0" width="34" height="20"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="20" id="rkK-LL-Iu9"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="12"/>
+ <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="68c-It-TWh" firstAttribute="top" secondItem="b60-F5-UgT" secondAttribute="top" id="1we-A3-8NM"/>
+ <constraint firstItem="arc-1g-3CP" firstAttribute="top" secondItem="b60-F5-UgT" secondAttribute="top" id="8PY-wD-9BE"/>
+ <constraint firstItem="5mo-5w-CGH" firstAttribute="leading" secondItem="arc-1g-3CP" secondAttribute="trailing" constant="3.5" id="CEo-Y1-KWV"/>
+ <constraint firstAttribute="height" constant="60" id="H8F-Dr-u5m"/>
+ <constraint firstAttribute="trailing" secondItem="68c-It-TWh" secondAttribute="trailing" id="HvI-sY-HRZ"/>
+ <constraint firstItem="arc-1g-3CP" firstAttribute="leading" secondItem="b60-F5-UgT" secondAttribute="leading" id="MXz-M4-slD"/>
+ <constraint firstItem="a6a-IS-kTU" firstAttribute="leading" secondItem="b60-F5-UgT" secondAttribute="leading" id="bnA-wA-NoS"/>
+ <constraint firstItem="68c-It-TWh" firstAttribute="width" secondItem="arc-1g-3CP" secondAttribute="width" id="cH5-cA-qx3"/>
+ <constraint firstItem="S3H-Nc-Lu9" firstAttribute="leading" secondItem="a6a-IS-kTU" secondAttribute="trailing" id="fJA-A1-CyU"/>
+ <constraint firstAttribute="bottom" secondItem="S3H-Nc-Lu9" secondAttribute="bottom" id="h3g-Ty-iNV"/>
+ <constraint firstItem="68c-It-TWh" firstAttribute="leading" secondItem="5mo-5w-CGH" secondAttribute="trailing" constant="4" id="k0e-h4-OJW"/>
+ <constraint firstAttribute="bottom" secondItem="a6a-IS-kTU" secondAttribute="bottom" id="keH-4j-kjq"/>
+ <constraint firstAttribute="bottom" secondItem="cLa-FB-IQC" secondAttribute="bottom" id="oxW-dK-xJN"/>
+ <constraint firstItem="5mo-5w-CGH" firstAttribute="centerY" secondItem="68c-It-TWh" secondAttribute="centerY" id="upd-df-cFG"/>
+ <constraint firstAttribute="trailing" secondItem="cLa-FB-IQC" secondAttribute="trailing" id="vMu-fL-CxF"/>
+ </constraints>
+ </view>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="es2-2O-C6T">
+ <rect key="frame" x="197.5" y="355" width="100" height="100"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="100" id="ggm-qd-KNb"/>
+ <constraint firstAttribute="width" constant="100" id="sET-Nc-aei"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="褰曞儚" image="preview_recording">
+ <color key="titleColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="disabled" image="preview_recording_dis"/>
+ <state key="selected" image="preview_recording_sel"/>
+ <state key="highlighted" image="preview_recording_sel"/>
+ <connections>
+ <action selector="localButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="mwQ-yE-rJl"/>
+ <action selector="localButtonClicked:" destination="Ziu-Is-xdi" eventType="touchUpInside" id="ymB-Qs-DYt"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uxM-3S-gu1">
+ <rect key="frame" x="77.5" y="355" width="100" height="100"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="100" id="76E-yD-MgD"/>
+ <constraint firstAttribute="height" constant="100" id="YTu-Ca-QiC"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <state key="normal" title="鎴浘" image="preview_screenshot">
+ <color key="titleColor" red="0.66666666666666663" green="0.66666666666666663" blue="0.66666666666666663" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <state key="disabled" image="preview_screenshot_dis"/>
+ <state key="highlighted" image="preview_screenshot_sel"/>
+ <connections>
+ <action selector="capture:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="OV3-bX-1Cc"/>
+ <action selector="capture:" destination="Ziu-Is-xdi" eventType="touchUpInside" id="XPo-Ej-PTr"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="XID-G7-Q1F" firstAttribute="leading" secondItem="mkg-WK-bfu" secondAttribute="leading" id="44U-eP-qoj"/>
+ <constraint firstItem="XNo-QF-Cb8" firstAttribute="leading" secondItem="mkg-WK-bfu" secondAttribute="leading" id="4mi-A0-Yqa"/>
+ <constraint firstItem="es2-2O-C6T" firstAttribute="top" secondItem="uxM-3S-gu1" secondAttribute="top" id="5Jp-Y9-LvH"/>
+ <constraint firstItem="uxM-3S-gu1" firstAttribute="top" secondItem="b60-F5-UgT" secondAttribute="bottom" constant="100" id="6hK-sd-gv0"/>
+ <constraint firstItem="Sid-Ff-mRw" firstAttribute="bottom" secondItem="b60-F5-UgT" secondAttribute="bottom" id="8xg-8a-jK1"/>
+ <constraint firstItem="Sid-Ff-mRw" firstAttribute="trailing" secondItem="b60-F5-UgT" secondAttribute="trailing" id="JIK-S0-y2m"/>
+ <constraint firstItem="Sid-Ff-mRw" firstAttribute="leading" secondItem="b60-F5-UgT" secondAttribute="leading" id="R2p-kI-ddB"/>
+ <constraint firstItem="XNo-QF-Cb8" firstAttribute="top" secondItem="mkg-WK-bfu" secondAttribute="top" constant="32" id="SlB-AN-QdV"/>
+ <constraint firstItem="Sid-Ff-mRw" firstAttribute="top" secondItem="nfL-if-wgC" secondAttribute="bottom" id="Y4j-nZ-qaU"/>
+ <constraint firstItem="es2-2O-C6T" firstAttribute="leading" secondItem="mkg-WK-bfu" secondAttribute="centerXWithinMargins" constant="10" id="aNt-cU-Ben"/>
+ <constraint firstItem="IqR-oy-XmU" firstAttribute="centerX" secondItem="mkg-WK-bfu" secondAttribute="centerX" id="g8q-JH-xwV"/>
+ <constraint firstItem="Sid-Ff-mRw" firstAttribute="trailing" secondItem="XNo-QF-Cb8" secondAttribute="trailing" id="gwj-ge-stt"/>
+ <constraint firstAttribute="bottom" secondItem="XNo-QF-Cb8" secondAttribute="bottom" id="oGc-93-IA5"/>
+ <constraint firstItem="Sid-Ff-mRw" firstAttribute="leading" secondItem="XNo-QF-Cb8" secondAttribute="leading" id="ofn-fn-AWD"/>
+ <constraint firstAttribute="trailing" secondItem="XNo-QF-Cb8" secondAttribute="trailing" id="p2Z-fc-rcv"/>
+ <constraint firstItem="IqR-oy-XmU" firstAttribute="top" secondItem="nfL-if-wgC" secondAttribute="bottom" constant="10" id="ubZ-J9-tBg"/>
+ <constraint firstAttribute="centerXWithinMargins" secondItem="uxM-3S-gu1" secondAttribute="trailing" constant="10" id="ufZ-89-QFM"/>
+ <constraint firstItem="XID-G7-Q1F" firstAttribute="top" secondItem="nfL-if-wgC" secondAttribute="bottom" id="yoF-Yt-Zqi"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="4ns-ef-UNV"/>
+ <nil key="simulatedBottomBarMetrics"/>
+ <connections>
+ <outlet property="captureButton" destination="uxM-3S-gu1" id="DW0-gl-Rur"/>
+ <outlet property="duringSlider" destination="5mo-5w-CGH" id="bfo-5A-oSQ"/>
+ <outlet property="duringTimeLabel" destination="68c-It-TWh" id="Aky-eV-Hds"/>
+ <outlet property="largeBackButton" destination="XID-G7-Q1F" id="hDs-V1-4WK"/>
+ <outlet property="largeButton" destination="cLa-FB-IQC" id="lif-mV-Npo"/>
+ <outlet property="localRecordButton" destination="es2-2O-C6T" id="B3h-hl-q2R"/>
+ <outlet property="localRecordLabel" destination="IqR-oy-XmU" id="Ggp-z8-pm6"/>
+ <outlet property="playButton" destination="a6a-IS-kTU" id="7lF-ms-4v5"/>
+ <outlet property="playTimeLabel" destination="arc-1g-3CP" id="8Gu-uV-Pza"/>
+ <outlet property="playerToolbox" destination="b60-F5-UgT" id="bnx-zY-YhD"/>
+ <outlet property="playerToolboxConstraint" destination="H8F-Dr-u5m" id="AwH-Xc-6vN"/>
+ <outlet property="playerView" destination="Sid-Ff-mRw" id="Vgh-Yz-OF3"/>
+ <outlet property="voiceButton" destination="S3H-Nc-Lu9" id="45a-H5-Qtf"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="sE7-s6-W7M" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ <tapGestureRecognizer id="QGi-M4-3ct">
+ <connections>
+ <action selector="showToolBar:" destination="Ziu-Is-xdi" id="lym-iO-6TQ"/>
+ </connections>
+ </tapGestureRecognizer>
+ </objects>
+ <point key="canvasLocation" x="553.60000000000002" y="2107.6461769115444"/>
+ </scene>
+ <!--Device Upgrade View Controller-->
+ <scene sceneID="x4v-5X-mKn">
+ <objects>
+ <viewController id="B6I-K3-uvg" customClass="EZDeviceUpgradeViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="LBJ-sA-IBq"/>
+ <viewControllerLayoutGuide type="bottom" id="HbW-AF-LH2"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="bNO-BS-VHb">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="4ol-dw-GX9">
+ <rect key="frame" x="45" y="260" width="285" height="39"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="285" id="ZIE-YP-8dt"/>
+ <constraint firstAttribute="height" constant="39" id="t3Q-fl-sHA"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="16"/>
+ <state key="normal" title="鏇存柊" backgroundImage="blue_button"/>
+ <connections>
+ <action selector="upgradeDevice:" destination="B6I-K3-uvg" eventType="touchUpInside" id="BIP-1D-tq7"/>
+ </connections>
+ </button>
+ <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="ex5-eL-x0h">
+ <rect key="frame" x="0.0" y="80" width="375" height="150"/>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="150" id="azy-6S-UKf"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
+ </textView>
+ <progressView hidden="YES" opaque="NO" contentMode="scaleToFill" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jcN-yM-fWF">
+ <rect key="frame" x="20" y="313" width="335" height="4"/>
+ </progressView>
+ <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="姝e湪鏇存柊..." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ckd-hd-wtP">
+ <rect key="frame" x="20" y="269" width="335" height="21"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="21" id="hMV-z6-oh2"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" red="0.94117647059999998" green="0.94117647059999998" blue="0.94509803920000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="ex5-eL-x0h" firstAttribute="leading" secondItem="bNO-BS-VHb" secondAttribute="leading" id="5Sx-wr-AcX"/>
+ <constraint firstItem="ckd-hd-wtP" firstAttribute="top" secondItem="ex5-eL-x0h" secondAttribute="bottom" constant="39" id="9mP-Jg-Ds0"/>
+ <constraint firstItem="jcN-yM-fWF" firstAttribute="leading" secondItem="bNO-BS-VHb" secondAttribute="leading" constant="20" id="DFY-8x-HRt"/>
+ <constraint firstItem="jcN-yM-fWF" firstAttribute="top" secondItem="4ol-dw-GX9" secondAttribute="bottom" constant="14" id="DHs-Sa-MNF"/>
+ <constraint firstItem="4ol-dw-GX9" firstAttribute="centerX" secondItem="bNO-BS-VHb" secondAttribute="centerX" id="G2S-Ej-ErK"/>
+ <constraint firstAttribute="trailing" secondItem="ckd-hd-wtP" secondAttribute="trailing" constant="20" id="OUP-EG-GSy"/>
+ <constraint firstItem="ckd-hd-wtP" firstAttribute="leading" secondItem="bNO-BS-VHb" secondAttribute="leading" constant="20" id="g9b-J7-KvP"/>
+ <constraint firstItem="ex5-eL-x0h" firstAttribute="top" secondItem="LBJ-sA-IBq" secondAttribute="bottom" constant="36" id="lyI-yt-mFw"/>
+ <constraint firstItem="4ol-dw-GX9" firstAttribute="top" secondItem="ex5-eL-x0h" secondAttribute="bottom" constant="30" id="oLN-EW-9zt"/>
+ <constraint firstAttribute="trailing" secondItem="ex5-eL-x0h" secondAttribute="trailing" id="oOW-Rf-Icj"/>
+ <constraint firstAttribute="trailing" secondItem="jcN-yM-fWF" secondAttribute="trailing" constant="20" id="tfs-Fk-EiN"/>
+ </constraints>
+ </view>
+ <navigationItem key="navigationItem" id="wlY-lF-sum"/>
+ <connections>
+ <outlet property="upgradeButton" destination="4ol-dw-GX9" id="ttR-xM-ZmO"/>
+ <outlet property="upgradeLabel" destination="ckd-hd-wtP" id="PYH-15-im8"/>
+ <outlet property="upgradeProgressView" destination="jcN-yM-fWF" id="zD6-zt-VNu"/>
+ <outlet property="upgradeTextView" destination="ex5-eL-x0h" id="zSk-G2-jlt"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="kWd-Kx-WD6" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="3920" y="612.59370314842579"/>
+ </scene>
+ </scenes>
+ <inferredMetricsTieBreakers>
+ <segue reference="Qls-Y0-o2u"/>
+ <segue reference="X3Q-o5-p8V"/>
+ <segue reference="9Tu-UR-Cms"/>
+ <segue reference="vdt-wN-aOY"/>
+ </inferredMetricsTieBreakers>
+ <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <resources>
+ <image name="StreamStudio" width="24" height="24"/>
+ <image name="StreamStudio-2" width="24" height="24"/>
+ <image name="blue_button" width="285" height="39"/>
+ <image name="blue_button_sel" width="285" height="39"/>
+ <image name="chuanshujilu-" width="24" height="24"/>
+ <image name="chuanshujilu--2" width="24" height="24"/>
+ <image name="cloud" width="32" height="32"/>
+ <image name="duijiangji" width="39" height="39"/>
+ <image name="icon_download_fill" width="20" height="20"/>
+ <image name="large_back_btn" width="10" height="19"/>
+ <image name="logo" width="210" height="94"/>
+ <image name="message" width="39" height="39"/>
+ <image name="no_message" width="94" height="94"/>
+ <image name="no_video" width="94" height="94"/>
+ <image name="offline" width="28" height="28"/>
+ <image name="orange_button" width="285" height="39"/>
+ <image name="orange_button_sel" width="285" height="39"/>
+ <image name="picture_bg" width="61" height="93"/>
+ <image name="play" width="54" height="54"/>
+ <image name="play_close" width="50" height="50"/>
+ <image name="play_close_sel" width="50" height="50"/>
+ <image name="play_rate" width="18.5" height="18.5"/>
+ <image name="play_sel" width="54" height="54"/>
+ <image name="playback" width="39" height="39"/>
+ <image name="preview_barrel" width="65" height="65"/>
+ <image name="preview_barrel_dis" width="65" height="65"/>
+ <image name="preview_barrel_sel" width="65" height="65"/>
+ <image name="preview_enlarge" width="37" height="37"/>
+ <image name="preview_enlarge_btn_sel" width="37" height="37"/>
+ <image name="preview_play_btn" width="37" height="37"/>
+ <image name="preview_play_btn_sel" width="37" height="37"/>
+ <image name="preview_recording" width="65" height="65"/>
+ <image name="preview_recording_dis" width="65" height="65"/>
+ <image name="preview_recording_sel" width="65" height="65"/>
+ <image name="preview_screenshot" width="65" height="65"/>
+ <image name="preview_screenshot_dis" width="65" height="65"/>
+ <image name="preview_screenshot_sel" width="65" height="65"/>
+ <image name="preview_talkback" width="65" height="65"/>
+ <image name="preview_talkback_dis" width="65" height="65"/>
+ <image name="preview_talkback_sel" width="65" height="65"/>
+ <image name="preview_unvoice_btn" width="37" height="37"/>
+ <image name="preview_voice_btn" width="37" height="37"/>
+ <image name="preview_voice_btn_sel" width="37" height="37"/>
+ <image name="ptz_bg" width="154" height="154"/>
+ <image name="setup" width="39" height="39"/>
+ <image name="spkImg" width="155" height="155"/>
+ <image name="upgrade" width="45" height="21"/>
+ <image name="wifi_bg" width="320" height="450"/>
+ <systemColor name="darkTextColor">
+ <color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </systemColor>
+ <systemColor name="systemBackgroundColor">
+ <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </systemColor>
+ <systemColor name="systemGrayColor">
+ <color red="0.55686274509803924" green="0.55686274509803924" blue="0.57647058823529407" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </systemColor>
+ <systemColor name="systemRedColor">
+ <color red="1" green="0.23137254901960785" blue="0.18823529411764706" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </systemColor>
+ </resources>
+</document>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/EZOpenSDKFramework b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/EZOpenSDKFramework
new file mode 100755
index 0000000..c29f125
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/EZOpenSDKFramework
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAPDevInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAPDevInfo.h
new file mode 100644
index 0000000..d1b5e38
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAPDevInfo.h
@@ -0,0 +1,23 @@
+//
+// EZAPDevInfo.h
+// EZWiFiConfigSDK
+//
+// Created by yuqian on 2020/7/28.
+// Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZAPDevInfo : NSObject
+
+@property (nonatomic, copy) NSString *apVersion;//鐗堟湰锛屽綋鍓峚p鐗堟湰1.0
+@property (nonatomic, copy) NSString *devSubserial;//璁惧搴忓垪鍙凤紝鏈�澶�64
+@property (nonatomic, copy) NSString *devType;//璁惧鍨嬪彿锛屾渶澶�64
+@property (nonatomic, copy) NSString *devFirmwareversion;//璁惧鍥轰欢鐗堟湰鍙凤紝鏈�澶�64
+@property (nonatomic, copy) NSString *macAddr;//璁惧mac鍦板潃
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAccessToken.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAccessToken.h
new file mode 100644
index 0000000..21379c3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAccessToken.h
@@ -0,0 +1,19 @@
+//
+// EZAccessToken.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/10/19.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿悿鐭冲紑鏀惧钩鍙版巿鏉冪櫥褰曚互鍚庣殑鍑瘉淇℃伅
+@interface EZAccessToken : NSObject
+
+/// accessToken 鐧诲綍鍑瘉
+@property (nonatomic, copy) NSString *accessToken;
+/// accessToken杩囨湡鐨勬椂闂寸偣,鐩稿浜�1970骞寸殑姣鏁�
+@property (nonatomic, assign) NSInteger expire;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAlarmInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAlarmInfo.h
new file mode 100644
index 0000000..9e763ef
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAlarmInfo.h
@@ -0,0 +1,60 @@
+//
+// EZAlarmInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/16.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓哄憡璀︿俊鎭璞�
+@interface EZAlarmInfo : NSObject
+
+/// 鍛婅ID
+@property (nonatomic, copy) NSString *alarmId;
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 閫氶亾鍙�
+@property (nonatomic) NSInteger cameraNo;
+/// 鍛婅鍚嶇О
+@property (nonatomic, copy) NSString *alarmName;
+/// 鍛婅鍥剧墖
+@property (nonatomic, copy) NSString *alarmPicUrl;
+/// 鍛婅寮�濮嬫椂闂�
+@property (nonatomic, strong) NSDate *alarmStartTime;
+/// 鍛婅绫诲瀷
+@property (nonatomic) NSInteger alarmType;
+/// 鏄惁鍔犲瘑
+//@property (nonatomic) BOOL isEncrypt;
+
+
+/// 鍛婅鍥剧墖鍔犲瘑淇℃伅 crypt 0-涓嶇‘瀹� 1-璁惧鍔犲瘑 2-骞冲彴鍔犲瘑
+/// 濡傛灉鏄�2锛岃〃鏄庢槸骞冲彴鍔犲瘑鐨勫浘鐗囷紝璇蜂娇鐢ㄤ笅闈㈢殑checksum浣滀负瑙e瘑绉橀挜瑙e瘑鍥剧墖
+/// 濡傛灉鏄�1锛岃〃鏄庢槸璁惧鍔犲瘑鐨勫浘鐗囷紝璇蜂娇鐢ㄨ澶囩殑楠岃瘉鐮佷綔涓鸿В瀵嗙閽ヨВ瀵嗗浘鐗�
+/// 濡傛灉鏄�0锛岃〃鏄庢湭鐭ョ殑鍔犲瘑淇℃伅锛岃閫氳繃涓婇潰鎶ヨ鍥剧墖URL锛坅larmPicUrl锛変腑鐨� isEncrypted 瀛楁锛屽垽鏂浘鐗囨槸 0锛氭湭鍔犲瘑 1锛氳澶囧姞瀵�
+/// 鎶ヨ鍥剧墖鐨刄RL绀轰緥锛�
+/// https://whpic.ys7.com:8009/HIK_1447836214_458BEBDAE4AB6a6f_525400286893421023815?isEncrypted=1&isCloudStored=0
+/// https://www.ys7.com:9090/api/cloud?method=download&fid=5ed92258-8e0f-11e5-8000-c19249a52dcf&deviceSerialNo=504242549&isEncrypted=0&isCloudStored=1
+@property (nonatomic) NSInteger crypt;
+/// 鍛婅鍥剧墖骞冲彴鍔犲瘑鏃剁殑瀵嗛挜
+@property (nonatomic, copy) NSString *checksum;
+/// 鏄惁宸茶
+@property (nonatomic) BOOL isRead;
+/// 瀛樺偍绫诲瀷锛�0-鏃犲瓨鍌紝1-钀ょ煶锛�2-鐧惧害锛�4-sd鍗″瓨鍌紝5-钀ょ煶鍜宻d鍗★紝6-鐧惧害鍜宻d鍗�
+@property (nonatomic) NSInteger recState;
+/// 鍛婅褰曞儚缁撴潫鏃堕棿鏃堕棿寤跺悗鍋忕Щ閲忥紝閫氳繃alarmStartTime鍔犱笂寤跺悗鍋忕Щ閲忚幏寰楀憡璀﹀綍鍍忕殑鍏蜂綋缁撴潫鏃堕棿
+@property (nonatomic) NSInteger delayTime;
+/// 鍛婅褰曞儚寮�濮嬫椂闂存彁鍓嶅亸绉婚噺锛岄�氳繃alarmStartTime鍑忓幓鎻愬墠鍋忕Щ閲忚幏寰楀憡璀﹀綍鍍忕殑鍏蜂綋寮�濮嬫椂闂�
+@property (nonatomic) NSInteger preTime;
+/// 璁惧鍚嶇О
+@property (nonatomic, copy) NSString *deviceName;
+/// 璁惧澶х被
+@property (nonatomic, copy) NSString *category;
+
+/// 4530 鎵╁睍瀛楁
+@property (nonatomic, copy) NSString *customerType;
+/// 4530 鎵╁睍瀛楁
+@property (nonatomic, copy) NSString *customerInfo;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAreaInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAreaInfo.h
new file mode 100644
index 0000000..ebbd210
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZAreaInfo.h
@@ -0,0 +1,19 @@
+//
+// EZAreaInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 16/7/19.
+// Copyright 漏 2016骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ゅ璞′负鍖哄煙瀵硅薄锛屾捣澶栧紑鏀惧钩鍙颁笓鐢ㄥ璞�
+@interface EZAreaInfo : NSObject
+
+@property (nonatomic) NSInteger id; ///鍖哄煙ID
+@property (nonatomic, copy) NSString *name; ///鍖哄煙鍚嶇О
+@property (nonatomic, copy) NSString *region; ///鍖哄煙鏍囪瘑
+@property (nonatomic) NSInteger telephoneCode; ///鍖哄煙鎵嬫満鍥介檯鍙�
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZBAVParam.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZBAVParam.h
new file mode 100644
index 0000000..b3d1e94
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZBAVParam.h
@@ -0,0 +1,196 @@
+//
+// EZBAVParam.h
+// EZBAVClient
+//
+// Created by kanhaiping on 2018/6/27.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+/*
+ typedef struct SBavDevInfo
+ {
+ YS_INT8 m_szDevSerial[STREAM_DEV_SERIAL_LEN + 1]; //蹇呭~ 璁惧搴忓垪鍙�
+ YS_UINT32 m_sChannel; //蹇呭~ 閫氶亾鍙�
+ YS_INT16 m_sDevStreamType; //蹇呭~ 璁惧涓诲瓙鐮佺被鍨�
+ YS_INT8 m_szAuthToken[STREAM_TOKEN_LEN + 1]; //蹇呭~ 璁よ瘉token
+ }SBavDevInfo;
+ */
+
+@interface EZBAVDevInfo : NSObject
+@property (nonatomic, strong) NSString *serial; /**< 蹇呭~ 璁惧搴忓垪鍙� */
+@property (nonatomic, assign) int32_t m_iChannel;//蹇呭~ 閫氶亾鍙�
+@property (nonatomic, assign) int32_t m_iDevStreamType;//蹇呭~ 璁惧涓诲瓙鐮佺被鍨�
+@property (nonatomic, strong) NSString *m_szAuthToken; /**< 蹇呭~ 璁よ瘉token */
+@end
+/*
+ typedef struct
+ {
+ YS_UINT32 m_iRoomId; //蹇呭~ 闇�瑕佸姞鍏ユ埧闂村彿
+ YS_UINT32 m_uClientId; //蹇呭~ 鍔犲叆鏂筩lientId
+ YS_INT8 m_szCustomId[CUSTOMID_LEN + 1]; //閫夋嫨 鍔犲叆鏂硅嚜瀹氫箟Id
+ YS_INT8 m_szPassword[STREAM_TOKEN_LEN + 1]; //蹇呭~ 鎴块棿瀵嗙爜
+ YS_UINT8 m_iCltType; //蹇呭~ 瀹㈡埛绔被鍨�
+ YS_UINT16 m_iStsPort; //蹇呭~ 杞彂鏈嶅姟绔彛
+ YS_INT8 m_szStsAddr[CLIENT_STREAM_SVR_ADDR_LEN + 1]; //蹇呭~ 杞彂鏈嶅姟鍦板潃
+ YS_UINT16 m_iVcPort; //蹇呭~ 浼氭帶鏈嶅姟绔彛
+ YS_INT8 m_szVcAddr[CLIENT_STREAM_SVR_ADDR_LEN + 1]; //蹇呭~ 浼氭帶鏈嶅姟鍦板潃
+ YS_INT8 m_szFilePath[FLIEPATH + 1]; //閫夋嫨 鍐欐枃浠剁殑璺緞
+ YS_INT8 m_szExtensionParas[CLIENT_STREAM_EXTENSION_LEN + 1]; //閫夋嫨 鎵╁睍瀛楁淇℃伅
+ }EZConferenceParam;
+ */
+@interface EZRTCJoinParam : NSObject
+@property (nonatomic, assign) int32_t m_iRoomId; /**<蹇呭~ 闇�瑕佸姞鍏ユ埧闂村彿 */
+@property (nonatomic, assign) int32_t m_uClientId; /**< 蹇呭~ 鍔犲叆鏂筩lientId */
+@property (nonatomic, strong) NSString *m_szCustomId; /**< 閫夋嫨 鍔犲叆鏂硅嚜瀹氫箟Id */
+@property (nonatomic, strong) NSString *m_szPassword; /**< 閫夋嫨 鎴块棿瀵嗙爜 */
+@property (nonatomic, assign) int32_t m_iCltType; /**< 蹇呭~ 瀹㈡埛绔被鍨� */
+@property (nonatomic, strong) NSString *m_szVcAddr;//蹇呭~ 瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟鍦板潃
+@property (nonatomic, assign) int32_t m_iVcPort;//蹇呭~ 瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟绔痥鍙�
+@property (nonatomic, strong) NSString *m_szStsAddr; /**< 蹇呭~ 杞彂鏈嶅姟鍦板潃 */
+@property (nonatomic, assign) int32_t m_iStsPort; /**< 蹇呭~ 杞彂鏈嶅姟绔彛 */
+@property (nonatomic, strong) NSString *m_szExtensionParas; /**< 閫夋嫨 鎵╁睍瀛楁淇℃伅 */
+
+@end
+
+
+@interface EZBAVParam : NSObject
+
+@property (nonatomic, assign) int32_t m_iCltRole; /**< 蹇呭~ 0 鍙戣捣 1 鎺ュ彈 鍙戣捣绔~鍐�0 鎺ュ彈绔~鍐�1 鎷掔粷涓�2 */
+@property (nonatomic, assign) int32_t m_iStreamType;/**< 蹇呴�� 0 闊宠棰� 1 瀵硅 2 浼氳*/
+//@property (nonatomic, assign) int32_t m_szIsNpq;/**< 閫夋嫨 0 涓嶈蛋NPQ锛岃蛋TCP 1 鏄疦PQ锛岃蛋UDP */
+@property (nonatomic, assign) int32_t m_iCltType; /**< 蹇呭~ 瀹㈡埛绔被鍨� */
+
+@property (nonatomic, strong) NSString *m_szVcAddr;//蹇呭~ 瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟鍦板潃
+@property (nonatomic, assign) int32_t m_iVcPort;//蹇呭~ 瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟绔痥鍙�
+@property (nonatomic, strong) NSString *m_szStsAddr; /**< 蹇呭~ 杞彂鏈嶅姟鍦板潃 */
+@property (nonatomic, assign) int32_t m_iStsPort; /**< 蹇呭~ 杞彂鏈嶅姟绔彛 */
+
+@property (nonatomic, assign) int32_t m_iRoomId; /**< 閫夋嫨 闇�瑕佸姞鍏ユ埧闂村彿锛屽彧鏈夋帴鍙楃闇�瑕佸~鍐� */
+@property (nonatomic, assign) int32_t m_iClientId; //閫夊~ 鍙戣捣or鍔犲叆鑰呯殑id
+@property (nonatomic, strong) NSString *m_szSelfId; /**< 蹇呭~ 鏍囪瘑Id */
+@property (nonatomic, assign) int32_t m_iReason; /**< 閫夋嫨 鍘熷洜 鎷掓帴鎺ュ惉101 鏃犱汉鎺ュ惉102 */
+
+//@property (nonatomic, assign) int32_t m_iMaxBitrate;/**< 蹇呭~ 鐮佺巼鍙樺寲鑼冨洿鐨勬渶澶у�� */
+//
+//@property (nonatomic, assign) int32_t m_iMinBitrate;/**< 蹇呭~ 鐮佺巼鍙樺寲鑼冨洿鐨勬渶灏忓�� */
+
+//@property (nonatomic, assign) int32_t m_iType;/**< 閫夋嫨 鍙傝�傿AV_QOS_TYPE */
+//
+//@property (nonatomic, assign) int32_t m_iVideo;/**< 閫夋嫨 鏄惁寮�鍚棰慟os 1 寮�鍚� 0 涓嶅紑鍚� */
+//
+//@property (nonatomic, assign) int32_t m_iAudio;/**< 閫夋嫨 鏄惁寮�鍚煶棰慟os 1 寮�鍚� 0 涓嶅紑鍚� */
+
+@property (nonatomic, assign) int32_t m_iAuthType; /**< 蹇呭~ 璁よ瘉鏂瑰紡 */
+@property (nonatomic, strong) NSString *m_szAuthToken; /**< 蹇呭~ 璁よ瘉token */
+
+
+
+@property (nonatomic, assign) int32_t m_iOtherCltType; /**< 閫夋嫨 鍙湁瀵圭鏄墜琛ㄧ闇�濉啓 */
+@property (nonatomic, strong) NSString *m_szOterId; /**< 閫夋嫨 鍙湁瀵圭鏄墜琛ㄧ闇�濉啓 */
+@property (nonatomic, assign) int32_t m_iChannel;//閫夊~ 涓夋柟闊宠棰戞椂锛孖PC璁惧闇�瑕佸~鍐�
+@property (nonatomic, assign) int32_t m_iDevStreamType;//閫夊~ 璁惧涓诲瓙鐮佹祦
+
+@property (nonatomic, strong) NSString *m_szExtensionParas; /**< 閫夋嫨 鎵╁睍瀛楁淇℃伅 */
+
+
+@end
+
+
+
+/// 涓庝細鑰呬俊鎭�
+@interface EZRTCParticipantsInfo : NSObject
+@property (nonatomic, assign) uint32_t m_uRoomId;
+@property (nonatomic, assign) uint32_t m_uClientId;
+@property (nonatomic, strong) NSString *m_sCustomId;
+@property (nonatomic, strong) NSString *m_szUserName;
+@property (nonatomic, assign) uint8_t m_iCltType; //鐢ㄤ互鍖哄垎鏄惁鏄澶� 111:璁惧
+@property (nonatomic, assign) int8_t audioState;// 澹伴煶鍚敤鐘舵�� 0-鍏抽棴 1-鍚敤
+@property (nonatomic, assign) int8_t videoState;// 瑙嗛鍚敤鐘舵�� 0-鍏抽棴 1-涓绘祦 5-涓诲瓙娴�
+@property (nonatomic, assign) int8_t shareState;// 灞忓箷鍏变韩鍚敤鐘舵�� 0-鍏抽棴 1-鍚敤
+@property (nonatomic, assign) int8_t upNetState;//缃戠粶鐘舵��
+@property (nonatomic, assign) int8_t downNetState;//缃戠粶鐘舵��
+
+@end
+
+
+@interface EZRTCParticipantVolume : NSObject
+@property (nonatomic, assign) uint32_t m_uClientId;
+@property (nonatomic, strong) NSString *m_sCustomId;
+@property (nonatomic, assign) uint8_t m_sVolume; //闊抽噺寮哄害0-10 10涓烘渶寮� 0涓烘渶寮�
+@end
+
+
+@interface EZRTCStatistic : NSObject
+@property (nonatomic, assign) int32_t type;//0锛氬瓙琛� 1锛氫富琛�
+@property (nonatomic, strong) NSDictionary *statisticInfo;
+@end
+
+///鏈湴鐨勯煶瑙嗛缁熻
+@interface EZRTCLocalStatistics : NSObject
+///瑙嗛鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t videoSentBitrate; //瑙嗛浼犺緭鐮佺巼(涓婅)
+@property (nonatomic, assign) uint32_t videoSentFrameRate; //甯х巼澶у皬
+@property (nonatomic, assign) uint16_t videoPacketLossRate; //瑙嗛涓㈠寘鐜�
+@property (nonatomic, assign) uint16_t videoStreamType; //娴佺被鍨�
+///闊抽鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t audioSentBitrate;//闊抽浼犺緭鐮佺巼
+@property (nonatomic, assign) uint16_t audioPacketLossRate;//闊抽涓㈠寘鐜�
+@end
+
+///杩滅鐨勯煶瑙嗛缁熻
+@interface EZRTCRemoteStatistics : NSObject
+///瑙嗛鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t videoClientId; //杩滅瑙嗛clientId
+@property (nonatomic, assign) uint32_t videoReceivedBitrate;//杩滅瑙嗛浼犺緭鐮佺巼锛堜笅琛岋級
+@property (nonatomic, assign) uint32_t videoReceivedFrameRate;//杩滅甯х巼澶у皬
+@property (nonatomic, assign) uint16_t videoPacketLossRate;//杩滅瑙嗛涓㈠寘鐜�(涓嬭)
+@property (nonatomic, assign) uint16_t videoTotalFrozenTime;//杩滅瑙嗛鎬荤殑鍗¢】鏃堕暱
+@property (nonatomic, assign) uint16_t videoFrozenRate; //杩滅瑙嗛鍗¢】姣�
+@property (nonatomic, assign) uint16_t streamType; //杩滅娴佺被鍨�
+///闊抽鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t audioClientId; //杩滅闊抽clientId
+@property (nonatomic, assign) uint32_t audioReceivedBitrate;//杩滅闊抽浼犺緭鐮佺巼锛堜笅琛岋級
+@property (nonatomic, assign) uint16_t audioPacketLossRate;//杩滅闊抽涓㈠寘鐜�(涓嬭)
+@property (nonatomic, assign) uint16_t audioTotalFrozenTime;//杩滅闊抽鎬荤殑鍗¢】鏃堕暱
+@property (nonatomic, assign) uint16_t audioFrozenRate; //杩滅闊抽鍗¢】姣�
+
+@end
+
+@interface EZRTCVideoSize : NSObject
+
+@property (nonatomic, assign) int width;//瀹�
+@property (nonatomic, assign) int height;//楂�
+
+@end
+
+extern int32_t const EZBAVMessageRoomCreated;
+extern int32_t const EZBAVMessagePeerEnteredRoom;
+extern int32_t const EZBAVMessagePeerLeaveRoom;
+extern int32_t const EZBAVMessageStartInputData;
+//extern int32_t const EZBAVMessageOtherDisconnect;
+extern int32_t const EZBAVMessageTransferData;
+//extern int32_t const EZBAVMessageClientInfo;//鍏朵粬涓庝細瀹㈡埛绔俊鎭�
+extern int32_t const EZBAVMessageClientVolume;//鍏朵粬涓庝細瀹㈡埛绔煶閲�
+extern int32_t const EZBAVMessageClientAudioAvailable;
+extern int32_t const EZBAVMessageClientVideoAvailable;
+extern int32_t const EZBAVMessageNetworkQuality;
+extern int32_t const EZBAVMessageClientShareAvailable;
+extern int32_t const EZBAVMessageJoinRoomOK;
+extern int32_t const EZBAVMessageForcedQuit;
+extern int32_t const EZBAVMessageStatistic;
+
+extern int32_t const EZBAVForcedQuitReasonRepeatJoin;//宸插湪鍏朵粬鍦版柟鍔犲叆鎴块棿
+extern int32_t const EZBAVForcedQuitReasonMovedOut;//琚鐞嗗憳绉诲嚭鎴块棿
+extern int32_t const EZBAVForcedQuitReasonRoomDissolved;//鎴块棿瑙f暎
+
+extern int32_t const EZBAVMessageLocalVideoStats;//缁熻鏈湴瑙嗛瀹炴椂鏁版嵁
+extern int32_t const EZBAVMessageLocalAudioStats;//缁熻鏈湴闊抽瀹炴椂鏁版嵁
+extern int32_t const EZBAVMessageRemoteVideoStats;//缁熻杩滅瑙嗛瀹炴椂鏁版嵁
+extern int32_t const EZBAVMessageRemoteAudioStats;//缁熻杩滅闊抽瀹炴椂鏁版嵁
+
+
+
+typedef void(^EZAudioOpenResultBlock)(NSInteger ret);
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCameraInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCameraInfo.h
new file mode 100644
index 0000000..9054b1e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCameraInfo.h
@@ -0,0 +1,35 @@
+//
+// EZCameraInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/15.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓洪�氶亾淇℃伅瀵硅薄
+@interface EZCameraInfo : NSObject
+
+/// 鎽勫儚澶村悕绉�
+@property (nonatomic, copy) NSString *cameraName;
+/// 閫氶亾鍙�
+@property (nonatomic) NSInteger cameraNo;
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 鍒嗕韩鐘舵�侊細0銆佹湭鍒嗕韩锛�1銆佸垎浜墍鏈夎�咃紝2銆佸垎浜帴鍙楄�咃紙琛ㄧず姝ゆ憚鍍忓ご鏄埆浜哄垎浜粰鎴戠殑锛�
+@property (nonatomic) NSInteger isShared;
+/// 閫氶亾灏侀潰
+@property (nonatomic, copy) NSString *cameraCover;
+/// 瑙嗛璐ㄩ噺锛�0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+@property (nonatomic) NSInteger videoLevel;
+//鏉冮檺
+@property (nonatomic) NSInteger permission;
+/// 閫氶亾鏀寔鐨勬竻鏅板害淇℃伅鍒楄〃锛孍ZVideoQualityInfo瀵硅薄鍒楄〃銆�(/api/device/list 杩斿洖鐨�"videoQualityInfos" 鏈夎锛屼互/api/device/detail 鎺ュ彛杩斿洖涓哄噯)
+@property (nonatomic, strong) NSArray *videoQualityInfos;
+
+/// 璁惧鏄惁寮�鍚姞瀵�
+@property (nonatomic) BOOL isEncrypt;
+/// 璁惧鐘舵�侊紝1-鍦ㄧ嚎锛�2-涓嶅湪绾�
+@property (nonatomic) NSInteger status;
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCloudRecordDownloadTask.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCloudRecordDownloadTask.h
new file mode 100644
index 0000000..174ee40
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCloudRecordDownloadTask.h
@@ -0,0 +1,34 @@
+//
+// EZCloudRecordDownloadTask.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/7/2.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import "EZRecordDownloadTask.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class EZCloudRecordFile;
+
+@interface EZCloudRecordDownloadTask : EZRecordDownloadTask
+
+/**
+ 浜戝瓨鍌ㄥ綍鍍忎笅杞戒换鍔″垵濮嬪寲銆�
+ 涓嬭浇鐨勫綍鍍忎负PS鏂囦欢锛屽闇�杞崲MP4锛岃鑷璋冪敤EZVideoTransformer绫荤殑杞皝瑁呮柟娉�
+
+ @param taskID 涓嬭浇浠诲姟鍞竴鏍囪瘑ID
+ @param recordFile 浜戝瓨鍌ㄥ綍鍍忔枃浠�
+ @param verifyCode 璁惧楠岃瘉鐮�
+ @param savePath 涓嬭浇瀛樺偍璺緞
+ @return 鍒濆鍖栨垚鍔熻繑鍥炲疄渚嬶紝澶辫触杩斿洖nil
+ */
+- (instancetype) initTaskWithID:(NSUInteger)taskID
+ cloudRecordFile:(EZCloudRecordFile *)recordFile
+ verifyCode:(NSString *)verifyCode
+ savePath:(NSString *)savePath;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCloudRecordFile.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCloudRecordFile.h
new file mode 100644
index 0000000..f8c693f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZCloudRecordFile.h
@@ -0,0 +1,36 @@
+//
+// EZCloudFile.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/17.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓轰簯瀛樺偍褰曞儚鏂囦欢瀵硅薄
+@interface EZCloudRecordFile : NSObject
+
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 璁惧閫氶亾鍙�
+@property (nonatomic, assign) NSInteger cameraNo;
+/// 浜戝瓨鍌ㄥ綍鍍忔枃浠禝d
+@property (nonatomic, copy) NSString *fileId;
+/// 浜戝瓨鍌ㄥ綍鍍忔枃浠跺紑濮嬫椂闂�
+@property (nonatomic, strong) NSDate *startTime;
+/// 浜戝瓨鍌ㄥ綍鍍忔枃浠剁粨鏉熸椂闂�
+@property (nonatomic, strong) NSDate *stopTime;
+/// 浜戝瓨鍌ㄥ綍鍍忔埅鍥惧湴鍧�
+@property (nonatomic, copy) NSString *coverPic;
+/// 浜戝瓨鍌ㄥ綍鍍忎笅杞藉湴鍧�
+@property (nonatomic, copy) NSString *downloadPath;
+/// 浜戝瓨鍌ㄥ浘鐗囧姞瀵嗗瘑鐮侊紝濡傛灉鏄痆NSNull null]鎴栬�卬il鎸囬拡鍒欏浘鐗囦笉鍔犲瘑
+@property (nonatomic, copy) NSString *encryption;
+/// 鏂囦欢澶у皬
+@property (nonatomic, assign) NSUInteger fileSize;
+
+@property (nonatomic, assign) int32_t istorageVersion; //浜戝瓨鍌ㄧ被鍒�:1 鍗曟枃浠跺瓨鍌ㄦā寮忥紱2 杩炵画瀛樺偍妯″紡锛�3 寰呭畾
+@property (nonatomic, assign) int32_t videoType;//浜戝瓨鍌ㄥ綍鍍忕被鍨嬶紝榛樿涓�0锛岃〃绀轰笉灞炰簬浜戝瓨鍌ㄥ綍鍍�
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConferenceClient.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConferenceClient.h
new file mode 100644
index 0000000..43d478e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConferenceClient.h
@@ -0,0 +1,238 @@
+//
+// EZBAVClient.h
+// EZBAVClient
+//
+// Created by kanhaiping on 2018/6/26.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "EZBAVParam.h"
+#import "EZRTCMediaSessionDefines.h"
+#import "EZVideoTalkView.h"
+
+
+
+@class EZConferenceClient;
+@class EZRTCCameraParam;
+@class EZRTCVideoEncodeParam;
+
+@protocol EZConferenceClientDelegate<NSObject>
+
+
+/// 閿欒鍥炶皟
+/// @param client client
+/// @param errorCode 鍑洪敊鐨勯敊璇爜
+- (void)bavClient:(EZConferenceClient *)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 闄勫姞淇℃伅锛�
+ 濡傛灉鏄疎ZBAVMessagePeerEnteredRoom锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId銆乵_szUserName瀛楁鏈夋晥
+ 濡傛灉鏄疎ZBAVMessagePeerLeaveRoom娑堟伅锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId瀛楁鏈夋晥
+ 濡傛灉鏄疎ZBAVMessageClientVolume娑堟伅锛宮sg鏄疎ZBAVParticipantVolume瀵硅薄
+ 濡傛灉娑堟伅鏄� EZBAVMessageTransferData msg鏄� msg鏄瓧绗︿覆 @"瀹為檯鐨勯�忎紶娑堟伅"
+ 濡傛灉娑堟伅鏄疎ZBAVMessageClientAudioAvailable锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜宎udioState瀛楁鏈夋晥
+ 濡傛灉娑堟伅鏄疎ZBAVMessageClientVideoAvailable 锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜寁ideoState瀛楁鏈夋晥
+ 濡傛灉娑堟伅鏄疎ZBAVMessageNetworkQuality 锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜宯etState瀛楁鏈夋晥
+ 濡傛灉娑堟伅鏄疎ZBAVMessageJoinRoomOK 锛宮sg鏄痭il
+ 濡傛灉娑堟伅鏄疎ZBAVMessageForcedQuit 锛宮sg鏄疦SNumber锛屾瘮濡侤(EZBAVForcedQuitReasonMovedOut)
+ 濡傛灉娑堟伅鏄疎ZBAVMessageStatistic锛宮sg鏄疎ZRTCStatistic
+
+ */
+- (void)bavClient:(EZConferenceClient *)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+@optional
+
+///**
+// 鍥炶皟娑堟伅 bavclient log鍥炶皟
+//
+// @param client client
+// @param msg 閫忎紶娑堟伅
+// */
+//- (void)bavClient:(EZVideoTalk *)client didReceivedBavClientLogMsg:(NSString*)msg;
+
+/**
+ 鏄剧ず鍥炶皟锛岄娆$敾闈㈠嚭鏉ヤ互鍙婂悗缁敾闈㈠昂瀵稿彂鐢熷彉鍖栨椂鍥炶皟
+
+ @param client client
+ @param width 鐢婚潰瀹藉害
+ @param height 鐢婚潰楂樺害
+ */
+- (void)bavClient:(EZConferenceClient *)client didDisplayWidth:(int32_t)width height:(int32_t)height ofRemoteClient:(int)clientID;
+
+/**
+ 鎾斁鍗¢】
+
+ @param client client
+ @param delayTime 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZConferenceClient *)client playDelayTime:(int32_t)delayTime ofRemoteClient:(int)clientID;
+
+/**
+ 鎾斁鍗¢】缁熻
+
+ @param client client
+ @param delayTimeStat 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZConferenceClient *)client playDelayTimeStatistics:(double)delayTimeStat ofRemoteClient:(int)clientID;
+
+/**
+ 鏈湴瑙嗛鏁版嵁鍥炶皟
+
+ @param localVideoStatistics 瑙嗛鐩稿叧鍙傛暟
+ @param width 瀹藉害
+ @param height 楂樺害
+ */
+- (void)onLocalVideoStats:(EZRTCLocalStatistics *)localVideoStatistics width:(int)width height:(int)height;
+
+/**
+ 鏈湴闊抽鏁版嵁鍥炶皟
+
+ @param localAudioStatistics 闊抽鐩稿叧鍙傛暟
+ */
+- (void)onLocalAudioStats:(EZRTCLocalStatistics *)localAudioStatistics;
+
+/**
+ 杩滅瑙嗛鏁版嵁鍥炶皟
+
+ @param remoteVideoStatistics 瑙嗛鐩稿叧鍙傛暟
+ @param width 瀹藉害
+ @param height 楂樺害
+ */
+- (void)onRemoteVideoStats:(EZRTCRemoteStatistics *)remoteVideoStatistics width:(int)width height:(int)height;
+
+/**
+ 杩滅闊抽鏁版嵁鍥炶皟
+
+ @param remoteAudioStatistics 闊抽鐩稿叧鍙傛暟
+ */
+- (void)onRemoteAudioStats:(EZRTCRemoteStatistics *)remoteAudioStatistics;
+
+
+@end
+
+@interface EZConferenceClient : NSObject
+
+@property (nonatomic, weak) id<EZConferenceClientDelegate> delegate;
+@property (nonatomic, assign, readonly) int32_t roomID;
+@property (nonatomic, assign, readonly) int32_t clientID;
+
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+/// 鍔犲叆浼氳锛堟柊鎺ュ彛锛�
+/// @param param 鍙傛暟
+- (NSInteger)enterRoom:(EZRTCJoinParam *)param;
+
+
+/// 閫�鍑轰細璁�
+- (NSInteger)exitRoom;
+
+
+/// 瑙f暎浼氳锛岃В鏁e悗锛屽叾浠栦笌浼氳�呬細鏀跺埌浼氳琚В鏁f秷鎭�
+- (void)dissolveRoom;
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableLocalVideo:(BOOL)enable;
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalView:(nullable EZVideoTalkView *)localWin;
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableLocalAudio:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
+
+/// 鏄惁寮�鍚緟娴侊紝杈呮祦鍒嗚鲸鐜囨洿浣庛�佺爜鐜囨洿灏�
+/// @param enable 鏄惁寮�鍚�
+/// @param encodeParam 缂栫爜鍙傛暟锛屽彲浠ヤ紶鍏il
+- (NSInteger)enableLocalSmallVideo:(BOOL)enable;
+
+
+/// 寮�鍚睆骞曞叡浜�
+/// @param name 鍏变韩鍚嶇О
+/// @param resultBlock 灞忓箷鍏变韩缁撴灉鍥炶皟
+/// @param didFinishBlock 灞忓箷鍏变韩缁撴潫鍥炶皟锛屽湪姝e父鐨勫睆骞曞叡浜粨鏉熺粨鏉熷悗鍥炶皟
+- (void)startScreenShareWithName:(NSString *)name
+ withResultBlock:(EZScreenShareResultBlock)resultBlock
+ andEndedBlock:(dispatch_block_t)didFinishBlock;
+
+
+/// 缁撴潫灞忓箷鍏变韩
+- (void)stopScreenShare;
+
+
+/// 璁剧疆杩滅▼绐楀彛锛�1.蹇呴』鍦ㄦ嬁鍒拌繙绔鎴风鍔犲叆鐨勬秷鎭悗璁剧疆锛�2.蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param window 鎾斁绐楀彛
+/// @param clientID 鍔犲叆鐨勫鎴风鐨処D
+/// @param streamType 1瑙嗛 4灏忔祦
+- (int32_t)setRemoteView:(nullable UIView *)window ofClient:(int32_t)clientID withStream:(NSInteger)streamType;
+
+/// 璁剧疆瑙傜湅灞忓箷鍏变韩鐨勭獥鍙�,蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param view 绐楀彛
+- (int32_t)setScreenShareView:(UIView *_Nullable)view;
+
+
+/// 閭�璇疯澶囧姞鍏ヤ細璁�
+/// @param dev 璁惧淇℃伅
+- (int32_t)inviteDev:(EZBAVDevInfo *_Nonnull)dev;
+
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+- (EZRTCStatistic *_Nullable)getStatistic;
+
+#pragma 闄勫姞鎺ュ彛
+
+/// 寮�鍏充細璁腑鏌愪釜涓庝細鑰呯殑澹伴煶锛岄粯璁ゅ紑
+/// @param open YES:寮�锛孨O:鍏�
+- (int32_t)soundCtrl:(BOOL)open forClient:(int32_t)clientID;
+
+
+
+/// 寮傛鑾峰彇鏈湴鎶撳浘
+/// @param block 鎶撳浘鎴愬姛鍥炶皟锛屽け璐mage涓簄il
+//- (void)localScreenShotWithBlock:(void (^)(UIImage *image))block;
+
+/// 鑾峰彇杩滅鎶撳浘
+/// @param quality 鍘嬬缉璐ㄩ噺 0 ~ 100
+//- (UIImage *)remoteScreenShotWithQuality:(int)quality;
+
+/// 鏈湴褰曞埗
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+- (BOOL)startLocalVideoRecordWithPath:(NSString *)path;
+
+/// 鍋滄鏈湴褰曞埗
+- (BOOL)stopLocalVideoRecord;
+
+/// 寮�濮嬭繙绔綍鍒� mp4
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+- (BOOL)startRemoteVideoRecordWithPath:(NSString *)path forClient:(int32_t)clientID;
+
+
+/// 鍋滄杩滅褰曞埗
+- (BOOL)stopRemoteVideoRecordForClient:(int32_t)clientID;
+
+
+/// 鍙戦�侀�忎紶娑堟伅鎺ュ彛锛屽悓姝ユ帴鍙o紝鍙兘鑰楁椂
+/// @param msg 娑堟伅鍐呭锛屾瘮濡俲son鏁版嵁
+- (int)sendTransferMsg:(NSString *)msg;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConfigTokenInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConfigTokenInfo.h
new file mode 100644
index 0000000..9b9a949
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConfigTokenInfo.h
@@ -0,0 +1,21 @@
+//
+// EZConfigTokenInfo.h
+// EZWiFiConfigSDK
+//
+// Created by yuqian on 2020/7/30.
+// Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZConfigTokenInfo : NSObject
+
+@property (nonatomic, copy) NSString *userId;
+@property (nonatomic, copy) NSString *token;
+@property (nonatomic, copy) NSString *lbsDomain;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants.h
new file mode 100644
index 0000000..edc3b24
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants.h
@@ -0,0 +1,222 @@
+//
+// EZConstants.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 16/7/20.
+// Copyright 漏 2016骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+//钀ょ煶寮�鏀惧钩鍙板鎵樻柟娉�
+@protocol EZOpenSDKDelegate <NSObject>
+
+@optional
+
+/**
+ 钀ょ煶鐧诲綍鏄惁鎴愬姛
+
+ @param result 鏄惁鎴愬姛
+ */
+- (void)ezvizLoginResult:(BOOL)result;
+
+@end
+
+/* EZOpenSDK鐨勯敊璇畾涔� */
+typedef NS_ENUM(NSInteger, EZErrorCode) {
+ /**
+ * 瀵硅閿欒鐮�
+ */
+ EZ_DEVICE_TTS_REQUEST_TIMEOUT = 360001, //瀹㈡埛绔姹傝秴鏃�
+ EZ_DEVICE_TTS_TALKING_TIMEOUT = 360002, //瀵硅鍙戣捣瓒呮椂
+ EZ_DEVICE_TTS_DEVICE_CONNECT_ERROR = 360003, //TTS鐨勮澶囩鍙戠敓閿欒
+ EZ_DEVICE_TTS_INTER_ERROR = 360004, //TTS鍐呴儴鍙戠敓閿欒
+ EZ_DEVICE_TTS_SEND_ERROR = 360005, //瀹㈡埛绔彂閫佺殑娑堟伅閿欒
+ EZ_DEVICE_TTS_RECEIVE_ERROR = 360006, //瀹㈡埛绔帴鏀跺彂鐢熼敊璇�
+ EZ_DEVICE_TTS_CLOSE_CONNECT = 360007, //TTS鍏抽棴浜嗕笌瀹㈡埛绔殑杩炴帴
+ EZ_DEVICE_TTS_TALKING = 360010, //璁惧姝e湪瀵硅涓�
+ EZ_DEVICE_TTS_PRIVACY_PROTECT = 360013, //璁惧寮�鍚簡闅愮淇濇姢
+ EZ_DEVICE_TTS_INIT_ERROR = 360102, //TTS鍒濆鍖栧け璐�
+
+
+ /**
+ * 鍙栨祦閿欒鐮�
+ */
+ EZ_DEVICE_IS_PRIVACY_PROTECTING = 380011, //璁惧闅愮淇濇姢涓�
+ EZ_DEVICE_CONNECT_COUNT_LIMIT = 380045, //璁惧鐩磋繛鍙栨祦杩炴帴鏁伴噺杩囧ぇ
+ EZ_DEVICE_COMMAND_NOT_SUPPORT = 380047, //璁惧涓嶆敮鎸佽鍛戒护
+ EZ_DEVICE_CAS_TALKING = 380077, //璁惧姝e湪瀵硅涓�
+ EZ_DEVICE_CAS_REC_ERROR = 380102, //鏁版嵁鎺ユ敹寮傚父
+ EZ_DEVICE_CAS_PARSE_ERROR = 380205, //璁惧妫�娴嬪叆鍙傚紓甯�
+ EZ_PLAY_TIMEOUT = 380209, //缃戠粶杩炴帴瓒呮椂
+ EZ_DEVICE_TIMEOUT = 380212, //璁惧绔綉缁滆繛鎺ヨ秴鏃�
+ EZ_STREAM_CLIENT_TIMEOUT = 390038, //鍚屾椂`390037`鎵嬫満缃戠粶寮曡捣鐨勫彇娴佽秴鏃�
+ EZ_STREAM_CLIENT_NOT_FIND_FILE = 395402, //鍥炴斁鎵句笉鍒板綍鍍忔枃浠讹紝妫�鏌ヤ紶鍏ョ殑鍥炴斁鏂囦欢鏄惁姝g‘
+ EZ_STREAM_CLIENT_OFFLINE = 395404, //璁惧涓嶅湪绾�
+ EZ_STREAM_CLIENT_TOKEN_INVALID = 395406, //鍙栨祦token楠岃瘉澶辨晥
+ EZ_STREAM_CLIENT_PRIVACY_PROTECT = 395409, //棰勮寮�鍚殣绉佷繚鎶�,鍙互鍦ㄨ悿鐭充簯APP涓叧闂�
+ EZ_STREAM_CLIENT_DEVICE_COUNT_LIMIT = 395410, //璁惧杩炴帴鏁拌繃澶�,鏈夎繃澶氱殑缁堢姝e湪瀵硅璁惧杩涜鍙栨祦鎿嶄綔
+ EZ_STREAM_CLIENT_TOKEN_LIMIT = 395411, //token鏃犳潈闄�
+ EZ_STREAM_CLIENT_CAMERANO_ERROR = 395415, //璁惧閫氶亾閿�
+ EZ_STREAM_CLIENT_TYPE_UNSUPPORT = 395451, //璁惧涓嶆敮鎸佺殑鐮佹祦绫诲瀷
+ EZ_STREAM_CLIENT_CONNECT_SERVER_ERROR = 395452, //璁惧杩炴帴棰勮娴佸獟浣撴湇鍔″櫒澶辫触
+ EZ_STREAM_CLIENT_SESSION_NOT_EXIST = 395454, //浼氳瘽涓嶅瓨鍦�
+ EZ_STREAM_CLIENT_SAME_REQUEST = 395491, //鐩稿悓璇锋眰姝e湪澶勭悊锛屾嫆缁濇湰娆″鐞�
+ EZ_STREAM_CLIENT_INNER_ERROR = 395500, //娴佸獟浣撴湇鍔″櫒鍐呴儴澶勭悊閿欒
+ EZ_STREAM_CLIENT_NO_SOURCE = 395544, //璁惧杩斿洖鏃犺棰戞簮
+ EZ_STREAM_CLIENT_VIDEO_OUT_SHARE_TIME = 395545, //瑙嗛鍒嗕韩鏃堕棿宸茬粡缁撴潫
+ EZ_STREAM_CLIENT_LIMIT = 395546, //璁惧鍙栨祦鍙楀埌闄愬埗锛屽崌绾т紒涓氱増鍙斁寮�闄愬埗
+ EZ_STREAM_CLIENT_DEVICE_OUT_SHARE_TIME = 395600, //鍒嗕韩璁惧涓嶅湪鍒嗕韩鏃堕棿鍐�
+
+ /**
+ * HTTP 閿欒鐮�
+ */
+ EZ_HTTPS_PARAM_ERROR = 110001, //璇锋眰鍙傛暟閿欒
+ EZ_HTTPS_ACCESS_TOKEN_INVALID = 110002, //AccessToken鏃犳晥
+ EZ_HTTPS_ACCESS_TOKEN_EXPIRE = 110003, //AccessToken杩囨湡
+ EZ_HTTPS_REGIST_USER_NOT_EXSIT = 110004, //娉ㄥ唽鐢ㄦ埛涓嶅瓨鍦�
+ EZ_HTTPS_APPKEY_ERROR = 110005, //AppKey寮傚父
+ EZ_HTTPS_IP_LIMIT = 110006, //ip鍙楅檺
+ EZ_HTTPS_INVOKE_LIMIT = 110007, //璋冪敤娆℃暟杈惧埌涓婇檺
+ EZ_HTTPS_USER_BINDED = 110012, //绗笁鏂硅处鎴蜂笌钀ょ煶璐﹀彿宸茬粡缁戝畾
+ EZ_HTTPS_APPKEY_IS_NULL = 110017, //AppKey涓嶅瓨鍦�
+ EZ_HTTPS_APPKEY_NOT_MATCHED = 110018, //AppKey涓嶅尮閰嶏紝璇锋鏌ユ湇鍔$璁剧疆鐨刟ppKey鏄惁鍜孲DK浣跨敤鐨刟ppKey涓�鑷�
+ EZ_HTTPS_CAMERA_NOT_EXISTS = 120001, //閫氶亾涓嶅瓨鍦紝璇锋鏌ユ憚鍍忓ご璁惧鏄惁閲嶆柊娣诲姞杩�
+ EZ_HTTPS_DEVICE_NOT_EXISTS = 120002, //璁惧涓嶅瓨鍦�
+ EZ_HTTPS_DEVICE_NETWORK_ANOMALY = 120006, //缃戠粶寮傚父
+ EZ_HTTPS_DEVICE_OFFLINE = 120007, //璁惧涓嶅湪绾�
+ EZ_HTTPS_DEIVCE_RESPONSE_TIMEOUT = 120008, //璁惧璇锋眰鍝嶅簲瓒呮椂寮傚父
+ EZ_HTTPS_DEVICE_VALICATECODE_ERROR = 120010, //璁惧楠岃瘉鐮侀敊璇�
+ EZ_HTTPS_ILLEGAL_DEVICE_SERIAL = 120014, //涓嶅悎娉曠殑搴忓垪鍙�
+ EZ_HTTPS_DEVICE_STORAGE_FORMATTING = 120016, //璁惧姝e湪鏍煎紡鍖栫鐩�
+ EZ_HTTPS_DEVICE_ADDED_MYSELF = 120017, //鍚宍120020`璁惧宸茬粡琚嚜宸辨坊鍔�
+ EZ_HTTPS_USER_NOT_OWN_THIS_DEVICE = 120018, //璇ョ敤鎴蜂笉鎷ユ湁璇ヨ澶�
+ EZ_HTTPS_DEVICE_UNSUPPORT_CLOUD = 120019, //璁惧涓嶆敮鎸佷簯瀛樺偍鏈嶅姟
+ EZ_HTTPS_DEVICE_ONLINE_ADDED = 120020, //璁惧鍦ㄧ嚎锛岃鑷繁娣诲姞
+ EZ_HTTPS_DEVICE_ONLINE_NOT_ADDED = 120021, //璁惧鍦ㄧ嚎锛屾湭琚敤鎴锋坊鍔�
+ EZ_HTTPS_DEVICE_ONLINE_IS_ADDED = 120022, //璁惧鍦ㄧ嚎锛屽凡缁忚鍒殑鐢ㄦ埛娣诲姞
+ EZ_HTTPS_DEVICE_OFFLINE_NOT_ADDED = 120023, //璁惧涓嶅湪绾匡紝鏈鐢ㄦ埛娣诲姞
+ EZ_HTTPS_DEVICE_OFFLINE_IS_ADDED = 120024, //璁惧涓嶅湪绾匡紝宸茬粡琚埆鐨勭敤鎴锋坊鍔�
+ EZ_HTTPS_DEVICE_OFFLINE_IS_ADDED_MYSELF = 120029, //璁惧涓嶅湪绾匡紝浣嗘槸宸茬粡琚嚜宸辨坊鍔�
+ EZ_HTTPS_DEVICE_BUNDEL_STATUS_ON = 120031, //鍚屾椂`106002`閿欒鐮佷篃鏄紝璁惧寮�鍚簡缁堢缁戝畾锛岃鍒拌悿鐭充簯瀹㈡埛绔叧闂粓绔粦瀹�
+ EZ_HTTPS_OPERATE_LEAVE_MSG_FAIL = 120202, //鎿嶄綔鐣欒█娑堟伅澶辫触
+ EZ_HTTPS_SERVER_DATA_ERROR = 149999, //鏁版嵁寮傚父
+ EZ_HTTPS_SERVER_ERROR = 150000, //鏈嶅姟鍣ㄥ紓甯�
+ EZ_HTTPS_CLOUD_DELETE_ALL_EXCEPT_LAST = 150002, //浜戝瓨鍌ㄨ棰戝垹闄ゅ畬鎴愶紝闄や簡鏈�鍚庝竴涓湪褰曞埗鐨勮棰戞棤娉曞垹闄�
+ EZ_HTTPS_DEVICE_PTZ_NOT_SUPPORT = 160000, //璁惧涓嶆敮鎸佷簯鍙版帶鍒�
+ EZ_HTTPS_DEVICE_PTZ_NO_PERMISSION = 160001, //鐢ㄦ埛娌℃湁鏉冮檺鎿嶄綔浜戝彴鎺у埗
+ EZ_HTTPS_DEVICE_PTZ_UPPER_LIMIT = 160002, //浜戝彴杈惧埌涓婇檺浣嶏紙椤堕儴锛�
+ EZ_HTTPS_DEVICE_PTZ_FLOOR_LIMIT = 160003, //浜戝彴杈惧埌涓嬮檺浣嶏紙搴曢儴锛�
+ EZ_HTTPS_DEVICE_PTZ_LEFT_LIMIT = 160004, //浜戝彴杈惧埌宸﹂檺浣嶏紙鏈�宸﹁竟锛�
+ EZ_HTTPS_DEVICE_PTZ_RIGHT_LIMIT = 160005, //浜戝彴杈惧埌鍙抽檺浣嶏紙鏈�鍙宠竟锛�
+ EZ_HTTPS_DEVICE_PTZ_FAILED = 160006, //浜戝彴鎿嶄綔澶辫触
+ EZ_HTTPS_DEVICE_PTZ_RESETING = 160009, //浜戝彴姝e湪璋冪敤棰勭疆鐐�
+ EZ_HTTPS_DEVICE_COMMAND_NOT_SUPPORT = 160020, //璁惧鎶撳浘澶辫触锛屼笉鏀寔鎶撳浘
+
+ /**
+ * 鎺ュ彛 閿欒鐮�(SDK鏈湴鏍¢獙)
+ */
+ EZ_SDK_PARAM_ERROR = 400002, //鎺ュ彛鍙傛暟閿欒
+ EZ_SDK_NOT_SUPPORT_TALK = 400025, //璁惧涓嶆敮鎸佸璁�
+ EZ_SDK_TIMEOUT = 400034, //鏃犳挱鏀総oken锛岃stop鍐峴tart鎾斁鍣�
+ EZ_SDK_NEED_VALIDATECODE = 400035, //闇�瑕佽澶囬獙璇佺爜
+ EZ_SDK_VALIDATECODE_NOT_MATCH = 400036, //璁惧楠岃瘉鐮佷笉鍖归厤
+ EZ_SDK_DECODE_TIMEOUT = 400041, //瑙g爜瓒呮椂锛屽彲鑳芥槸楠岃瘉鐮侀敊璇�
+ EZ_SDK_STREAM_TIMEOUT = 400015, //鍙栨祦瓒呮椂,璇锋鏌ユ墜鏈虹綉缁�
+ EZ_SDK_PLAYBACK_STREAM_TIMEOUT = 400409, //鍥炴斁鍙栨祦瓒呮椂,璇锋鏌ユ墜鏈虹綉缁�
+
+ /**
+ * NPC鍙栨祦閿欒鐮�
+ */
+ EZ_NPC_CLIENT_PARAMETER_ERROR = 500001, //鍙傛暟閿欒
+ EZ_NPC_CLIENT_ORDER_ERROR = 500002, //璋冪敤椤哄簭鍑洪敊
+ EZ_NPC_CLIENT_MEMORY_ERROR = 500003, //鍒嗛厤鍐呭瓨澶辫触
+ EZ_NPC_CLIENT_BUFFER_OVERFLOW_ERROR = 500004, //缂撳啿鍖烘孩鍑�
+ EZ_NPC_CLIENT_SYSTEM_NO_SUPPORT_ERROR = 500005, //绯荤粺涓嶆敮鎸�
+ EZ_NPC_CLIENT_INVALID_PORT_ERROR = 500006, //鏃犳晥绔彛
+ EZ_NPC_CLIENT_STREAM_CLOSE_ERROR = 500101, //娴佸叧闂�
+ EZ_NPC_CLIENT_TRACK_CLOSE_ERROR = 500102, //TRACK_CLOSE
+ EZ_NPC_CLIENT_NPCCREATE_ERROR = 500103, //鍒涘缓澶辫触
+ EZ_NPC_CLIENT_TRSCREATE_ERROR = 500104, //TRSCREATE_ERROR
+ EZ_NPC_CLIENT_FAIL_UNKNOWN_ERROR = 509999, //FAIL_UNKNOWN
+};
+
+/* 璁惧ptz鍛戒护锛屽畾涔夌殑鍊间笌Android瀹氫箟鐨勪笉涓�鏍凤紝SDK浼氬湪鍐呴儴浼氬仛涓�灞傝浆鎹� */
+typedef NS_OPTIONS(NSUInteger, EZPTZCommand) {
+ EZPTZCommandLeft = 1 << 0, //鍚戝乏鏃嬭浆
+ EZPTZCommandRight = 1 << 1, //鍚戝彸鏃嬭浆
+ EZPTZCommandUp = 1 << 2, //鍚戜笂鏃嬭浆
+ EZPTZCommandDown = 1 << 3, //鍚戜笅鏃嬭浆
+ EZPTZCommandZoomIn = 1 << 4, //闀滃ご鎷夎繘
+ EZPTZCommandZoomOut = 1 << 5, //闀滃ご鎷夎繙
+};
+
+/*
+ * 璁惧鏄剧ず鍛戒护
+ */
+typedef NS_OPTIONS(NSUInteger, EZDisplayCommand) {
+ EZDisplayCommandCenter = 1 << 0, //鏄剧ず涓棿
+};
+
+/**
+ * 璁惧ptz鍔ㄤ綔鍛戒护
+ */
+typedef NS_ENUM(NSInteger, EZPTZAction) {
+ EZPTZActionStart = 1, //ptz寮�濮�
+ EZPTZActionStop = 2 //ptz鍋滄
+};
+
+/* 娑堟伅鐘舵�� */
+typedef NS_ENUM(NSInteger, EZMessageStatus) {
+ EZMessageStatusRead = 1, //宸茶
+};
+
+/* 娑堟伅绫诲瀷 */
+typedef NS_ENUM(NSInteger, EZMessageType)
+{
+ EZMessageTypeAlarm = 1, //鍛婅绫诲瀷
+ EZMessageTypeLeave, //鐣欒█绫诲瀷
+};
+
+/* 鐣欒█娑堟伅绫诲瀷 */
+typedef NS_ENUM(NSInteger, EZLeaveMessageType)
+{
+ EZLeaveMessageTypeAll, //鍏ㄩ儴
+ EZLeaveMessageTypeVoice, //璇煶绫�
+ EZLeaveMessageTypeVideo, //瑙嗛绫�
+};
+
+/* 璁惧甯冮槻鐘舵�佹灇涓剧被鍨� */
+typedef NS_ENUM(NSInteger, EZDefenceStatus) {
+ EZDefenceStatusOffOrSleep = 0, //A1璁惧鐫$湢妯″紡鎴栬�呴潪A1璁惧鐨勬挙闃茬姸鎬�
+ EZDefenceStatusOn = 1, //闈濧1璁惧鐨勫竷闃茬姸鎬�
+ EZDefenceStatusAtHome = 8, //A1鍦ㄥ妯″紡
+ EZDefenceStatusOuter = 16, //A1澶栧嚭妯″紡
+};
+
+/* 閫氶亾娓呮櫚搴︼紝璇锋敞鎰忎笉鏄墍鏈夎澶囬兘鏈夎繖浜涙竻鏅板害鐨勶紝璇锋牴鎹疄闄呭満鏅娇鐢� */
+typedef NS_ENUM(NSInteger, EZVideoLevelType) {
+ EZVideoLevelLow = 0, //娴佺晠
+ EZVideoLevelMiddle = 1, //鍧囪
+ EZVideoLevelHigh = 2, //楂樻竻
+ EZVideoLevelSuperHigh = 3 //瓒呮竻
+};
+
+/* 褰曞儚绫诲瀷 */
+typedef NS_ENUM(NSUInteger, EZVideoRecordType) {
+ EZVideoRecordTypeAll, // 鎵�鏈夌被鍨�
+ EZVideoRecordTypeCMR, // 瀹氭椂褰曞儚
+ EZVideoRecordTypeEvent // 浜嬩欢绫诲瀷
+};
+
+/* 浜戝瓨鍌ㄥ綍鍍忕被鍨� */
+typedef NS_ENUM(NSInteger, EZCloudVideoType) {
+ EZCloudVideoTypeAll = -1, // 鍏ㄩ儴褰曞儚
+ EZCloudVideoTypeSeries = 1, // 杩炵画褰曞儚
+ EZCloudVideoTypeAct = 2 // 娲诲姩褰曞儚
+};
+
+/// 寮�鏀惧钩鍙板父閲忕被
+@interface EZConstants : NSObject
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants_Auth.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants_Auth.h
new file mode 100644
index 0000000..1d70767
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants_Auth.h
@@ -0,0 +1,52 @@
+//
+// EZConstants_Auth.h
+// Auth
+//
+// Created by JuneCheng on 2022/5/18.
+//
+
+#import <Foundation/Foundation.h>
+
+// 钀ょ煶寮�鏀惧钩鍙板鎵樻柟娉�
+@protocol EZAuthSDKDelegate <NSObject>
+
+@optional
+
+/**
+ 钀ょ煶鐧诲綍鏄惁鎴愬姛
+
+ @param result 鏄惁鎴愬姛
+ */
+- (void)ezvizLoginResult:(BOOL)result;
+
+@end
+
+/* 钀ょ煶鐮斿彂鐨凙PP */
+typedef NS_ENUM(NSInteger, EZAppType) {
+ EZEzviz = 0, // 钀ょ煶浜戣棰戝浗鍐呯増
+ EZEzvizInternational = 1, // 钀ょ煶浜戣棰戞捣澶栫増
+ EZHIKConnect = 2, // HIK-Connect
+};
+
+/* 钀ょ煶璐熻矗鐮斿彂鐨凙PP */
+typedef NS_ENUM(NSInteger, EZAppPageType) {
+ EZPageDeviceList = 0, // 璁惧鍒楄〃椤甸潰
+ EZPageAlarmList = 1, // 鍛婅娑堟伅鍒楄〃椤甸潰
+};
+
+///闇�瑕佽繘琛岄噸鏂扮櫥褰曠殑閫氱煡锛岃閫氱煡瑙﹀彂棰戠巼涓�5骞翠竴娆★紝闇�鍦⊿DK鍒濆鍖栫洃鍚�
+extern const NSNotificationName EZNeedReloginNotification;
+
+///閿欒瑙e喅鏂规KEY
+extern NSErrorUserInfoKey const EZErrorSolutionKey;
+
+///閿欒妯″潡閿欒鐮並EY
+extern NSErrorUserInfoKey const EZErrorModuleCodeKey;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZConstants_Auth : NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants_WifiConfig.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants_WifiConfig.h
new file mode 100644
index 0000000..97dd69d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZConstants_WifiConfig.h
@@ -0,0 +1,36 @@
+//
+// EZConstants_WifiConfig.h
+// WifiConfig
+//
+// Created by JuneCheng on 2022/5/6.
+//
+
+#ifndef EZConstants_WifiConfig_h
+#define EZConstants_WifiConfig_h
+
+/* 閰嶇綉鏂瑰紡 */
+typedef NS_ENUM(NSInteger, EZWiFiConfigMode) {
+ EZWiFiConfigSmart = 1 << 0, // smart config
+ EZWiFiConfigWave = 1 << 1, // 澹版尝閰嶇綉
+};
+
+/* WiFi閰嶇疆璁惧鐘舵�� */
+typedef NS_ENUM(NSInteger, EZWifiConfigStatus) {
+ DEVICE_WIFI_CONNECTING = 1, //璁惧姝e湪杩炴帴WiFi
+ DEVICE_WIFI_CONNECTED = 2, //璁惧杩炴帴WiFi鎴愬姛 (宸插簾寮� v4.16.0)
+ DEVICE_PLATFORM_REGISTED = 3, //璁惧娉ㄥ唽骞冲彴鎴愬姛
+ DEVICE_ACCOUNT_BINDED = 4, //璁惧宸茬粡缁戝畾璐︽埛 (宸插簾寮� v4.16.0)
+ DEVICE_WIFI_SENT_SUCCESS = 5, //鍚戣澶囧彂閫乄iFi淇℃伅鎴愬姛
+ DEVICE_WIFI_SENT_FAILED = 6, //鍚戣澶囧彂閫乄iFi淇℃伅澶辫触
+ DEVICE_PLATFORM_REGIST_FAILED = 7, //璁惧娉ㄥ唽骞冲彴澶辫触锛岃疆璇�20娆★紝20娆℃湭鏌ヨ鍒拌澶囦笂绾胯涓烘敞鍐屽钩鍙板け璐�
+};
+
+/* New AP閰嶇綉璁惧鐘舵�� */
+typedef NS_ENUM(NSInteger, EZNewAPConfigStatus) {
+ EZNewAPConfigStatusConnectSuccess = 104, // 杩炴帴鎴愬姛
+ EZNewAPConfigStatusUnknow = 105, // 鏈煡閿欒
+ EZNewAPConfigStatusPasswordError = 106, // 瀵嗙爜閿欒
+ EZNewAPConfigStatusNoAPFound = 201, // 鏈壘鍒皐ifi鐑偣
+};
+
+#endif /* EZConstants_WifiConfig_h */
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDetectorInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDetectorInfo.h
new file mode 100644
index 0000000..9dd71bc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDetectorInfo.h
@@ -0,0 +1,41 @@
+//
+// EZDetectorInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 16/1/12.
+// Copyright 漏 2016骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓烘帰娴嬪櫒淇℃伅瀵硅薄
+@interface EZDetectorInfo : NSObject
+
+/// 鎺㈡祴鍣ㄥ簭鍒楀彿
+@property (nonatomic, copy) NSString *detectorSerial;
+/// 鎺㈡祴鍣ㄧ姸鎬侊紝鎺㈡祴鍣ㄤ笌A1鏄惁杩為�氾細0-闈炶仈閫氾紝1-鑱旈��
+@property (nonatomic) NSInteger state;
+/// 鎺㈡祴鍣ㄧ被鍨�
+@property (nonatomic, copy) NSString *type;
+/// 鎺㈡祴鍣ㄥ悕绉�
+/* V("V", "瑙嗛璁惧"), I("I", "鍛婅杈撳叆璁惧"), O("O", "鍛婅杈撳嚭璁惧"), PIR("PIR", "绾㈠鎺㈡祴鍣�"), FIRE("FIRE", "鐑熸劅鎺㈡祴鍣�"),MAGNETOMETER("MAGNETOMETER", "闂ㄧ浼犳劅鍣�"), GAS("GAS", "鍙噧姘斾綋"), WATERLOGGING("WATERLOGGING", "姘存蹈"),CALLHELP("CALLHELP", "绱ф�ユ寜閽�"), TELECONTROL("TELECONTROL", "閬ユ帶鍣�"), ALERTOR("ALERTOR", "鍛婅鍣�"),KEYBOARD("KEYBOARD", "閿洏"),CURTAIN("CURTAIN","骞曞笜"), MOVE_MAGNETOMETER("MOVE_MAGNETOMETER","鍗曚綋闂ㄧ")
+ */
+@property (nonatomic, copy) NSString *typeName;
+/// 鏂逛綅淇℃伅锛屽彲鐢ㄤ簬瀹㈡埛鑷畾涔夊悕绉�
+@property (nonatomic, copy) NSString *location;
+/// 闃插尯鏁呴殰鐘舵�侊紝0鎭㈠锛�1浜х敓
+@property (nonatomic) NSInteger faultZoneStatus;
+/// 鐢垫睜娆犲帇鐘舵�侊紝0鎭㈠锛�1浜х敓
+@property (nonatomic) NSInteger underVoltageStatus;
+/// 鏃犵嚎骞叉壈鐘舵�侊紝0鎭㈠锛�1浜х敓
+@property (nonatomic) NSInteger wirelessInterferenceStatus;
+/// 璁惧绂荤嚎鐘舵�侊紝0鎭㈠锛�1浜х敓
+@property (nonatomic) NSInteger offlineStatus;
+/// 鍦ㄥ妯″紡鏄惁寮�鍚�
+@property (nonatomic) BOOL atHomeEnable;
+/// 澶栧嚭妯″紡鏄惁寮�鍚�
+@property (nonatomic) BOOL outerEnable;
+/// 鐫$湢妯″紡鏄惁寮�鍚�
+@property (nonatomic) BOOL sleepEnable;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceCloudServiceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceCloudServiceInfo.h
new file mode 100644
index 0000000..fffd93e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceCloudServiceInfo.h
@@ -0,0 +1,65 @@
+//
+// EZDeviceCloudServiceInfo.h
+// EzvizOpenSDK
+//
+// Created by JuneCheng on 2022/1/4.
+// Copyright 漏 2022 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+@class EZCloudServicePackageInfo;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// 浜戝瓨鍌ㄨ澶囬�氶亾濂楅淇℃伅
+@interface EZDeviceCloudServiceInfo : NSObject
+
+@property (nonatomic, copy) NSString *ownerId;///< 璁惧鎵�灞炵敤鎴风敤鎴峰悕
+@property (nonatomic, copy) NSString *serial;///< 璁惧搴忓垪鍙�
+@property (nonatomic, assign) NSInteger channelNo;///< 閫氶亾鍙�
+@property (nonatomic, copy) NSString *devicePicUrl;///< 璁惧鍥剧墖url
+@property (nonatomic, assign) NSInteger storageTime;///< 瀛樺偍鏃堕暱
+@property (nonatomic, assign) NSInteger storageTimeUnit;///< 瀛樺偍鏃堕暱鍗曚綅锛�1-澶╋紝2-鍛紝3-鏈堬紝4-骞�
+@property (nonatomic, copy) NSString *expireTime;///< 浜戝瓨鍌ㄦ湇鍔¤繃鏈熸椂闂�
+@property (nonatomic, copy) NSString *expireDate;///< 鍒版湡鏃堕棿锛� yyyy骞碝M鏈坉d鏃� 鏍煎紡
+@property (nonatomic, copy) NSString *devModel;///< 璁惧鍨嬪彿
+@property (nonatomic, copy) NSString *devName;///< 璁惧鍚嶇О
+@property (nonatomic, assign) NSInteger onlineStatus;///< 璁惧鍦ㄧ嚎鐘舵��
+@property (nonatomic, assign) NSInteger status;///< 浜戝瓨鍌ㄧ姸鎬� -2涓嶆敮鎸� -1鏈紑鍚� 0鏆傚仠 1寮�鍚� 2杩囨湡 4鎸囧畾鐢熸晥浜戝瓨鍌ㄥ緟鐢熸晥鐘舵��
+@property (nonatomic, assign) NSInteger expireDay;///< 褰撳墠璺濈杩囨湡鐨勬湁鏁堝ぉ鏁�
+@property (nonatomic, assign) NSInteger validDay;///< 鏈嶅姟鍙娇鐢ㄧ殑澶╂暟
+@property (nonatomic, copy) NSString *createTime;///< 鍒涘缓鏃堕棿
+@property (nonatomic, assign) BOOL designateDevice;///< 鏄惁鏄寚瀹氳澶�
+@property (nonatomic, assign) BOOL subscribe;///< 鏄惁鐢卞綋鍓嶈闃呭紑閫�
+@property (nonatomic, assign) BOOL supportSubscribe;///< 鏄惁鏀寔璁㈤槄浜戝瓨鍌�
+@property (nonatomic, assign) BOOL supportCard;///< 鏄惁鏀寔鐐瑰崱
+@property (nonatomic, assign) NSInteger openTryCloudShield;///< 鏄惁灞忚斀浜戝瓨鍌ㄨ瘯鐢� 1涓哄睆钄斤紝鍏朵粬涓烘湭灞忚斀
+@property (nonatomic, strong) NSArray<EZCloudServicePackageInfo *> *serviceList;///<
+
+@end
+
+
+@interface EZCloudServicePackageInfo : NSObject
+
+@property (nonatomic, assign) long serviceId;///<
+@property (nonatomic, assign) NSInteger productPayType;///< 浜у搧浠樿垂绫诲瀷锛�1浠樿垂 2 璇曠敤 3鍏嶈垂
+@property (nonatomic, assign) NSInteger storageTimeUnit;///< 瀛樺偍鏃堕暱鍗曚綅锛�1-澶� 2-鍛� 3-鏈� 4-骞� 5-灏忔椂
+@property (nonatomic, copy) NSString *expireTime;///< 杩囨湡鏃堕棿
+@property (nonatomic, assign) NSInteger forceBinding;///< 寮哄埗缁戝畾鐘舵�� 1-寮哄埗缁戝畾 2-鍙浆绉�
+@property (nonatomic, assign) NSInteger effectImmediately;///< 鏈嶅姟鏄惁绔嬪嵆鐢熸晥 1-绔嬪嵆鐢熸晥 2-寤惰繜鐢熸晥 3-鎸囧畾鏃ユ湡鐢熸晥
+@property (nonatomic, assign) NSInteger canFamilyDeviceNum;///< 鍙姞鍏ュ椁愯澶囨暟
+@property (nonatomic, assign) long familyServiceId;///< 瀹跺涵濂楅鏈嶅姟ID
+@property (nonatomic, assign) NSInteger serviceTime;///< 浜戝瓨鍌ㄤ娇鐢ㄦ椂闀�
+@property (nonatomic, assign) NSInteger addFamilyDeviceNum;///< 宸插姞鍏ュ椁愯澶囨暟
+@property (nonatomic, assign) NSInteger productCode;///< 浜у搧缂栧彿
+@property (nonatomic, assign) NSInteger buyNum;///< 璐拱鏁伴噺
+@property (nonatomic, copy) NSString *businessOrderNo;///< 璁㈠崟鍙凤細褰撳墠寮�閫氭湇鍔′笌璁㈠崟鍏宠仈
+@property (nonatomic, assign) NSInteger serviceTimeUnit;///< 浜戝瓨鍌ㄤ娇鐢ㄦ椂闀垮崟浣嶏細1-澶� 2-鍛� 3-鏈� 4-骞�
+@property (nonatomic, assign) NSInteger storageTime;///< 瀛樺偍鏃堕暱
+@property (nonatomic, assign) NSInteger serviceType;///< 濂楅绫诲瀷锛�2銆佸搴椁愶紝 1 or null涓烘櫘閫氬椁�
+@property (nonatomic, copy) NSString *effectTime;///< 鐢熸晥鏃堕棿
+@property (nonatomic, assign) NSInteger status;///< 鐘舵�侊細1 寰呬娇鐢� 2浣跨敤涓� 3宸蹭娇鐢�
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceInfo.h
new file mode 100644
index 0000000..da60bb4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceInfo.h
@@ -0,0 +1,59 @@
+//
+// EZDeviceInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/16.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囦俊鎭璞�
+@interface EZDeviceInfo : NSObject
+
+/// 璁惧鍏宠仈鐨勯�氶亾淇℃伅
+@property (nonatomic, strong) NSArray *cameraInfo;
+/// 璁惧鍏宠仈鐨勯�氶亾鏁伴噺
+@property (nonatomic) NSInteger cameraNum;
+/// 鍏锋湁闃叉姢鑳藉姏鐨勮澶囧竷鎾ら槻鐘舵�侊細0-鐫$湢锛�8-鍦ㄥ锛�16-澶栧嚭锛屾櫘閫欼PC甯冩挙闃茬姸鎬侊細0-鎾ら槻锛�1-甯冮槻
+@property (nonatomic) NSInteger defence;
+/// 璁惧鍏宠仈鐨勬帰娴嬪櫒鏁伴噺
+@property (nonatomic) NSInteger detectorNum;
+/// 璁惧鍏宠仈鐨勬帰娴嬪櫒淇℃伅
+@property (nonatomic, strong) NSArray *detectorInfo;
+/// 璁惧鍥剧墖
+@property (nonatomic, copy) NSString *deviceCover;
+/// 璁惧鍚嶇О
+@property (nonatomic, copy) NSString *deviceName;
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 璁惧绫诲瀷
+@property (nonatomic, copy) NSString *deviceType;
+/// 璁惧鐗堟湰鍙�
+@property (nonatomic, copy) NSString *deviceVersion;
+/// 璁惧鍗忚鐗堟湰鍙风被鍨� 0:闈炲浗鏍� 6:鍥芥爣
+@property (nonatomic) NSInteger devProtoEnum;
+/// 璁惧鏄惁寮�鍚姞瀵�
+@property (nonatomic) BOOL isEncrypt;
+/// 璁惧鐘舵�侊紝1-鍦ㄧ嚎锛�2-涓嶅湪绾�
+@property (nonatomic) NSInteger status;
+/// 鏄惁鏀寔瀵硅 0-涓嶆敮鎸佸璁诧紝1-鏀寔鍏ㄥ弻宸ュ璁诧紝3-鏀寔鍗婂弻宸ュ璁诧紝4-鍚屾椂鏀寔鍏ㄥ弻宸ュ拰鍗婂弻宸�
+@property (nonatomic) NSInteger isSupportTalk;
+/// 鏄惁鏀寔浜戝彴鎺у埗
+@property (nonatomic) BOOL isSupportPTZ;
+/// 鏄惁鏀寔鏀惧ぇ
+@property (nonatomic) BOOL isSupportZoom;
+///鏄惁鏀寔鎻愮ず闊冲紑鍏�
+@property (nonatomic) BOOL isSupportAudioOnOff;
+/// 鏄惁鏀寔涓績闀滃儚缈昏浆
+@property (nonatomic) BOOL isSupportMirrorCenter;
+/// 鏄惁鏀寔澹版尝閰嶇綉
+@property (nonatomic) BOOL isSupportSoundWave;
+/// 鏄惁鏀寔鍊嶆暟鍥炴斁
+@property (nonatomic) BOOL isSupportPlaybackRate;
+/// 璁惧澶х被
+@property (nonatomic,copy) NSString *category;
+/// 娣诲姞鏃堕棿
+@property (nonatomic,strong) NSDate *addTime;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDevicePtzAngleInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDevicePtzAngleInfo.h
new file mode 100644
index 0000000..4437921
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDevicePtzAngleInfo.h
@@ -0,0 +1,47 @@
+//
+// EZDevicePtzAngleInfo.h
+// EzvizOpenSDK
+//
+// Created by JuneCheng on 2022/4/27.
+// Copyright 漏 2022 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZDevicePtzAngleInfo : NSObject
+
+/** 姘村钩鏂瑰悜璧风偣瑙掑害 */
+@property (readonly) NSInteger horizontalStartAngle;
+
+/** 姘村钩鏂瑰悜缁堢偣瑙掑害 */
+@property (readonly) NSInteger horizontalEndAngle;
+
+/** 姘村钩鏂瑰悜褰撳墠瑙掑害 */
+@property (readonly) NSInteger horizontalCurrentAngle;
+
+/** 鍨傜洿鏂瑰悜璧风偣瑙掑害 */
+@property (readonly) NSInteger verticalStartAngle;
+
+/** 鍨傜洿鏂瑰悜缁堢偣瑙掑害 */
+@property (readonly) NSInteger verticalEndAngle;
+
+/** 鍨傜洿鏂瑰悜褰撳墠瑙掑害 */
+@property (readonly) NSInteger verticalCurrentAngle;
+
+/** 鏂瑰悜 */
+@property (readonly) NSInteger orientation;
+
+/** 鐗堟湰鍙� */
+@property (readonly) NSInteger ptzCfgVersion;
+
+/** 鍒濆鍖� */
+- (instancetype)initWithType:(NSInteger)type data:(NSData *)data;
+
+- (float)horCurAngPercent;
+- (float)verCurAngPercent;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceRecordDownloadTask.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceRecordDownloadTask.h
new file mode 100644
index 0000000..adb8679
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceRecordDownloadTask.h
@@ -0,0 +1,39 @@
+//
+// EZDeviceRecordDownloadTask.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/7/2.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import "EZRecordDownloadTask.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class EZDeviceRecordFile;
+
+@interface EZDeviceRecordDownloadTask : EZRecordDownloadTask
+
+/**
+ sd鍗″綍鍍忎笅杞戒换鍔″垵濮嬪寲锛屽紓姝ユ柟娉�
+ 涓嬭浇鐨勫綍鍍忎负PS鏂囦欢锛屽闇�杞崲MP4锛岃鑷璋冪敤EZVideoTransformer绫荤殑杞皝瑁呮柟娉�
+
+ @param taskID 涓嬭浇浠诲姟鍞竴鏍囪瘑ID
+ @param recordFile 璁惧褰曞儚鏂囦欢
+ @param deviceSerial 璁惧搴忓垪鍙�
+ @param cameraNo 閫氶亾鍙�
+ @param verifyCode 璁惧楠岃瘉鐮�
+ @param savePath 涓嬭浇瀛樺偍璺緞
+ @param completion 瀹屾垚鍥炶皟锛屾垚鍔熻繑鍥瀟ask锛屽け璐ヨ繑鍥瀗il
+ */
+- (void) initTaskWithID:(NSUInteger)taskID
+ DeviceRecordFileInfo:(EZDeviceRecordFile *)recordFile
+ deviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ verifyCode:(NSString *)verifyCode
+ savePath:(NSString *)savePath
+ completion:(void (^)(EZDeviceRecordDownloadTask *task))completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceRecordFile.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceRecordFile.h
new file mode 100644
index 0000000..b7a2867
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceRecordFile.h
@@ -0,0 +1,26 @@
+//
+// EZDeviceRecordFile.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/17.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囧綍鍍忔枃浠朵俊鎭紙鍖呭惈SD鍗°�佸悗绔叧鑱旇澶囩殑褰曞儚锛�
+@interface EZDeviceRecordFile : NSObject
+
+/// 璁惧褰曞儚鏂囦欢鐨勫紑濮嬫椂闂�
+@property (nonatomic, strong) NSDate *startTime;
+/// 璁惧褰曞儚鏂囦欢鐨勭粨鏉熸椂闂�
+@property (nonatomic, strong) NSDate *stopTime;
+/// 鏂囦欢绫诲瀷 -2:UNKNOW -1:ALLEVENT 0:ALARM 1:TIMING 2:IO 3:CMR 4:event 5:all
+@property (nonatomic, assign) int type;
+@property (nonatomic, copy) NSString *channelType;
+
+
+@property (nonatomic, assign) int seq;
+@property (nonatomic, strong) NSData *imageData;///<
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceUpgradeStatus.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceUpgradeStatus.h
new file mode 100644
index 0000000..06c173b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceUpgradeStatus.h
@@ -0,0 +1,19 @@
+//
+// EZDeviceUpgradeStatus.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/21.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囧崌绾х姸鎬佸璞�
+@interface EZDeviceUpgradeStatus : NSObject
+
+/// 鍗囩骇杩涘害锛屼粎status_type涓哄崌绾х姸鎬佹椂鏈夋晥锛屽彇鍊艰寖鍥翠负1-100
+@property (nonatomic) NSInteger upgradeProgress;
+/// 鍗囩骇鐘舵�侊細 0锛氭鍦ㄥ崌绾� 1锛氳澶囬噸鍚� 2锛氬崌绾ф垚鍔� 3锛氬崌绾уけ璐�
+@property (nonatomic) NSInteger upgradeStatus;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceVersion.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceVersion.h
new file mode 100644
index 0000000..a49a31a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZDeviceVersion.h
@@ -0,0 +1,27 @@
+//
+// EZDeviceVersion.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/10.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囩増鏈俊鎭璞�
+@interface EZDeviceVersion : NSObject
+
+/// 褰撳墠鐗堟湰
+@property (nonatomic, copy) NSString *currentVersion;
+/// 鏈�鏂扮増鏈�
+@property (nonatomic, copy) NSString *latestVersion;
+/// 鏄惁鍙互鏇存柊,娉細0-涓嶉渶瑕佸崌绾� 1-闇�瑕佸崌绾� 3-闇�瑕佸崌绾�1.7鐗堟湰浠ヤ笂
+@property (nonatomic) NSInteger isNeedUpgrade;
+/// 鏄惁姝e湪鍗囩骇,娉細0-涓嶅湪鍗囩骇 1-姝e湪鍗囩骇
+@property (nonatomic) NSInteger isUpgrading;
+/// 鍥轰欢涓嬭浇鍦板潃锛屽彧鏈夊彲浠ユ洿鏂版椂鎵嶄細鏈夊��
+@property (nonatomic, copy) NSString *downloadUrl;
+/// 鏇存柊鍐呭鎻忚堪
+@property (nonatomic, copy) NSString *upgradeDesc;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZGlobalSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZGlobalSDK.h
new file mode 100644
index 0000000..90f7cc9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZGlobalSDK.h
@@ -0,0 +1,1059 @@
+//
+// EZGlobalSDK.h
+// EZOpenSDK
+//
+// Created by JuneCheng on 2022/7/18.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZConstants.h"
+#import "EZConstants_Auth.h"
+#import "EZConstants_WifiConfig.h"
+
+@class EZAccessToken;
+@class EZPlayer;
+@class EZUserInfo;
+@class EZDeviceVersion;
+@class EZDeviceInfo;
+@class EZProbeDeviceInfo;
+@class EZDeviceUpgradeStatus;
+@class EZLeaveMessage;
+@class EZHiddnsDeviceInfo;
+@class EZDeviceCloudServiceInfo;
+@class EZWiFiItemInfo, EZAPDevInfo, EZConfigTokenInfo;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZGlobalSDK : NSObject
+
+#pragma mark - Auth璁よ瘉鐩稿叧Api
+
+/**
+ * 瀹炰緥EZOpenSDK鎺ュ彛
+ *
+ * @param appKey 浼犲叆鐢宠鐨刟ppKey
+ *
+ * @return YES/NO
+ */
++ (BOOL)initLibWithAppKey:(NSString *)appKey;
+
+/**
+ * 鍒濆鍖栨帴鍙o紝鍙缃湇鍔″櫒锛屾捣澶栫敤鎴蜂娇鐢ㄨ鍒濆鍖栨柟娉�
+ *
+ * @param appKey 浼犲叆鐢宠鐨刟ppKey
+ * @param apiUrl apiUrl鍦板潃
+ * @param authUrl auth鍦板潃
+ *
+ * @return YES/NO
+ */
++ (BOOL)initLibWithAppKey:(NSString *)appKey
+ url:(NSString *)apiUrl
+ authUrl:(NSString *)authUrl;
+
+/**
+ * 閿�姣丒ZOpenSDK鎺ュ彛
+ *
+ * @return YES/NO
+ */
++ (BOOL)destoryLib;
+
+/**
+ * 璁剧疆鏄惁鎵撳嵃debug鏃ュ織,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ * @param enable 鏄惁鎵撳嵃鏃ュ織锛岄粯璁ゅ叧闂�
+ *
+ * @return YES/NO
+ */
++ (BOOL)setDebugLogEnable:(BOOL)enable;
+
+/**
+ * 璁剧疆debug鏃ュ織鍥炶皟,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ * @param logCallback 鏃ュ織鍥炶皟
+ */
++ (void)setDebugLogCallBack:(void(^)(NSString *logStr))logCallback;
+
+/**
+ * 鎵撳紑鎺堟潈鐧诲綍涓棿椤甸潰鎺ュ彛
+ *
+ * @param areaId areaId
+ * @param block 鍥炶皟block
+*/
++ (void)openLoginPage:(NSString *)areaId
+ completion:(void (^)(EZAccessToken *accessToken))block;
+
+/**
+ * 鎺堟潈鐧诲綍浠ュ悗缁橢ZOpenSDK璁剧疆accessToken鎺ュ彛
+ *
+ * @param accessToken 鎺堟潈鐧诲綍鑾峰彇鐨刟ccessToken
+ */
++ (void)setAccessToken:(NSString *)accessToken;
+
+/**
+ * 璐︽埛娉ㄩ攢鎺ュ彛
+ *
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鐧诲嚭鎴愬姛
+ */
++ (void)logout:(void (^)(NSError *error))completion;
+
+
+/**
+ 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS9浠ヤ笂锛屽寘鎷琲OS9
+
+ @param url 璺宠浆杩囨潵鐨剈rl
+ @param options 鍙傛暟锛岄粯璁や负绌猴紝鐩墠鏈繘琛屽鐞嗭紝棰勭暀
+ @param delegate 濮旀墭
+ @return 缁撴灉
+ */
++ (BOOL)handleOpenUrl:(NSURL *)url options:(NSDictionary *)options delegate:(id<EZAuthSDKDelegate>)delegate;
+
+/**
+ * 鑾峰彇SDK鐗堟湰鍙锋帴鍙�
+ *
+ * @return 鐗堟湰鍙�
+ */
++ (NSString *)getVersion;
+
+/**
+ * 鎵撳紑浜戝瓨鍌ㄤ腑闂撮〉
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 璁惧閫氶亾鍙�
+ */
++ (void)openCloudPage:(NSString *)deviceSerial channelNo:(NSInteger)channelNo;
+
+/**
+ * 鎵撳紑淇敼瀵嗙爜涓棿椤�
+ *
+ * @param completion 鍥炶皟block resultCode涓�0鏃惰〃绀轰慨鏀瑰瘑鐮佹垚鍔�
+ */
++ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;
+
+/**
+ 鏄惁宸茬粡鐧诲綍
+
+ @return YES锛氬凡缁忕櫥褰曪紱NO锛氭湭鐧诲綍
+ */
++ (BOOL)isLogin;
+
+/**
+ 鑾峰彇褰撳墠accessToken
+
+ @return accessToken
+ */
++ (NSString *)getAccesstoken;
+
+#pragma mark - 鎾斁鍣ㄥ垱寤篈pi
+
+/**
+ * 鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo;
+
+/**
+ * 涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 铏氭嫙閫氶亾
+ * @param useSubStream 鏄惁浣跨敤瀛愮爜娴�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ useSubStream:(BOOL)useSubStream;
+
+/**
+ * 鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
+ *
+ * @param url 鎾斁url锛岀洰鍓嶅彧鏀寔璇ュ崗璁細ysproto://vtm.ys7.com:8554/live?dev=531993276&chn=1&stream=1&cln=1&isp=0&biz=3
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithUrl:(NSString *)url;
+
+
+/**
+ * 閲婃斁EZPlayer瀵硅薄
+ *
+ * @param player EZPlayer瀵硅薄
+ *
+ * @return YES/NO
+ */
++ (BOOL)releasePlayer:(EZPlayer *)player;
+
+#pragma mark - 鍙栨祦鐩稿叧Api
+
+/**
+ * 璁剧疆p2p鍔熻兘鏄惁寮�鍚帴鍙o紝榛樿涓嶅紑鍚痯2p锛岀敤鎴疯嚜宸遍�夋嫨鏄惁寮�鍚�
+ *
+ * @param enable p2p鏄惁寮�鍚�
+ */
++ (void)enableP2P:(BOOL)enable;
+
+/**
+ * 娓呴櫎鍙栨祦鏃剁殑缂撳瓨鏁版嵁
+ */
++ (void)clearStreamInfoCache;
+
+/**
+ * 鏄惁鏀寔鍥芥爣
+ * @param enable YES or NO
+ */
++ (void)enableNationalStandard:(BOOL)enable;
+
+#pragma mark - 褰曞儚鏌ヨApi
+
+/**
+ * 鏌ヨ浜戝瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZCloudRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromCloud:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
+
+/**
+ * 鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
+
+/**
+ * 鑾峰彇鎸囧畾鏃堕棿鍐呯殑鎵�鏈夊綍鍍忔枃浠�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙凤紝浼犲叆<=0鐨勫�煎垯涓洪粯璁ゅ��
+ * @param beginTime 寮�濮嬫椂闂达紝浼犲叆nil鍒欎负褰撳ぉ00:00:00
+ * @param endTime 缁撴潫鏃堕棿锛屼紶鍏il鍒欎负褰撳ぉ23:59:59
+ * @param rectype 鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚銆傞潪蹇呴�夛紝榛樿涓�0锛屼紶鍏ヨ礋鍊煎垯涓洪粯璁ゅ��
+ * @param bizType 璁惧褰掑睘涓氬姟鏉ユ簮
+ * @param platFormId 骞冲彴ID
+ * @param completion 鍥炶皟block records:EzvizRecordFileInfo鐨勬暟缁�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFile:(NSString *)deviceSerial
+ cameraNo:(NSString *)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ recType:(NSInteger)rectype
+ bizType:(NSString *)bizType
+ platFormId:(NSString *)platFormId
+ completion:(void (^)(id records, NSError *error))completion;
+
+#pragma mark - 璁惧鐩稿叧Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)addDevice:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鍒楄〃
+ *
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鑾峰彇鍒嗕韩缁欑敤鎴风殑璁惧鍒楄〃鎺ュ彛
+ *
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getSharedDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鏍规嵁搴忓垪鍙疯幏鍙栬澶囦俊鎭�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceInfo:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 鑾峰彇璁惧鐨勭増鏈俊鎭帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceVersion鐨勫璞′俊鎭紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceVersion:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;
+
+/**
+ * 閫氳繃璁惧楠岃瘉鐮佸紑鍏宠棰戝浘鐗囧姞瀵嗘帴鍙�
+ *
+ * @param isEncrypt 鏄惁鍔犲瘑锛屽彧鏈塏O(鍏抽棴)鐨勬椂鍊欓渶瑕佽澶囬獙璇佺爜鐨勭浉鍏冲弬鏁�(vaildateCode)
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceEncryptStatus:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ encrypt:(BOOL)isEncrypt
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙蜂慨鏀硅澶囧悕绉版帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param deviceName 璁惧鍚嶇О
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀轰慨鏀规垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceName:(NSString *)deviceName
+ deviceSerial:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰垹闄ゅ綋鍓嶈处鍙风殑璁惧鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ * @see 璇ユ帴鍙d笌缁堢缁戝畾鍔熻兘鐩稿叧锛屼細閬囧埌鍒犻櫎鏃舵姤106002鐨勯敊璇紝璇峰叧闂粓绔粦瀹氫互鍚庡啀璇�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteDevice:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧瓨鍌ㄤ粙璐ㄧ姸鎬�(濡傛槸鍚﹀垵濮嬪寲锛屾牸寮忓寲杩涘害绛�)
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZStorageInfo鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getStorageStatus:(NSString *)deviceSerial
+ completion:(void (^)(NSArray *storageStatus, NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰鍒嗗尯缂栧彿鏍煎紡鍖栧垎鍖猴紙SD鍗★級
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param storageIndex 鏌ヨ杩斿洖鐨勫垎鍖哄彿锛�0琛ㄧず鍏ㄩ儴鏍煎紡鍖栵紝鍙兘浼氭湁鍑犲潡纭洏鐨勬儏鍐�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)formatStorage:(NSString *)deviceSerial
+ storageIndex:(NSInteger)storageIndex
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囧崌绾ф椂鐨勮繘搴︾姸鎬�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceUpgradeStatus瀵硅薄锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceUpgradeStatus:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;
+
+/**
+ * 閫氳繃璁惧搴忓垪鍙峰璁惧杩涜鍗囩骇鎿嶄綔锛屽墠鎻愭槸璇ヨ澶囨湁鏇存柊杞欢鐨勬彁绀�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鎿嶄綔鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)upgradeDevice:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇鎶撳彇鎽勫儚澶村浘鐗囩殑url鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖url鍦板潃淇℃伅锛岄敊璇椂杩斿洖閿欒鐮�
+ * @see 璇ユ帴鍙f瘮杈冭�楁椂锛屼笉寤鸿杩涜鎵归噺璁惧鎶撳浘锛孲DK鍐呴儴鍙敮鎸�6涓猦ttp璇锋眰骞跺彂锛岃鎺ュ彛浼氭寔缁崰鐢╤ttp璇锋眰璧勬簮锛屽鏋滈亣鍒癶ttp璇锋眰寤舵椂宸ㄥぇ闂锛屼紭鍏堣�冭檻鎶撳浘鎺ュ彛骞跺彂閫犳垚鐨勯棶棰�,
+ * 鎶撳浘灏嗗湪鏈嶅姟鍣ㄧ淇濈暀2涓皬鏃�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)captureCamera:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ completion:(void (^)(NSString *url, NSError *error))completion;
+
+/**
+ * 璁剧疆璁惧閫氶亾鐨勬竻鏅板害
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param videoLevel 閫氶亾娓呮櫚搴︼紝0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+ * @param completion 鍥炶皟block锛屾棤error琛ㄧず璁剧疆鎴愬姛
+ * @see 濡傛灉鏄鍦ㄦ挱鏀炬椂璋冪敤璇ユ帴鍙o紝璁剧疆娓呮櫚搴︽垚鍔熶互鍚庡繀椤昏EZPlayer璋冪敤stopRealPlay鍐嶈皟鐢╯tartRealPlay閲嶆柊鍙栨祦鎵嶆垚瀹屾垚鐢婚潰娓呮櫚搴︾殑鍒囨崲銆�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setVideoLevel:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ videoLevel:(EZVideoLevelType)videoLevel
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 璁惧璁剧疆甯冮槻鐘舵�侊紝鍏煎A1鍜孖PC璁惧鐨勫竷闃�
+ *
+ * @param defence 甯冮槻鐘舵��, IPC甯冮槻鐘舵�佸彧鏈�0鍜�1锛孉1鏈�0:鐫$湢 8:鍦ㄥ 16:澶栧嚭
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDefence:(EZDefenceStatus)defence
+ deviceSerial:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+#pragma mark - 浜戝彴鎺у埗Api
+
+/**
+ * PTZ 鎺у埗鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param command ptz鎺у埗鍛戒护
+ * @param action 鎺у埗鍚姩/鍋滄
+ * @param speed 浜戝彴閫熷害锛�0-鎱紝1-閫備腑锛�2-蹇�
+ * @param resultBlock 鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)controlPTZ:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ command:(EZPTZCommand)command
+ action:(EZPTZAction)action
+ speed:(NSInteger)speed
+ result:(void (^)(NSError *error))resultBlock;
+
+/**
+ * 鎽勫儚澶存樉绀烘帶鍒舵帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param command 鏄剧ず鎺у埗鍛戒护
+ * @param resultBlock 鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ */
++ (void)controlVideoFlip:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ command:(EZDisplayCommand)command
+ result:(void (^)(NSError *error))resultBlock;
+
+#pragma mark - 浜戝瓨鍌ㄧ浉鍏矨pi
+
+/**
+ * 妫�鏌ュ浗瀹舵槸鍚︽敮鎸佷簯瀛樺偍鏈嶅姟
+ *
+ * @param completion 鍥炶皟
+ * @return operation
+ */
++ (NSURLSessionDataTask *)isSupportCloundService:(void (^)(BOOL isSupport, NSError *error))completion;
+
+/**
+ * 鏌ヨ浜戝瓨鍌ㄨ澶囬�氶亾濂楅淇℃伅
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getCloundDevicePackageInfo:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ completion:(void (^)(EZDeviceCloudServiceInfo *serviceInfo, NSError *error))completion;
+
+/**
+ * 浜戝瓨鍌ㄥ姛鑳芥殏鍋滄仮澶�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param enable NO-绂佺敤锛孻ES-鍚敤
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setCloundServiceActive:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ enable:(BOOL)enable
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏌ヨ鏌愭湀涓湁瑙嗛鏂囦欢鐨勫ぉ(鏃ユ湡)
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param month 鏌ヨ鏌愭湀鍏锋湁浜戝瓨鍌ㄧ殑鏃ユ湡锛屾牸寮忎负yyyyMM
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getCloudVideoDays:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ month:(NSString *)month
+ completion:(void (^)(NSArray<NSString *> *dayArray, NSError *error))completion;
+
+/**
+ * 鎸夎澶囬�氶亾鍒犻櫎鎵�鏈変簯瀛樺偍褰曞儚鐗囨
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteAllCloudVideo:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鍒犻櫎浜戝瓨鍌ㄥ綍鍍忕墖娈�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param videos 瑙嗛鏁扮粍锛堥檺鍒�30涓互鍐咃級
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteCloudVideoFragment:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ videos:(NSArray *)videos
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鎸夊ぉ澧為噺鏌ヨ浜戝瓨鍌ㄥ綍鍍忓垪琛ㄦ帴鍙�(姒傝淇℃伅)
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param videoType 褰曞儚绫诲瀷videoType
+ * @param searchDate 鏌ユ壘鏂囦欢鏃ユ湡yyyy-MM-dd
+ * @param maxCreateTime 鏌ユ壘鏂囦欢鐨勮捣濮嬫椂闂磞yyy-MM-dd HH:mm:ss锛岃淇濊瘉鍜宻earchDate鏄悓涓�澶╋紝鍚﹀垯鎶ラ敊銆傞粯璁や粠 yyyy-MM-dd 00:00:00寮�濮嬶紝闈炲繀濉紝鍙紶nil
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getIncrCloudVideos:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ videoType:(EZCloudVideoType)videoType
+ searchDate:(NSString *)searchDate
+ maxCreateTime:(NSString *)maxCreateTime
+ completion:(void (^)(NSArray *abstractvideos, NSError *error))completion;
+
+/**
+ * 鏍规嵁鏂囦欢id鎵归噺鏌ヨ璇︽儏淇℃伅鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param videos 褰曞儚姒傝淇℃伅鏁扮粍
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getCloudVideoDetails:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ videos:(NSArray *)videos
+ completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
+
+#pragma mark - 鍛婅鐩稿叧Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧憡璀︿俊鎭垪琛紝璁惧搴忓垪鍙蜂负nil鏃舵煡璇㈡暣涓处鎴蜂笅鐨勫憡璀︿俊鎭垪琛�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param beginTime 鎼滅储鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鎼滅储鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZAlarmInfo鐨勫璞℃暟鎹拰鏌ヨ鏃堕棿鑼冨洿鍐呯殑鍛婅涓暟鐨勬�绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getAlarmList:(NSString *)deviceSerial
+ pageIndex:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *alarmList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ * @param data 闇�瑕佽В瀵嗙殑鏁版嵁
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ *
+ * @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
+
+/**
+ * 鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ * @param data 闇�瑕佽В瀵嗙殑鏁版嵁
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param type 1:璁惧鍔犲瘑锛�2锛氬钩鍙板姞瀵�
+ *
+ * @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
+
+/**
+ * 璁剧疆鍛婅淇℃伅涓哄凡璇绘帴鍙�
+ *
+ * @param alarmIds 鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓猧d,鍚﹀垯浼氭姤閿�
+ * @param status 鍛婅娑堟伅鐘舵��
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿缃垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setAlarmStatus:(NSArray *)alarmIds
+ alarmStatus:(EZMessageStatus)status
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁alarmId鍒犻櫎鍛婅淇℃伅鎺ュ彛
+ *
+ * @param alarmIds 鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓狪d锛屽惁鍒欎細鎶ラ敊
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteAlarm:(NSArray *)alarmIds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栨湭璇绘秷鎭暟锛岃澶囧簭鍒楀彿涓虹┖鏃惰幏鍙栨墍鏈夎澶囩殑鏈娑堟伅鏁�
+ *
+ * @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙凤紝涓虹┖鏃惰繑鍥炶处鎴蜂笅鎵�鏈夎澶囩殑鏈娑堟伅鏁�
+ * @param type 娑堟伅绫诲瀷锛欵ZMessageTypeAlarm 鍛婅娑堟伅锛�1锛夛紝EZMessageTypeLeave 鐣欒█娑堟伅锛�2锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖鏈鏁伴噺锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getUnreadMessageCount:(NSString *)deviceSerial
+ messageType:(EZMessageType)type
+ completion:(void (^)(NSInteger count, NSError *error))completion;
+
+#pragma mark - 璇煶鐣欒█娑堟伅鏁版嵁Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囩殑鐣欒█娑堟伅鍒楄〃
+ *
+ * @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙�
+ * @param beginTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿
+ * @param pageIndex 鍒嗛〉椤电爜
+ * @param pageSize 鍒嗛〉鍗曢〉鏁伴噺
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZLeaveMessage鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getLeaveMessageList:(NSString *)deviceSerial
+ pageIndex:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鏍规嵁leaveId璁剧疆鐣欒█娑堟伅鐘舵��
+ *
+ * @param leaveIds 鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ * @param status 闇�瑕佽缃殑鐣欒█鐘舵�侊紝鐩墠鍙敮鎸� EZMessageStatusRead(宸茶)
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setLeaveMessageStatus:(NSArray *)leaveIds
+ messageStatus:(EZMessageStatus)status
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁leaveId鍒犻櫎鐣欒█娑堟伅
+ *
+ * @param leaveIds 鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鍒犻櫎鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteLeaveMessage:(NSArray *)leaveIds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁EZLeaveMessage瀵硅薄淇℃伅鑾峰彇璇煶鐣欒█娑堟伅鏁版嵁鎺ュ彛
+ * @param message 鐣欒█娑堟伅瀵硅薄
+ * @param completion 鍥炶皟block 锛坮esultCode = 1 琛ㄧず璇煶涓嬭浇鎴愬姛锛�-1琛ㄧず涓嬭浇澶辫触锛�
+ *
+ * @return operation
+ */
++ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
+ completion:(void (^)(NSData *data, NSInteger resultCode))completion;
+
+#pragma mark - VideoTalk瑙嗛閫氳瘽鐩稿叧Api
+
+/**
+ * 鑾峰彇鎵嬭〃鏈嶅姟鐩稿叧淇℃伅
+ * @param deviceId 璁惧搴忓垪鍙�
+ * @param completion operation
+ */
++ (void)requestGetWatchServerInfo:(NSString *)deviceId
+ completion:(void (^)(id watchServerInfo, NSError *error))completion;
+
+#pragma mark - WiFi閰嶇綉鐩稿叧Api
+
+/**
+ * 灏濊瘯鏌ヨ璁惧淇℃伅锛岃澶嘩ifi閰嶇疆鍓嶆煡璇竴娆¤澶囩殑淇℃伅
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param deviceType 璁惧鍨嬪彿锛屾棤娉曡幏鍙栧埌璁惧鍨嬪彿鍒欏彲浼爊il
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ * @see 鍏ㄦ柊鐨勮澶囨槸娌℃湁娉ㄥ唽鍒板钩鍙扮殑锛屾墍浠ヤ細鍑虹幇璁惧涓嶅瓨鍦ㄧ殑鎯呭喌锛岃澶噖ifi閰嶇疆鎴愬姛浠ュ悗浼氫笂鎶ユ暟鎹埌钀ょ煶浜戝钩鍙帮紝浠ュ悗姣忔鏌ヨ灏变笉浼氬嚭鐜拌澶囦笉瀛樺湪鐨勬儏鍐典簡銆�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)probeDeviceInfo:(NSString *)deviceSerial
+ deviceType:(NSString *)deviceType
+ completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�
+ * @param statusBlock 杩斿洖杩炴帴璁惧鐨刉iFi閰嶇疆鐘舵��
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
+ * @param mode 閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
+ * @param statusBlock 杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ mode:(NSInteger)mode
+ deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * @since 3.0.0
+ * Wifi閰嶇疆鍋滄鎺ュ彛
+ *
+ * @return YES/NO
+ */
++ (BOOL)stopConfigWifi;
+
+#pragma mark - AP閰嶇綉鐩稿叧Api
+
+/**
+ * AP閰嶇綉鎺ュ彛
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param callback 缁撴灉鍥炶皟锛屾敞鎰忥細杩斿洖YES浠呬粎浠h〃鎴愬姛灏哤iFi淇℃伅鍙戦�佺粰璁惧锛屼笉浠h〃璁惧閰嶇綉鎴愬姛
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ result:(void (^)(BOOL ret))callback;
+
+/**
+ * AP閰嶇綉鎺ュ彛锛堟帹鑽愶紝v5.0鏂板锛屽皝瑁呬簡璁惧鐘舵�佽疆璇㈡楠わ級
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param statusBlock 缁撴灉鍥炶皟锛岃繑鍥為厤缃戣繃绋嬩腑鐨勫悇绉嶇姸鎬�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * 鍋滄AP閰嶇綉
+ */
++ (void)stopAPConfigWifi;
+
+#pragma mark - 鎺ヨЕ寮忛厤缃� New AP Config
+
+/**
+ * 鑾峰彇鎺ヨЕ寮廇P閰嶇綉token
+ *
+ * @param completion 鍥炶皟
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getNewApConfigToken:(void(^)(EZConfigTokenInfo *tokenInfo, NSError *error))completion;
+
+/**
+ * 寮�濮婲ewAP閰嶇綉锛堥渶杩炴帴璁惧鐑偣锛�
+ * @param token 閰嶇綉token
+ * @param ssid WiFi ssid
+ * @param password WiFi 瀵嗙爜
+ * @param lbsDomain lbs 鍩熷悕
+ * @param handler 鍥炶皟
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startNewApConfigWithToken:(NSString *)token
+ ssid:(NSString *)ssid
+ password:(NSString *)password
+ lbsDomain:(NSString *)lbsDomain
+ completionHandler:(void(^)(EZNewAPConfigStatus status, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧鐘舵�侊紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceInfo:(void(^)(EZAPDevInfo *devInfo, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧褰撳墠鍛ㄨ竟WiFi鍒楄〃锛屼笂闄�20涓紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceWifiList:(void(^)(NSArray<EZWiFiItemInfo*> *wifiList, NSError *error))handler;
+
+/**
+ * 鏌ヨ璁惧缁戝畾鐘舵��
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (NSURLSessionDataTask *)queryPlatformBindStatus:(NSString *)deviceSerial
+ completion:(void(^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 璁剧疆閰嶇綉璁惧缃戝叧鍦板潃 鍙��
+ * @param devRouteDomain 璁惧缃戝叧鍦板潃
+ */
++ (void)setDevRouteDomain:(NSString *)devRouteDomain;
+
+#pragma mark - 鐢ㄦ埛鐩稿叧Api
+
+/**
+ * 鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅鐨勬帴鍙�
+ *
+ * @param completion 鍥炶皟block锛� 姝e父鏃惰繑鍥濫ZUserInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getUserInfo:(void (^)(EZUserInfo *userInfo, NSError *error))completion;
+
+#pragma mark - 鍏朵粬Api
+
+/**
+ * 鑾峰彇鍖哄煙鍒楄〃鎺ュ彛
+ *
+ * @param completion 鍥炶皟block锛宎reaList涓殑鍏冪礌涓篍ZAreaInfo瀵硅薄
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getAreaList:(void (^)(NSArray *areaList, NSError *error))completion;
+
+/**
+ * 鑾峰彇缁堢锛堟墜鏈虹瓑锛夊敮涓�璇嗗埆鐮�
+ *
+ * @return 缁堢鍞竴璇嗗埆鐮�
+ */
++ (NSString *)getTerminalId;
+
+/**
+ 鏍规嵁搴旂敤绫诲瀷鍒ゆ柇鏄惁瀹夎浜嗗搴旂殑搴旂敤
+
+ @param appType 搴旂敤绫诲瀷
+ @return YES:宸插畨瑁咃紝NO:娌℃湁瀹夎鎴栧畨瑁呯殑钀ょ煶APP鐗堟湰杩囦綆
+ */
+//+ (BOOL)isEzvizAppInstalledWithType:(EZAppType)appType;
+
+
+/**
+ 璺宠浆鍒版寚瀹氳悿鐭矨PP杩涜鎺堟潈鐧诲綍
+
+ @param appType 钀ょ煶APP绫诲瀷
+ @return 璺宠浆缁撴灉
+ */
+//+ (BOOL)ezvizLoginWithAppType:(EZAppType)appType;
+
+/**
+ 璺宠浆鍒版寚瀹欰PP鐨勬寚瀹氱晫闈�
+
+ @param pageType 鐣岄潰绫诲瀷
+ @param appType APP绫诲瀷
+ @return 璺宠浆缁撴灉
+ */
+//+ (BOOL)gotoEzvizAppPage:(EZAppPageType)pageType appType:(EZAppType)appType;
+
+#pragma mark - DDNS鐩稿叧
+
+/**
+ * 閫氳繃璁惧搴忓垪鍙峰拰璁惧鍩熷悕鑾峰彇璁惧ddns淇℃伅
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param domain 璁惧鍩熷悕
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getHiddnsDeviceInfo:(NSString *)deviceSerial
+ domain:(NSString *)domain
+ completion:(void (^)(EZHiddnsDeviceInfo *ddnsDeviceInfo, NSError *error))completion;
+
+/**
+ * 璇ユ帴鍙g敤浜庤缃澶嘾dns鍩熷悕锛屽寘鎷缃垎浜幏寰楃殑璁惧鐨刣dns鍩熷悕
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param domain 璁惧鍩熷悕,璁惧鍩熷悕瑙勫垯淇敼锛屼笉鑳戒负绌猴紝6-32浣嶏紝鍙互涓烘湰韬簭鍒楀彿锛屽寘鍚皬鍐欏瓧姣嶃�佹暟瀛椼��-锛岄浣嶅繀椤诲瓧姣嶏紝鏈綅涓嶈兘涓�-
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setHiddnsDomain:(NSString *)deviceSerial
+ domain:(NSString *)domain
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 璁剧疆璁惧鐨凞DNS鏄犲皠鏂瑰紡涓鸿嚜鍔ㄦ槧灏�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setHiddnsModeAuto:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 璁剧疆璁惧鐨凞DNS鏄犲皠鏂瑰紡涓烘墜鍔ㄦ槧灏�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param httpPort http绔彛鍙�
+ * @param cmdPort 鏈嶅姟绔彛鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setHiddnsModeManual:(NSString *)deviceSerial
+ httpPort:(NSInteger)httpPort
+ cmdPort:(NSInteger)cmdPort
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇褰撳墠璐﹀彿涓嬬殑鎵�鏈夎澶囩殑DDNS淇℃伅
+ *
+ * @param pageIndex 鍒嗛〉璧峰椤碉紝浠�0寮�濮嬶紝榛樿涓�0
+ * @param pageSize 鍒嗛〉澶у皬锛岄粯璁や负10锛屾渶澶т负50
+ * @param completion 鍥炶皟block ddnsDeviceList涓璞′负EZHiddnsDeviceInfo
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getHiddnsDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *ddnsDeviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鎶婂崟涓澶囩殑DDNS淇℃伅鍒嗕韩缁欏叾浠栬处鎴�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param account 琚垎浜处鎴凤紝鍙互鏄偖绠卞湴鍧�鎴栨墜鏈哄彿鐮侊紙鍖呭惈鍥藉浠g爜锛夋垨涓嶆槸鍏ㄦ暟瀛楃殑鐢ㄦ埛鍚�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)shareHiddnsDevice:(NSString *)deviceSerial
+ account:(NSString *)account
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇褰撳墠璐﹀彿涓嬬殑鎵�鏈夌殑鍏跺畠璐︽埛鍒嗕韩缁欒嚜宸辩殑璁惧DDNS淇℃伅
+ *
+ * @param pageIndex 鍒嗛〉璧峰椤碉紝浠�0寮�濮嬶紝榛樿涓�0
+ * @param pageSize 鍒嗛〉澶у皬锛岄粯璁や负10锛屾渶澶т负50
+ * @param completion 鍥炶皟block ddnsDeviceList涓璞′负EZHiddnsDeviceInfo
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getShareHiddnsDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *ddnsDeviceList, NSInteger totalCount, NSError *error))completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHCNetDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHCNetDeviceInfo.h
new file mode 100644
index 0000000..23946a9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHCNetDeviceInfo.h
@@ -0,0 +1,36 @@
+//
+// EZHCNetDeviceInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/9/15.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EZHCNetDeviceInfo : NSObject
+
+///鐧诲綍鍚巙ser id
+@property (nonatomic,assign) NSInteger userId;
+///妯℃嫙閫氶亾鏁�
+@property (nonatomic,assign) NSInteger channelCount;
+///妯℃嫙閫氶亾璧峰閫氶亾鍙�,0涓烘棤鏁堟灉
+@property (nonatomic,assign) NSInteger startChannelNo;
+///鏁板瓧閫氶亾鏁�
+@property (nonatomic,assign) NSInteger dChannelCount;
+///璧峰鏁板瓧閫氶亾鍙凤紝0涓烘棤鏁堟灉
+@property (nonatomic,assign) NSInteger dStartChannelNo;
+///鍛婅杈撳叆涓暟
+@property (nonatomic,assign) NSInteger byAlarmInPortNum;
+///鍛婅杈撳嚭涓暟
+@property (nonatomic,assign) NSInteger byAlarmOutPortNum;
+///纭洏涓暟
+@property (nonatomic,assign) NSInteger byDiskNum;
+///璁惧绫诲瀷
+@property (nonatomic,assign) NSInteger byDVRType;
+///闆堕�氶亾涓暟
+@property (nonatomic,assign) NSInteger byZeroChanNum;
+///璁惧璇煶閫氶亾鏁�
+@property (nonatomic,assign) NSInteger byAudioChanNum;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHCNetDeviceSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHCNetDeviceSDK.h
new file mode 100644
index 0000000..fa3a71f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHCNetDeviceSDK.h
@@ -0,0 +1,146 @@
+//
+// EZHCNetDeviceSDK.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/8/15.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class EZHCNetDeviceInfo, EZSADPDeviceInfo;
+
+typedef NS_ENUM(int, EZPTZCommandType) {
+ EZPTZCommandType_ZOOM_IN = 11, /* 鐒﹁窛鍙樺ぇ(鍊嶇巼鍙樺ぇ) */
+ EZPTZCommandType_ZOOM_OUT = 12, /* 鐒﹁窛鍙樺皬(鍊嶇巼鍙樺皬) */
+ EZPTZCommandType_UP = 21, /* 浜戝彴涓婁话 */
+ EZPTZCommandType_DOWN, /* 浜戝彴涓嬩刊 */
+ EZPTZCommandType_LEFT, /* 浜戝彴宸﹁浆 */
+ EZPTZCommandType_RIGHT, /* 浜戝彴鍙宠浆 */
+ EZPTZCommandType_UP_LEFT, /* 浜戝彴涓婁话鍜屽乏杞� */
+ EZPTZCommandType_UP_RIGHT, /* 浜戝彴涓婁话鍜屽彸杞� */
+ EZPTZCommandType_DOWN_LEFT, /* 浜戝彴涓嬩刊鍜屽乏杞� */
+ EZPTZCommandType_DOWN_RIGHT, /* 浜戝彴涓嬩刊鍜屽彸杞� */
+ EZPTZCommandType_PAN_AUTO, /* 浜戝彴宸﹀彸鑷姩鎵弿 */
+ EZPTZCommandType_MAX /* 瓒婄晫鏍囪瘑 */
+};
+
+typedef NS_ENUM(int, EZPTZActionType) {
+ EZPTZActionType_START = 0, /* 寮�濮� */
+ EZPTZActionType_STOP, /* 鍋滄 */
+ EZPTZActionType_MAX /* 瓒婄晫鏍囪瘑 */
+};
+
+typedef NS_ENUM(int, EZEncryptType) {
+ EZEncryptType_OEMBlue = 0, //钃濈簿鐏靛姞瀵�
+ EZEncryptType_OEMGreen, //缁垮法浜哄姞瀵�
+ EZEncryptType_normal //娌℃湁鍔犲瘑
+};
+
+@interface EZHCNetDeviceSDK : NSObject
+
+/**
+ 鍒濆鍖朣DK
+ */
++ (void)initSDK;
+
+/**
+ 寮�濮嬫悳绱㈠眬鍩熺綉璁惧
+
+ @param searchCallback 鎼滅储缁撴灉鍥炶皟锛屾瘡鎼滃埌涓�涓澶囬兘浼氬洖璋冧竴娆★紝璁惧淇℃伅EZSADPDeviceInfo
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startLocalSearch:(void(^)(EZSADPDeviceInfo *device,NSError *error))searchCallback;
+
+/**
+ 鍋滄鎼滅储
+
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)stopLocalSearch;
+
+/**
+ 娓呴櫎缁撴灉锛岄噸鏂版悳绱紝鍓嶆彁鏄箣鍓嶅紑鍚繃鎼滅储
+ */
++ (void)research;
+
+/**
+ 鑾峰彇SADP鐗堟湰鍙�
+ */
++ (int)getSadpVersion;
+
+/**
+ 婵�娲昏澶囷紝璋冪敤stopLocalSearch鍚庡皢鏃犳硶婵�娲昏澶�
+
+ @param serial 璁惧搴忓垪鍙�
+ @param pwd 婵�娲诲瘑鐮�
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)activeDeviceWithSerial:(NSString *)serial pwd:(NSString *)pwd;
+
+/**
+ 鐧诲綍灞�鍩熺綉璁惧
+
+ @param userName 鐢ㄦ埛鍚�
+ @param pwd 鐢ㄦ埛瀵嗙爜
+ @param ipAddr 璁惧ip鍦板潃
+ @param port 璁惧绔彛鍙�
+ @return 鐧诲綍閿欒鏃惰繑鍥瀗il
+ */
++ (EZHCNetDeviceInfo *)loginDeviceWithUerName:(NSString *)userName
+ pwd:(NSString *)pwd
+ ipAddr:(NSString *)ipAddr
+ port:(NSInteger)port;
+
+/**
+ 鐧诲嚭灞�鍩熺綉璁惧
+
+ @param userId 鐢ㄦ埛id
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)logoutDeviceWithUserId:(NSInteger)userId;
+
+/**
+ 灞�鍩熺綉璁惧浜戝彴鎺у埗鎺ュ彛
+
+ @param userId 鐢ㄦ埛id
+ @param channelNo 閫氶亾鍙�
+ @param command 鍛戒护绫诲瀷 EZPTZCommandType
+ @param action 鍔ㄤ綔绫诲瀷 EZPTZActionType
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)ptzControlWithUserId:(NSInteger)userId
+ channelNo:(NSInteger)channelNo
+ command:(EZPTZCommandType)command
+ action:(EZPTZActionType)action;
+
+/**
+ 璁剧疆鍔犲瘑鏂瑰紡
+
+ @param encryptType 鍔犲瘑鏂瑰紡
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)setEncryptType:(EZEncryptType)encryptType;
+
+/**
+ AP閰嶇綉鎺ュ彛
+
+ @param ssid WiFi鐨剆sid
+ @param password WiFi鐨勫瘑鐮�
+ @param deviceSerial 璁惧搴忓垪鍙�
+ @param verifyCode 璁惧楠岃瘉鐮�
+ @param callback 缁撴灉鍥炶皟
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ result:(void (^)(BOOL ret))callback;
+
+/**
+ 鍋滄AP閰嶇綉
+ */
++ (void)stopAPConfigWifi;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHiddnsDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHiddnsDeviceInfo.h
new file mode 100644
index 0000000..4627fa0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZHiddnsDeviceInfo.h
@@ -0,0 +1,84 @@
+//
+// EZHiddnsDeviceInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/9/9.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EZHiddnsDeviceInfo : NSObject
+
+///璁惧鍩熷悕
+@property (nonatomic,copy) NSString *domain;
+
+///璁惧澶栫綉鍦板潃
+@property (nonatomic,copy) NSString *deviceIp;
+
+///璁惧鐭簭鍒楀彿
+@property (nonatomic,copy) NSString *subSerial;
+
+///璁惧闀垮簭鍒楀彿
+@property (nonatomic,copy) NSString *serial;
+
+///璁惧鍚嶇О
+@property (nonatomic,copy) NSString *deviceName;
+
+///鏄犲皠妯″紡锛�1-鎵嬪姩锛�0-鑷姩
+@property (nonatomic,assign) NSInteger upnpMappingMode;
+
+///鎵嬪姩鏄犲皠http绔彛锛寀pnpMappingMode=1鏃朵娇鐢�
+@property (nonatomic,assign) NSInteger mappingHiddnsHttpPort;
+
+///鏄犲皠http绔彛
+@property (nonatomic,assign) NSInteger hiddnsHttpPort;
+
+///鏄犲皠https绔彛
+@property (nonatomic,assign) NSInteger hiddnsHttpsPort;
+
+///鎵嬪姩鏄犲皠鏈嶅姟绔彛锛寀pnpMappingMode=1鏃朵娇鐢�
+@property (nonatomic,assign) NSInteger mappingHiddnsCmdPort;
+
+///鏄犲皠鏈嶅姟绔彛
+@property (nonatomic,assign) NSInteger hiddnsCmdPort;
+
+///鏄犲皠鍙栨祦绔彛
+@property (nonatomic,assign) NSInteger hiddnsRtspPort;
+
+/////璁惧灞�鍩熺綉IP鍦板潃
+//@property (nonatomic,copy) NSString *localIp;
+//
+/////鏈湴http绔彛
+//@property (nonatomic,assign) NSInteger localHiddnsHttpPort;
+//
+/////鏈湴https绔彛
+//@property (nonatomic,assign) NSInteger localHiddnsHttpsPort;
+//
+/////鏈湴鏈嶅姟绔彛
+//@property (nonatomic,assign) NSInteger localHiddnsCmdPort;
+//
+/////鏈湴鍙栨祦绔彛
+//@property (nonatomic,assign) NSInteger localHiddnsRtspPort;
+//
+/////澶栫綉Telenet绔彛
+//@property (nonatomic,assign) NSInteger cmdPort;
+//
+/////澶栫綉Http鐩戝惉鐨勭鍙PNP妫�娴嬩娇鐢�
+//@property (nonatomic,assign) NSInteger httpPort;
+//
+/////澶栫綉鎺ㄦ祦浣跨敤鐨勭洃鍚鍙�
+//@property (nonatomic,assign) NSInteger streamPort;
+//
+/////鍐呯綉Telent绔彛
+//@property (nonatomic,assign) NSInteger localCmdPort;
+//
+/////鍐呯綉Http鐩戝惉鐨勭鍙PNP妫�娴嬩娇鐢�
+//@property (nonatomic,assign) NSInteger localHttpPort;
+//
+/////鍐呯綉鎺ㄦ祦浣跨敤鐨勭洃鍚鍙�
+//@property (nonatomic,assign) NSInteger localStreamPort;
+
+
+@end
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZLeaveMessage.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZLeaveMessage.h
new file mode 100644
index 0000000..dbf5c62
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZLeaveMessage.h
@@ -0,0 +1,41 @@
+//
+// EZLeaveMessage.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/11.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓虹暀瑷�娑堟伅瀵硅薄
+@interface EZLeaveMessage : NSObject
+
+/// 娑堟伅Id
+@property (nonatomic, copy) NSString *id;
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 璁惧鍚嶇О
+@property (nonatomic, copy) NSString *deviceName;
+/// 鐣欒█鏃堕暱锛堝崟浣嶏細绉掞級
+@property (nonatomic) NSInteger duration;
+/// 鐣欒█娑堟伅绫诲瀷锛�1-璇煶鐣欒█ 2-瑙嗛鐣欒█
+@property (nonatomic) NSInteger contentType;
+/// 鎺ユ敹or鍥炲锛�1-鐢ㄦ埛鎺ユ敹锛堣澶囧彂閫侊級2-鐢ㄦ埛鍥炲锛堝鎴风鍙戦�侊級
+@property (nonatomic) NSInteger messageDirection;
+/// 鍙戦�佺绫诲瀷锛�1鈥揊1璁惧 2鈥揥eb瀹㈡埛绔� 3鈥搃Phone瀹㈡埛绔� 4鈥搃Pad瀹㈡埛绔� 5鈥揳ndroid瀹㈡埛绔� 6鈥揳ndroidPad瀹㈡埛绔�
+@property (nonatomic) NSInteger senderType;
+/// 鍙戦�佺鍒悕
+@property (nonatomic, copy) NSString *senderName;
+/// 鐣欒█灏侀潰鎴浘鍦板潃
+@property (nonatomic, copy) NSString *messagePicUrl;
+/// 娑堟伅鐘舵�侊細0-鏈 1-宸茶 2-鍒犻櫎
+@property (nonatomic) NSInteger status;
+/// 浜戝瓨鍌ㄦ湇鍔″櫒鍦板潃锛岀洰鍓嶉粯璁や负姝︽眽浜戝瓨鍌紝鏍煎紡涓�:{鍩熷悕:绔彛}
+@property (nonatomic, copy) NSString *cloudServerUrl;
+/// 鍒涘缓鏃堕棿
+@property (nonatomic, strong) NSDate *createTime;
+/// 淇敼鏃堕棿
+@property (nonatomic, strong) NSDate *updateTIme;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDK.h
new file mode 100644
index 0000000..47fc8e3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDK.h
@@ -0,0 +1,946 @@
+//
+// EZOpenSDK.h
+// EZOpenSDK
+//
+// Created by JuneCheng on 2022/7/18.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZConstants.h"
+#import "EZConstants_Auth.h"
+#import "EZConstants_WifiConfig.h"
+
+@class EZPlayer;
+@class EZDeviceInfo;
+@class EZAccessToken;
+@class EZCameraInfo;
+@class EZDeviceVersion;
+@class EZUserInfo;
+@class EZProbeDeviceInfo;
+@class EZDeviceUpgradeStatus;
+@class EZLeaveMessage;
+@class EZWiFiItemInfo, EZAPDevInfo, EZConfigTokenInfo;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZOpenSDK : NSObject
+
+#pragma mark - Auth璁よ瘉鐩稿叧Api
+
+/**
+ * 瀹炰緥EZOpenSDK鎺ュ彛
+ *
+ * @param appKey 浼犲叆鐢宠鐨刟ppKey
+ *
+ * @return YES/NO
+ */
++ (BOOL)initLibWithAppKey:(NSString *)appKey;
+
+/**
+ * 鍒濆鍖栨帴鍙o紝鍙缃湇鍔″櫒锛屾捣澶栫敤鎴蜂娇鐢ㄨ鍒濆鍖栨柟娉�
+ *
+ * @param appKey 浼犲叆鐢宠鐨刟ppKey
+ * @param apiUrl apiUrl鍦板潃
+ * @param authUrl auth鍦板潃
+ *
+ * @return YES/NO
+ */
++ (BOOL)initLibWithAppKey:(NSString *)appKey
+ url:(NSString *)apiUrl
+ authUrl:(NSString *)authUrl;
+
+/**
+ * 閿�姣丒ZOpenSDK鎺ュ彛
+ *
+ * @return YES/NO
+ */
++ (BOOL)destoryLib;
+
+/**
+ * 璁剧疆鏄惁鎵撳嵃debug鏃ュ織,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ * @param enable 鏄惁鎵撳嵃鏃ュ織锛岄粯璁ゅ叧闂�
+ *
+ * @return YES/NO
+ */
++ (BOOL)setDebugLogEnable:(BOOL)enable;
+
+/**
+ * 璁剧疆debug鏃ュ織鍥炶皟,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ * @param logCallback 鏃ュ織鍥炶皟
+ */
++ (void)setDebugLogCallBack:(void(^)(NSString *logStr))logCallback;
+
+/**
+ * 鎵撳紑鎺堟潈鐧诲綍涓棿椤甸潰鎺ュ彛
+ *
+ * @param block 鍥炶皟block
+*/
++ (void)openLoginPage:(void (^)(EZAccessToken *accessToken))block;
+
+/**
+ * 鎺堟潈鐧诲綍浠ュ悗缁橢ZOpenSDK璁剧疆accessToken鎺ュ彛
+ *
+ * @param accessToken 鎺堟潈鐧诲綍鑾峰彇鐨刟ccessToken
+ */
++ (void)setAccessToken:(NSString *)accessToken;
+
+/**
+ * 璐︽埛娉ㄩ攢鎺ュ彛
+ *
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鐧诲嚭鎴愬姛
+ */
++ (void)logout:(void (^)(NSError *error))completion;
+
+
+/**
+ 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS9浠ヤ笂锛屽寘鎷琲OS9
+
+ @param url 璺宠浆杩囨潵鐨剈rl
+ @param options 鍙傛暟锛岄粯璁や负绌猴紝鐩墠鏈繘琛屽鐞嗭紝棰勭暀
+ @param delegate 濮旀墭
+ @return 缁撴灉
+ */
++ (BOOL)handleOpenUrl:(NSURL *)url options:(NSDictionary *)options delegate:(id<EZOpenSDKDelegate>)delegate;
+
+/**
+ * 鑾峰彇SDK鐗堟湰鍙锋帴鍙�
+ *
+ * @return 鐗堟湰鍙�
+ */
++ (NSString *)getVersion;
+
+/**
+ * 鎵撳紑浜戝瓨鍌ㄤ腑闂撮〉
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 璁惧閫氶亾鍙�
+ */
++ (void)openCloudPage:(NSString *)deviceSerial channelNo:(NSInteger)channelNo;
+
+/**
+ * 鎵撳紑淇敼瀵嗙爜涓棿椤�
+ *
+ * @param completion 鍥炶皟block resultCode涓�0鏃惰〃绀轰慨鏀瑰瘑鐮佹垚鍔�
+ */
++ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;
+
+/**
+ 鏄惁宸茬粡鐧诲綍
+
+ @return YES锛氬凡缁忕櫥褰曪紱NO锛氭湭鐧诲綍
+ */
++ (BOOL)isLogin;
+
+/**
+ 鑾峰彇褰撳墠accessToken
+
+ @return accessToken
+ */
++ (NSString *)getAccesstoken;
+
+#pragma mark - 鎾斁鍣ㄥ垱寤篈pi
+
+/**
+ * 鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo;
+
+/**
+ * 鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄锛坒or 鍥芥爣锛�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param strCameraNo 閫氶亾鍙�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ strCameraNo:(NSString *)strCameraNo DEPRECATED_MSG_ATTRIBUTE("use createPlayerWithDeviceSerial:cameraNo: instead");
+
+/**
+ * 涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 铏氭嫙閫氶亾
+ * @param useSubStream 鏄惁浣跨敤瀛愮爜娴�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ useSubStream:(BOOL)useSubStream;
+
+/**
+ * 鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
+ *
+ * @param url 鎾斁url锛岀洰鍓嶅彧鏀寔璇ュ崗璁細ysproto://vtm.ys7.com:8554/live?dev=531993276&chn=1&stream=1&cln=1&isp=0&biz=3
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithUrl:(NSString *)url;
+
+
+/**
+ * 閲婃斁EZPlayer瀵硅薄
+ *
+ * @param player EZPlayer瀵硅薄
+ *
+ * @return YES/NO
+ */
++ (BOOL)releasePlayer:(EZPlayer *)player;
+
+#pragma mark - 鍙栨祦鐩稿叧Api
+
+/**
+ * 璁剧疆p2p鍔熻兘鏄惁寮�鍚帴鍙o紝榛樿涓嶅紑鍚痯2p锛岀敤鎴疯嚜宸遍�夋嫨鏄惁寮�鍚�
+ *
+ * @param enable p2p鏄惁寮�鍚�
+ */
++ (void)enableP2P:(BOOL)enable;
+
+/**
+ * 娓呴櫎鍙栨祦鏃剁殑缂撳瓨鏁版嵁
+ */
++ (void)clearStreamInfoCache;
+
+/**
+ * 鏄惁鏀寔鍥芥爣
+ * @param enable YES or NO
+ */
++ (void)enableNationalStandard:(BOOL)enable;
+
+/**
+ * 鑾峰彇鎵�鏈夌殑p2p棰勮繛鎺ヨ澶囧簭鍒楀彿锛堝寘鎷鍦ㄨ繘琛岄鎿嶄綔鐨勪互鍙婇鎿嶄綔瀹屾垚鐨勶級
+ *
+ * @return 璁惧搴忓垪鍙锋暟缁�
+ */
++ (NSArray<NSString *> *)getAllProcessedPreconnectSerials;
+
+/**
+ * 鑾峰彇鎵�鏈夋鍦ㄦ帓闃熺殑p2p棰勮繛鎺ヨ澶囧簭鍒楀彿锛堟寚杩樻病鏈夎繘琛岄鎿嶄綔鐨勶級
+ *
+ * @return 璁惧搴忓垪鍙锋暟缁�
+ */
++ (NSArray<NSString *> *)getAllToDoPreconnectSerials;
+
+/**
+ * 瀵规煇涓�璁惧杩涜p2p棰勮繛鎺ユ搷浣�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ */
++ (void)startP2PPreconnect:(NSString *)deviceSerial;
+
+/**
+ * 瀵规煇涓�璁惧杩涜p2p棰勮繛鎺ユ竻闄ゆ搷浣�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ */
++ (void)clearP2PPreconnect:(NSString *)deviceSerial;
+
+#pragma mark - 褰曞儚鏌ヨApi
+
+/**
+ * 鏌ヨ浜戝瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZCloudRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromCloud:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
+
+/**
+ * 鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
+
+/**
+ * 鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙o紝鍚屼竴涓綍鍍忓彲浠ュ悓鏃舵槸瀹氭椂褰曞儚鍜屼簨浠跺綍鍍�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param videoRecordType 褰曞儚绫诲瀷
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ videoRecordType:(EZVideoRecordType)videoRecordType
+ completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
+
+/**
+ * 鑾峰彇鎸囧畾鏃堕棿鍐呯殑鎵�鏈夊綍鍍忔枃浠�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙凤紝浼犲叆<=0鐨勫�煎垯涓洪粯璁ゅ��
+ * @param beginTime 寮�濮嬫椂闂达紝浼犲叆nil鍒欎负褰撳ぉ00:00:00
+ * @param endTime 缁撴潫鏃堕棿锛屼紶鍏il鍒欎负褰撳ぉ23:59:59
+ * @param rectype 鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚銆傞潪蹇呴�夛紝榛樿涓�0锛屼紶鍏ヨ礋鍊煎垯涓洪粯璁ゅ��
+ * @param bizType 璁惧褰掑睘涓氬姟鏉ユ簮
+ * @param platFormId 骞冲彴ID
+ * @param completion 鍥炶皟block records:EzvizRecordFileInfo鐨勬暟缁�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFile:(NSString *)deviceSerial
+ cameraNo:(NSString *)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ recType:(NSInteger)rectype
+ bizType:(NSString *)bizType
+ platFormId:(NSString *)platFormId
+ completion:(void (^)(id records, NSError *error))completion;
+
+#pragma mark - 璁惧鐩稿叧Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)addDevice:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鍒楄〃
+ *
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鑾峰彇鍒嗕韩缁欑敤鎴风殑璁惧鍒楄〃鎺ュ彛
+ *
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getSharedDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鏍规嵁搴忓垪鍙疯幏鍙栬澶囦俊鎭�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceInfo:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 鑾峰彇璁惧鐨勭増鏈俊鎭帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceVersion鐨勫璞′俊鎭紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceVersion:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;
+
+/**
+ * 閫氳繃璁惧楠岃瘉鐮佸紑鍏宠棰戝浘鐗囧姞瀵嗘帴鍙�
+ *
+ * @param isEncrypt 鏄惁鍔犲瘑锛屽彧鏈塏O(鍏抽棴)鐨勬椂鍊欓渶瑕佽澶囬獙璇佺爜鐨勭浉鍏冲弬鏁�(vaildateCode)
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceEncryptStatus:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ encrypt:(BOOL)isEncrypt
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙蜂慨鏀硅澶囧悕绉版帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param deviceName 璁惧鍚嶇О
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀轰慨鏀规垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceName:(NSString *)deviceName
+ deviceSerial:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰垹闄ゅ綋鍓嶈处鍙风殑璁惧鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ * @see 璇ユ帴鍙d笌缁堢缁戝畾鍔熻兘鐩稿叧锛屼細閬囧埌鍒犻櫎鏃舵姤106002鐨勯敊璇紝璇峰叧闂粓绔粦瀹氫互鍚庡啀璇�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteDevice:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧瓨鍌ㄤ粙璐ㄧ姸鎬�(濡傛槸鍚﹀垵濮嬪寲锛屾牸寮忓寲杩涘害绛�)
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZStorageInfo鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getStorageStatus:(NSString *)deviceSerial
+ completion:(void (^)(NSArray *storageStatus, NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰鍒嗗尯缂栧彿鏍煎紡鍖栧垎鍖猴紙SD鍗★級
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param storageIndex 鏌ヨ杩斿洖鐨勫垎鍖哄彿锛�0琛ㄧず鍏ㄩ儴鏍煎紡鍖栵紝鍙兘浼氭湁鍑犲潡纭洏鐨勬儏鍐�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)formatStorage:(NSString *)deviceSerial
+ storageIndex:(NSInteger)storageIndex
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囧崌绾ф椂鐨勮繘搴︾姸鎬�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceUpgradeStatus瀵硅薄锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceUpgradeStatus:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;
+
+/**
+ * 閫氳繃璁惧搴忓垪鍙峰璁惧杩涜鍗囩骇鎿嶄綔锛屽墠鎻愭槸璇ヨ澶囨湁鏇存柊杞欢鐨勬彁绀�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鎿嶄綔鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)upgradeDevice:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇鎶撳彇鎽勫儚澶村浘鐗囩殑url鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖url鍦板潃淇℃伅锛岄敊璇椂杩斿洖閿欒鐮�
+ * @see 璇ユ帴鍙f瘮杈冭�楁椂锛屼笉寤鸿杩涜鎵归噺璁惧鎶撳浘锛孲DK鍐呴儴鍙敮鎸�6涓猦ttp璇锋眰骞跺彂锛岃鎺ュ彛浼氭寔缁崰鐢╤ttp璇锋眰璧勬簮锛屽鏋滈亣鍒癶ttp璇锋眰寤舵椂宸ㄥぇ闂锛屼紭鍏堣�冭檻鎶撳浘鎺ュ彛骞跺彂閫犳垚鐨勯棶棰�,
+ * 鎶撳浘灏嗗湪鏈嶅姟鍣ㄧ淇濈暀2涓皬鏃�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)captureCamera:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ completion:(void (^)(NSString *url, NSError *error))completion;
+
+/**
+ * 璁剧疆璁惧閫氶亾鐨勬竻鏅板害
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param videoLevel 閫氶亾娓呮櫚搴︼紝0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+ * @param completion 鍥炶皟block锛屾棤error琛ㄧず璁剧疆鎴愬姛
+ * @see 濡傛灉鏄鍦ㄦ挱鏀炬椂璋冪敤璇ユ帴鍙o紝璁剧疆娓呮櫚搴︽垚鍔熶互鍚庡繀椤昏EZPlayer璋冪敤stopRealPlay鍐嶈皟鐢╯tartRealPlay閲嶆柊鍙栨祦鎵嶆垚瀹屾垚鐢婚潰娓呮櫚搴︾殑鍒囨崲銆�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setVideoLevel:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ videoLevel:(EZVideoLevelType)videoLevel
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 璁惧璁剧疆甯冮槻鐘舵�侊紝鍏煎A1鍜孖PC璁惧鐨勫竷闃�
+ *
+ * @param defence 甯冮槻鐘舵��, IPC甯冮槻鐘舵�佸彧鏈�0鍜�1锛孉1鏈�0:鐫$湢 8:鍦ㄥ 16:澶栧嚭
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDefence:(EZDefenceStatus)defence
+ deviceSerial:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+#pragma mark - 浜戝彴鎺у埗Api
+
+/**
+ * PTZ 鎺у埗鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param command ptz鎺у埗鍛戒护
+ * @param action 鎺у埗鍚姩/鍋滄
+ * @param speed 浜戝彴閫熷害锛�0-鎱紝1-閫備腑锛�2-蹇�
+ * @param resultBlock 鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)controlPTZ:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ command:(EZPTZCommand)command
+ action:(EZPTZAction)action
+ speed:(NSInteger)speed
+ result:(void (^)(NSError *error))resultBlock;
+
+/**
+ * 鎽勫儚澶存樉绀烘帶鍒舵帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param command 鏄剧ず鎺у埗鍛戒护
+ * @param resultBlock 鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ */
++ (void)controlVideoFlip:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ command:(EZDisplayCommand)command
+ result:(void (^)(NSError *error))resultBlock;
+
+#pragma mark - 鍛婅鐩稿叧Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧憡璀︿俊鎭垪琛紝璁惧搴忓垪鍙蜂负nil鏃舵煡璇㈡暣涓处鎴蜂笅鐨勫憡璀︿俊鎭垪琛�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param beginTime 鎼滅储鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鎼滅储鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZAlarmInfo鐨勫璞℃暟鎹拰鏌ヨ鏃堕棿鑼冨洿鍐呯殑鍛婅涓暟鐨勬�绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getAlarmList:(NSString *)deviceSerial
+ pageIndex:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *alarmList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ * @param data 闇�瑕佽В瀵嗙殑鏁版嵁
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ *
+ * @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
+
+/**
+ * 鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ * @param data 闇�瑕佽В瀵嗙殑鏁版嵁
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param type 1:璁惧鍔犲瘑锛�2锛氬钩鍙板姞瀵�
+ *
+ * @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
+
+/**
+ * 璁剧疆鍛婅淇℃伅涓哄凡璇绘帴鍙�
+ *
+ * @param alarmIds 鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓猧d,鍚﹀垯浼氭姤閿�
+ * @param status 鍛婅娑堟伅鐘舵��
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿缃垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setAlarmStatus:(NSArray *)alarmIds
+ alarmStatus:(EZMessageStatus)status
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁alarmId鍒犻櫎鍛婅淇℃伅鎺ュ彛
+ *
+ * @param alarmIds 鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓狪d锛屽惁鍒欎細鎶ラ敊
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteAlarm:(NSArray *)alarmIds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栨湭璇绘秷鎭暟锛岃澶囧簭鍒楀彿涓虹┖鏃惰幏鍙栨墍鏈夎澶囩殑鏈娑堟伅鏁�
+ *
+ * @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙凤紝涓虹┖鏃惰繑鍥炶处鎴蜂笅鎵�鏈夎澶囩殑鏈娑堟伅鏁�
+ * @param type 娑堟伅绫诲瀷锛欵ZMessageTypeAlarm 鍛婅娑堟伅锛�1锛夛紝EZMessageTypeLeave 鐣欒█娑堟伅锛�2锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖鏈鏁伴噺锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getUnreadMessageCount:(NSString *)deviceSerial
+ messageType:(EZMessageType)type
+ completion:(void (^)(NSInteger count, NSError *error))completion;
+
+#pragma mark - 璇煶鐣欒█娑堟伅鏁版嵁Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囩殑鐣欒█娑堟伅鍒楄〃
+ *
+ * @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙�
+ * @param beginTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿
+ * @param pageIndex 鍒嗛〉椤电爜
+ * @param pageSize 鍒嗛〉鍗曢〉鏁伴噺
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZLeaveMessage鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getLeaveMessageList:(NSString *)deviceSerial
+ pageIndex:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鏍规嵁leaveId璁剧疆鐣欒█娑堟伅鐘舵��
+ *
+ * @param leaveIds 鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ * @param status 闇�瑕佽缃殑鐣欒█鐘舵�侊紝鐩墠鍙敮鎸� EZMessageStatusRead(宸茶)
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setLeaveMessageStatus:(NSArray *)leaveIds
+ messageStatus:(EZMessageStatus)status
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁leaveId鍒犻櫎鐣欒█娑堟伅
+ *
+ * @param leaveIds 鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鍒犻櫎鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteLeaveMessage:(NSArray *)leaveIds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁EZLeaveMessage瀵硅薄淇℃伅鑾峰彇璇煶鐣欒█娑堟伅鏁版嵁鎺ュ彛
+ * @param message 鐣欒█娑堟伅瀵硅薄
+ * @param completion 鍥炶皟block 锛坮esultCode = 1 琛ㄧず璇煶涓嬭浇鎴愬姛锛�-1琛ㄧず涓嬭浇澶辫触锛�
+ *
+ * @return operation
+ */
++ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
+ completion:(void (^)(NSData *data, NSInteger resultCode))completion;
+
+#pragma mark - VideoTalk瑙嗛閫氳瘽鐩稿叧Api
+
+/**
+ * 鑾峰彇鎵嬭〃鏈嶅姟鐩稿叧淇℃伅
+ * @param deviceId 璁惧搴忓垪鍙�
+ * @param completion operation
+ */
++ (void)requestGetWatchServerInfo:(NSString *)deviceId
+ completion:(void (^)(id watchServerInfo, NSError *error))completion;
+
+/**
+ * 鍒涘缓浼氳淇℃伅
+ * @param password 鑷畾涔夊瘑鐮�
+ * @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+ * @param limit 闄愬埗鏈�澶т汉鏁� 鏈�澶�100
+ * @param completion operation
+ */
++ (void)requestCallingMeetingInfo:(NSString *)password
+ customId:(NSInteger)customId
+ limit:(NSInteger)limit
+ completion:(void (^)(int32_t roomId, NSString *vtmAddress, NSString *clientid, NSInteger customId, NSString *controlServerAddress, NSError *error))completion;
+
+/**
+ * 鍔犲叆鏂硅幏鍙栦細璁俊鎭�
+ * @param roomId 鎴块棿鍙�
+ * @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+ * @param completion operation
+ */
++ (void)requestCalledMeetingInfo:(NSString *)roomId
+ customId:(NSInteger)customId
+ completion:(void (^)(int32_t roomId, NSString *vtmAddress,NSString *clientid, NSInteger customId, NSString *controlServerAddress, NSError *error))completion;
+
+/**
+ * 閭�璇疯澶囪繘鍏ユ埧闂�
+ * @param roomId 鎴块棿鍙�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param streamType 涓诲瓙鐮佹祦 1-涓荤爜娴侊紝2-瀛愮爜娴侊紝mode涓�2鏃跺彲涓嶄紶
+ * @param mode 鍔犲叆妯″紡 1-鍙屽悜闊宠棰戞ā寮忥紙榛樿锛夛紝2-瀵硅妯″紡
+ * @param maxActiveSeconds 鍏ヤ細鏈�闀挎椂闂达紙绉掞級
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)inviteDeviceEnterMeeting:(NSString *)roomId
+ deviceSerial:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ streamType:(NSInteger)streamType
+ mode:(NSInteger)mode
+ maxActiveSeconds:(NSInteger)maxActiveSeconds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 寮哄埗璁惧閫�鍑烘埧闂�
+ * @param roomId 鎴块棿鍙�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)kickoutDeviceMoveOutRoom:(NSString *)roomId
+ deviceSerial:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ completion:(void (^)(NSError *error))completion;
+
+#pragma mark - WiFi閰嶇綉鐩稿叧Api
+
+/**
+ * 灏濊瘯鏌ヨ璁惧淇℃伅锛岃澶嘩ifi閰嶇疆鍓嶆煡璇竴娆¤澶囩殑淇℃伅
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param deviceType 璁惧鍨嬪彿锛屾棤娉曡幏鍙栧埌璁惧鍨嬪彿鍒欏彲浼爊il
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ * @see 鍏ㄦ柊鐨勮澶囨槸娌℃湁娉ㄥ唽鍒板钩鍙扮殑锛屾墍浠ヤ細鍑虹幇璁惧涓嶅瓨鍦ㄧ殑鎯呭喌锛岃澶噖ifi閰嶇疆鎴愬姛浠ュ悗浼氫笂鎶ユ暟鎹埌钀ょ煶浜戝钩鍙帮紝浠ュ悗姣忔鏌ヨ灏变笉浼氬嚭鐜拌澶囦笉瀛樺湪鐨勬儏鍐典簡銆�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)probeDeviceInfo:(NSString *)deviceSerial
+ deviceType:(NSString *)deviceType
+ completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�
+ * @param statusBlock 杩斿洖杩炴帴璁惧鐨刉iFi閰嶇疆鐘舵��
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
+ * @param mode 閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
+ * @param statusBlock 杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ mode:(NSInteger)mode
+ deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
+ * @param mode 閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
+ * @param apiUrl 鎸囧畾鍘诲摢涓钩鍙版煡璇�
+ * @param statusBlock 杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ mode:(NSInteger)mode
+ apiUrl:(NSString *)apiUrl
+ deviceStatus:(void (^)(EZWifiConfigStatus status,NSString *deviceSerial))statusBlock;
+
+/**
+ * @since 3.0.0
+ * Wifi閰嶇疆鍋滄鎺ュ彛
+ *
+ * @return YES/NO
+ */
++ (BOOL)stopConfigWifi;
+
+#pragma mark - AP閰嶇綉鐩稿叧Api
+
+/**
+ * AP閰嶇綉鎺ュ彛
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param callback 缁撴灉鍥炶皟锛屾敞鎰忥細杩斿洖YES浠呬粎浠h〃鎴愬姛灏哤iFi淇℃伅鍙戦�佺粰璁惧锛屼笉浠h〃璁惧閰嶇綉鎴愬姛
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ result:(void (^)(BOOL ret))callback;
+
+/**
+ * AP閰嶇綉鎺ュ彛锛堟帹鑽愶紝v5.0鏂板锛屽皝瑁呬簡璁惧鐘舵�佽疆璇㈡楠わ級
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param statusBlock 缁撴灉鍥炶皟锛岃繑鍥為厤缃戣繃绋嬩腑鐨勫悇绉嶇姸鎬�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * 鍋滄AP閰嶇綉
+ */
++ (void)stopAPConfigWifi;
+
+#pragma mark - 鎺ヨЕ寮忛厤缃� New AP Config
+
+/**
+ * 鑾峰彇鎺ヨЕ寮廇P閰嶇綉token
+ *
+ * @param completion 鍥炶皟
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getNewApConfigToken:(void(^)(EZConfigTokenInfo *tokenInfo, NSError *error))completion;
+
+/**
+ * 寮�濮婲ewAP閰嶇綉锛堥渶杩炴帴璁惧鐑偣锛�
+ * @param token 閰嶇綉token
+ * @param ssid WiFi ssid
+ * @param password WiFi 瀵嗙爜
+ * @param lbsDomain lbs 鍩熷悕
+ * @param handler 鍥炶皟
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startNewApConfigWithToken:(NSString *)token
+ ssid:(NSString *)ssid
+ password:(NSString *)password
+ lbsDomain:(NSString *)lbsDomain
+ completionHandler:(void(^)(EZNewAPConfigStatus status, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧鐘舵�侊紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceInfo:(void(^)(EZAPDevInfo *devInfo, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧褰撳墠鍛ㄨ竟WiFi鍒楄〃锛屼笂闄�20涓紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceWifiList:(void(^)(NSArray<EZWiFiItemInfo*> *wifiList, NSError *error))handler;
+
+/**
+ * 鏌ヨ璁惧缁戝畾鐘舵��
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (NSURLSessionDataTask *)queryPlatformBindStatus:(NSString *)deviceSerial
+ completion:(void(^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 璁剧疆閰嶇綉璁惧缃戝叧鍦板潃 鍙��
+ * @param devRouteDomain 璁惧缃戝叧鍦板潃
+ */
++ (void)setDevRouteDomain:(NSString *)devRouteDomain;
+
+#pragma mark - 鐢ㄦ埛鐩稿叧Api
+
+/**
+ * 鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅鐨勬帴鍙�
+ *
+ * @param completion 鍥炶皟block锛� 姝e父鏃惰繑鍥濫ZUserInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getUserInfo:(void (^)(EZUserInfo *userInfo, NSError *error))completion;
+
+#pragma mark - 鍏朵粬Api
+
+/**
+ * 鑾峰彇缁堢锛堟墜鏈虹瓑锛夊敮涓�璇嗗埆鐮�
+ *
+ * @return 缁堢鍞竴璇嗗埆鐮�
+ */
++ (NSString *)getTerminalId;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDKFramework.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDKFramework.h
new file mode 100644
index 0000000..8f554ab
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDKFramework.h
@@ -0,0 +1,54 @@
+//
+// EZOpenSDKFramework.h
+// EZOpenSDKFramework
+//
+// Created by JuneCheng on 2022/7/23.
+//
+
+#ifndef EZOpenSDKFramework_h
+#define EZOpenSDKFramework_h
+
+#import <EZOpenSDKFramework/EZAccessToken.h>
+#import <EZOpenSDKFramework/EZAlarmInfo.h>
+#import <EZOpenSDKFramework/EZAreaInfo.h>
+#import <EZOpenSDKFramework/EZCameraInfo.h>
+#import <EZOpenSDKFramework/EZCloudRecordDownloadTask.h>
+#import <EZOpenSDKFramework/EZCloudRecordFile.h>
+#import <EZOpenSDKFramework/EZDetectorInfo.h>
+#import <EZOpenSDKFramework/EZDeviceCloudServiceInfo.h>
+#import <EZOpenSDKFramework/EZDeviceInfo.h>
+#import <EZOpenSDKFramework/EZDevicePtzAngleInfo.h>
+#import <EZOpenSDKFramework/EZDeviceRecordDownloadTask.h>
+#import <EZOpenSDKFramework/EZDeviceRecordFile.h>
+#import <EZOpenSDKFramework/EZDeviceUpgradeStatus.h>
+#import <EZOpenSDKFramework/EZDeviceVersion.h>
+#import <EZOpenSDKFramework/EZHCNetDeviceInfo.h>
+#import <EZOpenSDKFramework/EZHiddnsDeviceInfo.h>
+#import <EZOpenSDKFramework/EZLeaveMessage.h>
+#import <EZOpenSDKFramework/EZPlayerExParamInfo.h>
+#import <EZOpenSDKFramework/EZProbeDeviceInfo.h>
+#import <EZOpenSDKFramework/EZRecordDownloader.h>
+#import <EZOpenSDKFramework/EZRecordDownloadTask.h>
+#import <EZOpenSDKFramework/EZStorageInfo.h>
+#import <EZOpenSDKFramework/EZTokenKit.h>
+#import <EZOpenSDKFramework/EZUserInfo.h>
+#import <EZOpenSDKFramework/EZVideoQualityInfo.h>
+#import <EZOpenSDKFramework/EZVideoTransformer.h>
+#import <EZOpenSDKFramework/EzvizRecordFileInfo.h>
+#import <EZOpenSDKFramework/EzvizWatchServerInfo.h>
+
+#import <EZOpenSDKFramework/EZSADPDeviceInfo.h>
+#import <EZOpenSDKFramework/EZAPDevInfo.h>
+#import <EZOpenSDKFramework/EZConfigTokenInfo.h>
+#import <EZOpenSDKFramework/EZWiFiItemInfo.h>
+
+#import <EZOpenSDKFramework/EZConstants.h>
+#import <EZOpenSDKFramework/EZConstants_Auth.h>
+#import <EZOpenSDKFramework/EZConstants_WifiConfig.h>
+#import <EZOpenSDKFramework/EZOpenSDK.h>
+#import <EZOpenSDKFramework/EZGlobalSDK.h>
+#import <EZOpenSDKFramework/EZHCNetDeviceSDK.h>
+#import <EZOpenSDKFramework/EZPlayer.h>
+#import <EZOpenSDKFramework/EZStreamPlayer.h>
+
+#endif /* EZOpenSDKFramework_h */
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPMPlayPrivateTokenInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPMPlayPrivateTokenInfo.h
new file mode 100644
index 0000000..7d69b75
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPMPlayPrivateTokenInfo.h
@@ -0,0 +1,22 @@
+//
+// EZPMPlayPrivateTokenInfo.h
+// EZPlay
+//
+// Created by JuneCheng on 2022/11/24.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZPMPlayPrivateTokenInfo : NSObject
+
+@property (nonatomic, assign) BOOL enable;///<
+@property (nonatomic, copy) NSString *token;///<
+
+
+- (instancetype)initWithType:(NSInteger)type data:(NSData *)data;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPlayer.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPlayer.h
new file mode 100644
index 0000000..baea2e2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPlayer.h
@@ -0,0 +1,446 @@
+//
+// EZPlayer.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/16.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class EZDeviceRecordFile;
+@class EZCloudRecordFile;
+@class EZPlayer;
+@class EZPlayerExParamInfo;
+@class EZDevicePtzAngleInfo;
+@class EZPMPlayPrivateTokenInfo;
+
+/**
+ * 棰勮娓呮櫚搴�
+ */
+typedef NS_ENUM(NSInteger, EZVideoQuality) {
+ EZVideoQualityLow = 0, //娴佺晠
+ EZVideoQualityMiddle = 1, //鍧囪
+ EZVideoQualityHigh = 2 //楂樻竻
+};
+
+/* 鎾斁鍣‥ZPlayer鐨勭姸鎬佹秷鎭畾涔� */
+typedef NS_ENUM(NSInteger, EZMessageCode) {
+ PLAYER_REALPLAY_START = 1, //鐩存挱寮�濮�
+ PLAYER_VIDEOLEVEL_CHANGE = 2, //鐩存挱娴佹竻鏅板害鍒囨崲涓�
+ PLAYER_STREAM_RECONNECT = 3, //鐩存挱娴佸彇娴佹鍦ㄩ噸杩�
+ PLAYER_VOICE_TALK_START = 4, //瀵硅寮�濮�
+ PLAYER_VOICE_TALK_END = 5, //瀵硅缁撴潫
+ PLAYER_STREAM_START = 10, //褰曞儚鍙栨祦寮�濮�
+ PLAYER_PLAYBACK_START = 11, //褰曞儚鍥炴斁寮�濮嬫挱鏀�
+ PLAYER_PLAYBACK_STOP = 12, //褰曞儚鍥炴斁缁撴潫鎾斁
+ PLAYER_PLAYBACK_FINISHED = 13, //褰曞儚鍥炴斁琚敤鎴峰己鍒朵腑鏂�
+ PLAYER_PLAYBACK_PAUSE = 14, //褰曞儚鍥炴斁鏆傚仠
+ PLAYER_NET_CHANGED = 21, //鎾斁鍣ㄦ娴嬪埌wifi鍙樻崲杩�
+ PLAYER_NO_NETWORK = 22, //鎾斁鍣ㄦ娴嬪埌鏃犵綉缁�
+ PLAYER_CLOUD_IFRAME_CHANGED = 23, //浜戝瓨鍌ㄥ揩鏀炬椂锛岀敱鍏ㄥ抚蹇斁鍒囨崲鍒版娊甯у揩鏀剧殑鎻愮ず鍥炶皟
+ PLAYER_PLAYSPEED_LOWER = 24, //浜戝瓨鍌ㄥ揩鏀炬椂鐨勯檷閫熼�氱煡(瀛樺湪涓ゆ闄嶉�燂細褰撳墠鍊嶉�熷ぇ浜�4鍊嶉�熸椂锛岄檷鍒�4鍊嶉�燂紱褰撳墠涓�4鍊嶉�熸椂锛岄檷涓�1鍊嶉��)
+};
+
+
+/**
+ * 鍥炴斁閫熺巼
+ */
+typedef NS_ENUM(NSInteger, EZPlaybackRate) {
+ EZOPENSDK_PLAY_RATE_1_16 = 9, //浠�1/16鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_1_8 = 7, //浠�1/8鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_1_4 = 5, //浠�1/4鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_1_2 = 3, //浠�1/2鍊嶉�熸挱鏀�
+ EZOPENSDK_PLAY_RATE_1 = 1, //浠ユ甯搁�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_2 = 2, //浠�2鍊嶉�熸挱鏀�
+ EZOPENSDK_PLAY_RATE_4 = 4, //浠�4鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_8 = 6, //浠�8鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_16 = 8, //浠�16鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_32 = 10, //浠�32鍊嶉�熷害鎾斁
+};
+
+/// 钀ょ煶鎾斁鍣╠elegate鏂规硶
+@protocol EZPlayerDelegate <NSObject>
+
+@optional
+/**
+ * 鎾斁鍣ㄦ挱鏀惧け璐ラ敊璇洖璋�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param error 鎾斁鍣ㄩ敊璇�
+ */
+- (void)player:(EZPlayer *)player didPlayFailed:(NSError *)error;
+
+/**
+ * 鎾斁鍣ㄦ秷鎭洖璋�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param messageCode 鎾斁鍣ㄦ秷鎭爜锛岃瀵圭収EZOpenSDK澶存枃浠朵腑鐨凟ZMessageCode浣跨敤
+ */
+- (void)player:(EZPlayer *)player didReceivedMessage:(NSInteger)messageCode;
+
+/**
+ * 璇ユ柟娉曞簾寮冧簬v4.8.8鐗堟湰锛屽簳灞傚簱涓嶅啀鏀寔銆傝浣跨敤getStreamFlow鏂规硶
+ * 鏀跺埌鐨勬暟鎹暱搴︼紙姣忕璋冪敤涓�娆★級
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param dataLength 鎾斁鍣ㄦ祦濯掍綋鏁版嵁鐨勯暱搴︼紙姣忕瀛楄妭鏁帮級
+ */
+- (void)player:(EZPlayer *)player didReceivedDataLength:(NSInteger)dataLength DEPRECATED_MSG_ATTRIBUTE("use getStreamFlow instead");
+
+/**
+ * 鏀跺埌鐨勭敾闈㈤暱瀹藉��
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param height 楂樺害
+ * @param width 瀹藉害
+ */
+- (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width;
+
+/**
+ * 璁惧浜戝彴瑙掑害鏁版嵁鍥炶皟
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param info 绉佹湁鏁版嵁
+ */
+- (void)player:(EZPlayer *)player didReceivedDevicePtzAngleInfo:(EZDevicePtzAngleInfo *)info;
+
+/**
+ * 鎾斁杩囩▼涓� 鍥炶皟瑙g爜鏁版嵁
+ * 閲嶈锛氳鍥炶皟浼氭瘮杈冮绻�(涓�绉掕嫢骞叉)锛屽悓鏃剁洿鎺ョ敱鎾斁搴撶嚎绋嬪洖璋冧笂鏉ワ紝璇峰嬁鍦ㄦ柟娉曚腑鍋氳�楁椂鎿嶄綔
+ * 閲嶈锛氬洖璋冪殑鏁版嵁鐨勫唴瀛樻槸鐢辨挱鏀惧簱鍐呴儴鍒嗛厤骞剁鐞嗙殑锛屽湪浣跨敤鏃讹紝璇峰悓姝ュ鐞嗗洖璋冪殑data锛涘闇�寮傛澶勭悊锛岃鎷疯礉璇ユ暟鎹�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param data 鎾斁搴撹В鐮佸嚭鐨勬暟鎹�
+ * @param width 瑙嗛瀹藉害
+ * @param height 瑙嗛楂樺害
+ */
+- (void)player:(EZPlayer *)player didDecodedData:(NSData *)data width:(NSInteger)width height:(NSInteger)height;
+
+/**
+ * 鍙栨祦鏁版嵁涓幏鍙栧紑闂╰oken鍥炶皟
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param tokenInfo token瀵硅薄
+ */
+- (void)player:(EZPlayer *)player playPrivateTokenInfo:(EZPMPlayPrivateTokenInfo *)tokenInfo;
+
+@end
+
+/// 姝ょ被涓鸿悿鐭虫挱鏀惧櫒绫�
+@interface EZPlayer : NSObject
+
+/// EZPlayer鍏宠仈鐨刣elegate
+@property (nonatomic, weak) id<EZPlayerDelegate> delegate;
+
+/// 鏄惁璁╂挱鏀惧櫒澶勭悊杩涘叆鍚庡彴,YES:鑷姩澶勭悊;NO:涓嶅鐞�,榛樿涓篩ES
+@property (nonatomic, assign) BOOL backgroundModeByPlayer;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰閫氶亾鍙峰垱寤篍ZPlayer瀵硅薄
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo;
+//for 鍥芥爣
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial strCameraNo:(NSString *)strCameraNo;
+/**
+ * 鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
+ *
+ * @param url 鎾斁url
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithUrl:(NSString *)url;
+
+
+/**
+ 灞�鍩熺綉璁惧鍒涘缓鎾斁鍣ㄦ帴鍙�
+
+ @param userId 鐢ㄦ埛id锛岀櫥褰曞眬鍩熺綉璁惧鍚庤幏鍙�
+ @param cameraNo 閫氶亾鍙�
+ @param streamType 鐮佹祦绫诲瀷 1:涓荤爜娴� 2:瀛愮爜娴�
+ @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithUserId:(NSInteger)userId cameraNo:(NSInteger)cameraNo streamType:(NSInteger)streamType;
+
+/**
+ * @since 4.19.2
+ * 涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 铏氭嫙閫氶亾
+ * @param useSubStream 鏄惁浣跨敤瀛愮爜娴�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo useSubStream:(BOOL)useSubStream;
+
+/**
+ * 閿�姣丒ZPlayer
+ *
+ * @return YES/NO;
+ */
+- (BOOL)destoryPlayer;
+
+/**
+ * 璁剧疆浣跨敤纭欢瑙g爜鍣ㄤ紭鍏堬紝闇�鍦╯tartRealPlay涔嬪墠璋冪敤
+ *
+ * @param HDPriority 鏄惁纭В浼樺厛
+ */
+- (void)setHDPriority:(BOOL)HDPriority;
+
+/**
+ 鑾峰彇褰撳墠鐨勮蒋纭В鎯呭喌锛屽湪鐮佹祦姝e父鎾斁鍚庤皟鐢�
+
+ @return 1锛氳蒋瑙� 2锛氱‖瑙� 0锛氬嚭閿�
+ */
+- (int)getHDPriorityStatus;
+
+/**
+ * 璁剧疆璁惧褰掑睘涓氬姟鏉ユ簮锛岄渶瑕佸湪棰勮鍥炴斁鍓嶈皟鐢� 鍥芥爣璁惧浣跨敤
+ *
+ * @param bizType 绫诲瀷 鍥芥爣涓� bizType='GB28181'
+ */
+- (void)setBizType:(NSString *)bizType;
+
+/**
+ * 骞冲彴id 鍥芥爣璁惧浣跨敤
+ *
+ * @param platformId 绫诲瀷
+*/
+-(void)setPlatformId:(NSString *)platformId;
+
+/**
+ * 璁剧疆鎾斁鍣ㄧ殑view
+ *
+ * @param playerView 鎾斁鍣╲iew
+ */
+- (void)setPlayerView:(UIView *)playerView;
+
+/**
+ * 鏄惁闈欓煶鎾斁锛宻tartRealPlay涔嬪墠璋冪敤
+ *
+ * @param isSilencePlay 鏄惁闈欓煶鎾斁
+ */
+- (void)setSilencePlay:(BOOL)isSilencePlay;
+
+/**
+ * 寮�濮嬫挱鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startRealPlay;
+
+/**
+ * 鍋滄鎾斁锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)stopRealPlay;
+
+/**
+ * 璁剧疆鎾斁鍣ㄨВ鐮佸瘑鐮�
+ *
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ */
+- (void)setPlayVerifyCode:(NSString *)verifyCode;
+
+/**
+ * 寮�鍚0闊�
+ *
+ * @return YES/NO
+ */
+- (BOOL)openSound;
+
+/**
+ * 鍏抽棴澹伴煶
+ *
+ * @return YES/NO
+ */
+- (BOOL)closeSound;
+
+/**
+ 鑾峰彇鎾斁缁勪欢鍐呴儴鐨勬挱鏀惧簱鐨刾ort
+
+ @return 鎾斁搴撶殑port,鍙兘涓�-1锛堟棤鏁堝�硷級
+ */
+- (int)getInnerPlayerPort;
+
+/**
+ 鑾峰彇褰撳墠宸叉挱鏀剧殑鎬绘祦閲忥紝鍗曚綅瀛楄妭
+ eg.璁$畻姣忕鐨勬祦閲忥細
+ NSInteger a = [self getStreamFlow];
+ //1s鍚庤皟鐢�
+ NSInteger b = [self getStreamFlow];
+ NSInteger perSecondFlow = b - a;
+
+ @return 娴侀噺鍊�
+ */
+- (NSInteger)getStreamFlow;
+
+/**
+ * 寮�濮婽TS瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startVoiceTalk;
+
+/**
+ * 寮�濮婽TS瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ * 閽堝浜嶯VR瀵硅浣跨敤
+ * @return YES/NO
+ */
+- (BOOL)startVoiceTalkNeedVoiceChannel:(BOOL)needVoiceChannel;
+
+/**
+ * 寮�濮婹os瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startVoiceTalkByQos;
+
+/**
+ * 鍋滄瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)stopVoiceTalk;
+
+/**
+ 棰勮鏃跺紑濮嬫湰鍦板綍鍍忛褰曞埗鍔熻兘锛屽紓姝ユ柟娉�
+
+ @param path 鏂囦欢瀛樺偍璺緞
+ @return YES/NO
+ */
+- (BOOL)startLocalRecordWithPathExt:(NSString *)path;
+
+
+/**
+ 缁撴潫鏈湴褰曞儚棰勫綍鍒讹紝骞剁敓鎴恗p4褰曞埗鏂囦欢锛屽紓姝ユ柟娉�
+
+ @param complete 鎿嶄綔鏄惁鎴愬姛 YES/NO
+ */
+- (void)stopLocalRecordExt:(void (^)(BOOL ret))complete;
+
+
+/**
+ * 鍗婂弻宸ュ璁蹭笓鐢ㄦ帴鍙o紝鏄惁鍒囨崲鍒板惉璇寸姸鎬�
+ *
+ * @param isPressed 鏄惁鍙鐘舵��
+ *
+ * @return YES/NO
+ */
+- (BOOL)audioTalkPressed:(BOOL)isPressed;
+
+/**
+ * 寮�濮嬩簯瀛樺偍杩滅▼鍥炴斁锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ * @param cloudFile 浜戝瓨鍌ㄦ枃浠朵俊鎭�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startPlaybackFromCloud:(EZCloudRecordFile *)cloudFile;
+
+/**
+ * 寮�濮嬭繙绋婼D鍗″洖鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @param deviceFile SD鍗℃枃浠朵俊鎭�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startPlaybackFromDevice:(EZDeviceRecordFile *)deviceFile;
+
+/**
+ * 鏆傚仠杩滅▼鍥炴斁鎾斁
+ */
+- (BOOL)pausePlayback;
+
+/**
+ * 缁х画杩滅▼鍥炴斁鎾斁
+ */
+- (BOOL)resumePlayback;
+
+/**
+ * 鏍规嵁鍋忕Щ鏃堕棿鎾斁
+ *
+ * @param offsetTime 褰曞儚鍋忕Щ鏃堕棿
+ */
+- (void)seekPlayback:(NSDate *)offsetTime;
+
+/**
+ * 鑾峰彇褰撳墠鎾斁鏃堕棿杩涘害
+ *
+ * @return 鎾斁杩涘害鐨凬SDate鏁版嵁
+ */
+- (NSDate *)getOSDTime;
+
+/**
+ * 鍋滄杩滅▼鍥炴斁
+ */
+- (BOOL)stopPlayback;
+
+/**
+ * 鐩存挱鐢婚潰鎶撳浘
+ *
+ * @param quality 鎶撳浘璐ㄩ噺锛�0锝�100锛�,鏁板�艰秺澶у浘鐗囪川閲忚秺濂斤紝鍥剧墖澶у皬瓒婂ぇ
+ *
+ * @return image
+ */
+- (UIImage *)capturePicture:(NSInteger)quality;
+
+/**
+ 鑾峰彇鍐呴儴鎾斁鍣ㄥ彞鏌勩�傚缓璁瘡娆′娇鐢ㄦ挱鏀惧櫒鍙ユ焺鏃跺潎璋冪敤姝ゆ柟娉曡幏鍙栵紝骞惰繘琛屾湁鏁堟�у垽鏂��
+
+ @return 灏忎簬0涓烘棤鏁堝�硷紝澶т簬绛変簬0涓烘湁鏁堝��
+ */
+- (int)getPlayPort;
+
+/**
+ 鑾峰彇褰撳墠鍙栨祦鏂瑰紡锛�
+
+ @return 褰撳墠鍙栨祦绫诲瀷
+ */
+- (int)getStreamFetchType;
+
+/**
+sd鍗″強浜戝瓨鍌ㄥ�嶉�熷洖鏀炬帴鍙�
+1.鏀寔鎶藉抚蹇斁鐨勮澶囨渶楂樻敮鎸�16鍊嶉�熷揩鏀撅紙鎵�鏈夊彇娴佹柟寮忥紝鍖呮嫭P2P锛�
+2.涓嶆敮鎸佹娊甯у揩鏀剧殑璁惧锛屼粎鏀寔鍐呭缃戠洿杩炲揩鏀撅紝鏈�楂樻敮鎸�8鍊�
+3.HCNetSDK鍙栨祦娌℃湁蹇斁姒傚康锛屽叏閫熸帹娴侊紝鍙敼鍙樻挱鏀惧簱閫熺巼
+4.娉ㄦ剰鍖哄埆锛�
+ 鑰丼D鍗″洖鏀句互鍙奌CNetSDK鍥炴斁锛岃缃畬閫氳繃杩斿洖鍊艰繑鍥炴垚鍔熻繕鏄け璐ワ紝娌℃湁鍏朵粬娑堟伅
+ 鏂板崗璁殑浜戝瓨鍌ㄥ洖鏀句互鍙婃敮鎸乻eek銆乧ontinue鐨勮澶嘾鏂癝D鍗″洖鏀撅紝璁剧疆瀹岄�氳繃杩斿洖鍊艰繑鍥炴垚鍔熻繕鏄け璐ワ紝濡傛灉鎴愬姛锛�
+ 鍒欏悗缁繕鏈変竴鏉ZVideoPlayerMessageStart寮傛娑堟伅琛ㄧず鎴愬姛鍐嶆鍙栨祦
+ 杩斿洖鍏朵粬閿欒鐮佽〃绀哄け璐� (鏂板崗璁簯瀛樺偍鍜屾柊SD鍗″洖鏀捐繑鍥濫Z_ERROR_NEED_RETRY 琛ㄧず闇�瑕侀噸璇曪級
+
+@param rate 鍥炴斁閫熷害锛屽叿浣撳弬鑰� EZ_PLAY_BACK_RATE
+@param mode 鍥炴斁鏃剁殑鎶藉抚鎺у埗锛屽綋鍓嶄粎浜戝瓨鍌ㄦ敮鎸併��0锛� 4鍊嶉�熷叏甯э紝8鍊嶉�熶互涓婃娊甯� 1锛氭娊甯� 2锛氬叏甯� 锛堝璁惧鍥炴斁褰撳墠涓嶆敮鎸侊紝浼犲叆0鍗冲彲锛�
+@return YES/NO
+ */
+- (BOOL)setPlaybackRate:(EZPlaybackRate) rate mode:(NSUInteger)mode;
+
+/**
+ 璁剧疆鍏ㄥ弻宸ュ璁叉椂鐨勬ā寮�,瀵硅鎴愬姛鍚庤皟鐢�
+
+ @param routeToSpeaker YES:浣跨敤鎵0鍣� NO:浣跨敤鍚瓛
+ */
+- (void)changeTalkingRouteMode:(BOOL)routeToSpeaker;
+
+/// //鎵╁睍鍙傛暟 UIKit涓撶敤
+/// @param exParamInfo EZPlayerExParamInfo
+- (void)setExParamInfo:(EZPlayerExParamInfo *)exParamInfo;
+
+/**
+ * 璁剧疆鎵撳紑鎾斁搴撶殑鏅鸿兘鍒嗘瀽锛屽綋鍓嶆俯鎰熺浉鏈虹殑妗嗘浣跨敤浜嗚鏅鸿兘鍒嗘瀽鏁版嵁锛岄瑙堟垚鍔熷悗璋冪敤锛屽湪鎾斁杩囩▼涓殢鏃跺紑鍏�
+ *
+ * @param enable YES锛氬紑 NO锛氬叧
+ *
+ * @return 杩斿洖鐘舵��
+ */
+- (BOOL)setIntelAnalysis:(BOOL)enable;
+
+@end
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPlayerExParamInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPlayerExParamInfo.h
new file mode 100644
index 0000000..1fe1a86
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZPlayerExParamInfo.h
@@ -0,0 +1,34 @@
+//
+// EZPlayerExParamInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2018/4/2.
+// Copyright 漏 2018骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+typedef enum
+{
+ EZPLAYER_STREAM_DEFAULT = 0,//榛樿
+ EZPLAYER_STREAM_MAIN,//涓荤爜娴�
+ EZPLAYER_STREAM_SUB,//瀛愮爜娴�
+ EZPLAYER_STREAM_MAX
+}EZPlayerStreamType;
+
+typedef enum
+{
+ EZPLAYER_TRANS_DEFAULT = 0, //榛樿
+ EZPLAYER_TRANS_EZVIZ,//钀ょ煶绉佹湁娴佸獟浣�
+ EZPLAYER_TRANS_RTMP,//RTMP
+ EZPLAYER_TRANS_MAX
+}EZPlayerTransportType;
+
+@interface EZPlayerExParamInfo : NSObject
+
+@property (nonatomic,copy) NSString *vtduIp; ///vtdu鏈嶅姟鍣╥p
+@property (nonatomic,assign) NSInteger vtduPort; //vtdu绔彛鍙�
+@property (nonatomic) EZPlayerStreamType streamMode; ///榛樿涓�0锛屼富鐮佹祦涓�1锛屽瓙鐮佹祦涓�2
+@property (nonatomic,assign) EZPlayerTransportType protocolType; ///浼犺緭鍗忚锛岄粯璁や负0
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZProbeDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZProbeDeviceInfo.h
new file mode 100644
index 0000000..18e7369
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZProbeDeviceInfo.h
@@ -0,0 +1,47 @@
+//
+// EZProbeDeviceInfo.h
+// EZWiFiConfigSDK
+//
+// Created by DeJohn Dong on 15/12/11.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓烘煡璇㈣澶囦俊鎭璞★紙璁惧娣诲姞鍓嶄娇鐢級
+@interface EZProbeDeviceInfo : NSObject
+
+/// 灞曠ず鍚嶇О
+@property (nonatomic, copy) NSString *displayName;
+/// 璁惧澶х被鍚�
+@property (nonatomic, copy) NSString *category;
+/// 璁惧鍨嬪彿鍚�
+@property (nonatomic, copy) NSString *model;
+/// 璁惧鐭簭鍒楀彿
+@property (nonatomic, copy) NSString *subSerial;
+/// 璁惧闀垮簭鍒楀彿
+@property (nonatomic, copy) NSString *fullSerial;
+/// 璁惧鍦ㄧ嚎鐘舵�侊紝1-鍦ㄧ嚎锛屽叾浠�-涓嶅湪绾�
+@property (nonatomic) NSInteger status;
+/// 璁惧鍥剧墖
+@property (nonatomic, copy) NSString *defaultPicPath;
+/// 鏄惁鏀寔wifi锛�0-涓嶆敮鎸侊紝1-鏀寔锛�2-鏀寔甯serId鐨勬柊鐨剋ifi閰嶇疆鏂瑰紡锛�3-鏀寔smartwifi
+@property (nonatomic) NSInteger supportWifi;
+/// 鏄惁鏀寔AP閰嶇綉锛�2-鏀寔AP锛屽叾浠栧�间负涓嶆敮鎸丄P閰嶇綉
+@property (nonatomic) NSInteger supportAP;
+/// 鏄惁鏀寔澹版尝閰嶇疆,0-涓嶆敮鎸侊紝1-鏀寔
+@property (nonatomic) NSInteger supportSoundWave;
+/// 鏄惁鏀寔浜戝瓨鍌紝0-涓嶆敮鎸侊紝1-鏀寔
+@property (nonatomic) NSInteger supportCloud;
+/// 璁惧鍗忚鐗堟湰
+@property (nonatomic, copy) NSString *releaseVersion;
+/// 璁惧鐗堟湰
+@property (nonatomic, copy) NSString *version;
+/// 鍙敤浜庢坊鍔犵殑閫氶亾鏁�
+@property (nonatomic) NSInteger availiableChannelCount;
+/// N1锛孯1锛孉1绛夎澶囧叧鑱旂殑璁惧鏁�
+@property (nonatomic) NSInteger relatedDeviceCount;
+/// 鑳藉姏闆�
+@property (nonatomic, copy) NSString *supportExt;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCCameraParam.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCCameraParam.h
new file mode 100644
index 0000000..503a5b8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCCameraParam.h
@@ -0,0 +1,38 @@
+//
+// EZMediaSessionVideoParam.h
+// EZBAVClient
+//
+// Created by kanhaiping on 2018/7/13.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <AVFoundation/AVFoundation.h>
+
+@interface EZRTCCameraParam : NSObject
+
+
+/// 鎽勫儚澶撮噰闆嗛噰闆嗙敾闈㈢殑榛樿璁剧疆锛屾瘮濡侫VCaptureSessionPreset1280x720锛岃浼犲叆AVCaptureSessionPreset640x480 浠ヤ笂鐨勫垎杈ㄧ巼
+//@property (nonatomic, strong) AVCaptureSessionPreset resolutionPreset;
+
+/// 鏈�缁堣緭鍑虹殑鐢婚潰鐨勫
+//@property (nonatomic, assign) NSInteger pixelWidth;
+//
+///// 鏈�缁堣緭鍑虹殑鐢婚潰鐨勯珮
+//@property (nonatomic, assign) NSInteger pixelHeigth;
+
+/// 浼犲叆 AVCaptureVideoOrientation锛岄粯璁ょ珫灞�
+@property (nonatomic, assign) AVCaptureVideoOrientation videoOrientation;
+
+
+/// 鏄惁鏄悗缃憚鍍忓ご锛岄粯璁O
+@property (nonatomic, assign) BOOL isBackCameraSeleced;
+
+///// I甯ч棿闅� 榛樿4绉�
+//@property (nonatomic, assign) NSInteger encodeKeyFrameInterval;
+//
+///// 甯х巼
+//@property (nonatomic, assign) NSInteger fps;
+
++ (AVCaptureSessionPreset)resolutionPresetForWidth:(NSInteger)width andHeigth:(NSInteger)heigth andOri:(AVCaptureVideoOrientation)ori;
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCMediaSessionDefines.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCMediaSessionDefines.h
new file mode 100644
index 0000000..7c1a1bb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCMediaSessionDefines.h
@@ -0,0 +1,107 @@
+//
+// EZMediaSessionDefines.h
+// H264 Encode and Decode
+//
+// Created by kanhaiping on 2018/6/22.
+// Copyright 漏 2018骞� AJB. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#define EZMediaSessionEncodeResolutionRatioHigh 1 //鍒嗚鲸鐜� 1锛�480*480 0锛�320*320
+#define EZMediaSessionDstVideoFPS (15)
+#define EZMediaSessionDstVideoMaxKeyFrameInterval (300)//鍗曚綅绉�
+
+#define EZMediaSessionSmallStreamWidth (320)
+#define EZMediaSessionSmallStreamHeight (320)
+
+#define EZMediaSessionDefaultStreamWidth (480)
+#define EZMediaSessionDefaultStreamHeight (480)
+
+#define EZMediaSessionDstVideoAverageBitRate480x480 (4 * 128 * 1024)//鍗曚綅 bps //averageBPS
+#define EZMediaSessionDstVideoDataRateLimits480x480 (6 * 128 * 1024)//鍗曚綅 bps //maxBPS
+#define EZMediaSessionDstVideoAverageBitRate320x320 (4 * 128 * 1024 * 5 / 8)//鍗曚綅 bps //averageBPS
+#define EZMediaSessionDstVideoDataRateLimits320x320 (6 * 128 * 1024 * 5 / 8)//鍗曚綅 bps //maxBPS
+
+
+typedef NS_OPTIONS(NSUInteger, EZMediaCaptureSessionType) {
+ EZMediaSessionCaptureNone = 1 << 0,
+ EZMediaSessionCaptureVideoType = 1 << 1,
+ EZMediaSessionCaptureAudioType = 1 << 2,
+ EZMediaSessionCaptureThumbnailType = 1 << 3,
+ EZMediaSessionCaptureShareScreenType = 1 << 4,
+
+};
+
+typedef NS_ENUM(NSUInteger, EZMediaSessionErrorBase) {
+ EZMediaSessionErrorUnknowError = 9000,
+ EZMediaSessionErrorNotReadyToSendData,
+ EZMediaSessionErrorCallSeqError,
+ EZMediaSessionErrorDuplicated,
+ EZMediaSessionErrorBaseAudioCapture = 10000,
+ EZMediaSessionErrorBaseVideoCapture = 20000,
+ EZMediaSessionErrorBaseAudioEncode = 30000,
+ EZMediaSessionErrorBaseVideoEncode = 40000,
+ EZMediaSessionErrorBaseStreamClient = 50000,
+ EZMediaSessionErrorBasePlayer = 60000,
+};
+
+typedef NS_ENUM(NSUInteger, EZAudioRecorderError) {
+ EZAudioRecorderErrorUnknown = EZMediaSessionErrorBaseAudioCapture,
+ EZAudioRecorderErrorInitError = 10100,
+ EZAudioRecorderErrorUnableToCreateSample,
+ EZAudioRecorderErrorStateError,
+ EZAudioRecorderErrorAuthorizeFailed = 10152,
+ EZAudioRecorderErrorStopError = 10200,
+};
+
+typedef NS_ENUM(NSUInteger, EZMediaCaptureError) {
+ EZMediaCaptureErrorUnknown = EZMediaSessionErrorBaseVideoCapture,
+ EZMediaCaptureErrorInitError = 20100,
+ EZMediaCaptureErrorAuthorizeFailed = 20153,
+ EZMediaCaptureErrorSwitchCameraError = 20200,
+ EZMediaCaptureErrorCroppedError = 20300,
+ EZMediaCaptureErrorRenderError = 20400,
+ EZMediaCaptureErrorScreenStartError = 20500,
+ EZMediaCaptureErrorScreenStopError,
+ EZMediaCaptureErrorScreenRecordError,
+ EZMediaCaptureErrorUnsupport,
+};
+
+typedef NS_ENUM(NSUInteger, EZAudioEncoderError) {
+ EZAudioEncoderErrorUnknown = EZMediaSessionErrorBaseAudioEncode,
+ EZAudioEncoderErrorFailToInitConverter = 30100,
+ EZAudioEncoderErrorFailToGetDataBuffer,
+ EZAudioEncoderErrorFailToEncodeBuffer,
+};
+
+typedef NS_ENUM(NSUInteger, EZVideoH264EncoderError) {
+ EZVideoH264EncoderErrorUnknown = EZMediaSessionErrorBaseVideoEncode,
+ EZVideoH264EncoderErrorInitFailed = 40100,
+ EZVideoH264EncoderErrorInvalidSample,
+ EZVideoH264EncoderErrorSampleNotReady,
+ EZVideoH264EncoderErrorNotRunning,
+ EZVideoH264EncoderErrorSetMaxBPSFailed,
+ EZVideoH264EncoderErrorSetAverageBPSFailed,
+ EZVideoH264EncoderErrorParamError,
+ EZVideoH264EncoderErrorEncodeFailed = 40200,
+};
+
+typedef NS_ENUM(NSUInteger, EZBAVStreamClientError) {
+ EZBAVStreamClientErrorUnknow = EZMediaSessionErrorBaseStreamClient,
+ EZBAVStreamClientErrorAudioEnableNotAllowed = EZMediaSessionErrorBaseStreamClient + 9000,
+ EZBAVStreamClientErrorShareEnableNotAllowed,
+
+};
+
+
+typedef NS_ENUM(NSUInteger, EZRTCAudioEncodeType) {
+ EZRTCAudioEncodeType_AAC,
+ EZRTCAudioEncodeType_Opus,
+};
+
+
+@interface EZRTCMediaSessionDefines : NSObject
+@end
+
+typedef void(^EZScreenShareResultBlock)(NSInteger ret);
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCSampleHandleManager.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCSampleHandleManager.h
new file mode 100644
index 0000000..f1d9a21
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCSampleHandleManager.h
@@ -0,0 +1,31 @@
+//
+// FIAgoraSocketManager.h
+// FIAgoraVideo
+//
+// Created by flagadmin on 2020/5/7.
+// Copyright 漏 2020 flagadmin. All rights reserved.
+//
+
+#import <ReplayKit/ReplayKit.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef enum : NSUInteger {
+ EZSampleHandleManagerStateUnconnected,
+ EZSampleHandleManagerStateConnecting,
+ EZSampleHandleManagerStateConnected,
+ EZSampleHandleManagerStateStopped,
+} EZSampleHandleManagerState;
+
+
+@interface EZRTCSampleHandleManager : NSObject
++ (EZRTCSampleHandleManager *)sharedManager;
+@property (nonatomic, assign, readonly) EZSampleHandleManagerState state;
+- (void)setup;
+- (void)finish;
+- (void)sendVideoBuffer:(CMSampleBufferRef)sampleBuffer;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCVideoEncodeParam.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCVideoEncodeParam.h
new file mode 100644
index 0000000..b420fba
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRTCVideoEncodeParam.h
@@ -0,0 +1,30 @@
+//
+// EZMediaSessionEncodeParam.h
+// EZMediaSession
+//
+// Created by kanhaiping on 2018/8/24.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class EZRTCCameraParam;
+
+@interface EZRTCVideoEncodeParam : NSObject
+
+//濡傛灉缂栫爜鐨勭洰鏍囧楂樹负0锛屽垯缂栫爜杈撳嚭涓鸿緭鍏ョ殑鍘熷瀹介珮
+@property (nonatomic, assign) NSInteger pixelWidth;
+@property (nonatomic, assign) NSInteger pixelHeigth;
+@property (nonatomic, assign) NSInteger fps;
+@property (nonatomic, assign) NSInteger averageBPS;
+@property (nonatomic, assign, readonly) NSInteger maxBPS;
+@property (nonatomic, assign) NSInteger encodeKeyFrameInterval;//I甯ч棿闅旓紝鍗曚綅绉�
+
+//+ (EZRTCVideoEncodeParam *)encodeParamFromVideoParam:(EZRTCCameraParam *)videoParam;
++ (EZRTCVideoEncodeParam *)defaultEncodeParam;
++ (EZRTCVideoEncodeParam *)deviceWatchParam;
++ (EZRTCVideoEncodeParam *)deviceBabyRobotParam;
++ (EZRTCVideoEncodeParam *)encodeParamForScreenShare;
++ (EZRTCVideoEncodeParam *)encodeParamForGlobalScreenShare;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordCoverFetcherManager.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordCoverFetcherManager.h
new file mode 100644
index 0000000..c8bec6a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordCoverFetcherManager.h
@@ -0,0 +1,69 @@
+//
+// EZRecordCoverFetcherManager.h
+// EZPlay
+//
+// Created by JuneCheng on 2022/12/19.
+//
+
+#import <Foundation/Foundation.h>
+@class EZDeviceRecordFile;
+
+// Fetcher鍒濆鍖栦唬鐞�
+@protocol RecordCoverFetcherDelegate<NSObject>
+
+@optional
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧櫒鍒濆鍖栨垚鍔熷洖璋�
+ */
+- (void)onFetcherInitSuccess;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧櫒鍒濆鍖栧け璐ュ洖璋�
+ */
+- (void)onFetcherInitFailed;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧皝闈㈡垚鍔熷洖璋�
+ */
+- (void)onGetCoverSuccess:(int)seq data:(NSData *_Nonnull)data;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧皝闈㈠け璐ュ洖璋�
+ */
+- (void)onGetCoverFailed:(int)errorCode;
+
+@end
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZRecordCoverFetcherManager : NSObject
+
+
+@property (nonatomic, weak) id <RecordCoverFetcherDelegate> fetcherDelegate;
+
++ (instancetype)sharedInstance;
+
+/**
+ * 涓庤澶囧缓绔嬮摼鎺ワ紙鍥藉唴鏀寔锛屾捣澶栦笉鏀寔锛�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 璁惧閫氶亾鍙�
+ */
+- (void)initFetcherWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo;
+
+
+/**
+ * 鏂紑涓庤澶囩殑閾炬帴锛堝浗鍐呮敮鎸侊紝娴峰涓嶆敮鎸侊級
+ */
+- (void)stopFetcher;
+
+
+/**
+ * 璺熻澶囪姹係D鍗″綍鍍忓皝闈紙鍥藉唴鏀寔锛屾捣澶栦笉鏀寔锛�
+ */
+- (void)requestRecordCover:(NSArray<EZDeviceRecordFile *> *)recordFiles;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordDownloadTask.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordDownloadTask.h
new file mode 100644
index 0000000..ba50a2a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordDownloadTask.h
@@ -0,0 +1,86 @@
+//
+// EZRecordDownloadTask.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/7/2.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, EZRecordDownloaderStatus)
+{
+ EZRecordDownloaderStatusStart = 1, //寮�濮嬩笅杞�
+ EZRecordDownloaderStatusFinish = 2, //褰曞儚涓嬭浇缁撴潫
+ EZRecordDownloaderStatusMoreToken = 3,
+};
+
+typedef enum : NSUInteger {
+ EZRecordDownloadTaskWaitting,
+ EZRecordDownloadTaskDownloading,
+ EZRecordDownloadTaskCompleting,
+} EZRecordDownloadTaskStatus;
+
+@interface EZRecordDownloadTask : NSObject
+
+/**
+ 姣忎釜涓嬭浇浠诲姟鐨勫敮涓�鏍囪瘑
+ */
+@property (nonatomic, assign) NSUInteger taskID;
+
+
+@property (nonatomic, assign) EZRecordDownloadTaskStatus taskStatus;
+
+/**
+ 鏈湴瀛樻斁璺緞
+ */
+@property (nonatomic, strong) NSString *saveFilePath;
+
+/**
+ 缁撴潫鍥炶皟
+ */
+@property (nonatomic, copy) void(^finshed)(EZRecordDownloaderStatus statusCode);
+
+/**
+ 澶辫触鍥炶皟
+ */
+@property (nonatomic, copy) void(^failed)(NSError *error);
+
+/**
+ 宸蹭笅杞芥枃浠跺ぇ灏忓洖璋�
+ */
+@property (nonatomic, copy) void(^downloading)(NSUInteger downloadSize);
+
+/**
+ 寮�濮嬩笅杞�
+
+ @return 鎴愬姛0锛屽け璐�-1
+ */
+- (int)startRecordDownload;
+
+/**
+ 缁撴潫涓嬭浇锛屾竻鐞嗚祫婧�
+ */
+- (void)stopRecordDownload;
+
+/**
+ 璁剧疆涓嬭浇鍥炶皟
+
+ @param finshed 缁撴潫鍥炶皟
+ @param failed 澶辫触鍥炶皟
+ */
+- (void)setDownloadCallBackWithFinshed:(void(^)(EZRecordDownloaderStatus statusCode))finshed
+ failed:(void(^)(NSError *error))failed;
+
+/**
+ 璁剧疆涓嬭浇杩涘害鍥炶皟
+
+ @param downloading 涓嬭浇鏂囦欢澶у皬鍥炶皟
+ */
+- (void)setDownloadCallBackWithDownloadSize:(void(^)(NSUInteger downloadSize))downloading;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordDownloader.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordDownloader.h
new file mode 100644
index 0000000..d815790
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZRecordDownloader.h
@@ -0,0 +1,49 @@
+//
+// EZRecordDownloader.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/7/2.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class EZRecordDownloadTask;
+
+@interface EZRecordDownloader : NSObject
+
+
+/// 涓嬭浇浠诲姟闃熷垪
+@property (nonatomic, strong, readonly) NSMutableArray *tasks;
+
+/**
+ 鍒濆鍖栧崟渚�
+
+ @return 鍗曚緥
+ */
++ (instancetype) shareInstane;
+
+/**
+ 娣诲姞涓嬭浇浠诲姟锛屽苟寮�濮嬩笅杞�
+ 浠诲姟涓嬭浇骞跺彂鏁伴噺闄愬埗锛屾渶楂樻敮鎸� 10 涓换鍔″苟琛屼笅杞�
+ 璁惧褰曞儚涓嬭浇锛氫緷璧栬澶囨墍鏀寔鐨勬渶楂樿矾鏁伴檺鍒�
+
+
+ @param task 涓嬭浇浠诲姟
+ @return 鏄惁鍔犲叆闃熷垪鎴愬姛 0 寮�濮嬩笅杞� -1 浠诲姟涓虹┖ -2 浠诲姟宸插湪涓嬭浇
+ */
+- (int) addDownloadTask:(EZRecordDownloadTask *)task;
+
+/**
+ 鍋滄涓嬭浇浠诲姟锛屽苟娓呴櫎涓嬭浇鍒楄〃涓殑浠诲姟銆備笅杞界粨鏉熸垨澶辫触鍧囪鎵ц锛屾竻鐞嗚祫婧�
+
+ @param task 涓嬭浇浠诲姟
+ @return 鏄惁绉婚櫎闃熷垪鎴愬姛
+ */
+- (int) stopDownloadTask:(EZRecordDownloadTask *)task;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZSADPDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZSADPDeviceInfo.h
new file mode 100644
index 0000000..7abbece
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZSADPDeviceInfo.h
@@ -0,0 +1,40 @@
+//
+// EZSADPDeviceInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/8/15.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EZSADPDeviceInfo : NSObject
+
+///闀胯澶囧簭鍒楀彿
+@property (nonatomic,copy) NSString *deviceSerial;
+///璁惧mac鍦板潃
+@property (nonatomic,copy) NSString *deviceMac;
+///璁惧鏄惁婵�娲�
+@property (nonatomic,assign) BOOL actived;
+///璁惧鏈湴鍦板潃 IPV4
+@property (nonatomic,copy) NSString *localIp;
+///璁惧绔彛鍙�
+@property (nonatomic,assign) NSInteger localPort;
+///璁惧鏈湴鍦板潃 IPV6
+@property (nonatomic,copy) NSString *localIpV6;
+///http绔彛鍙�
+@property (nonatomic,assign) NSInteger httpPort;
+///璁惧绫诲瀷
+@property (nonatomic,assign) NSInteger deviceType;
+///璁惧绫诲瀷鎻忚堪
+@property (nonatomic,copy) NSString *deviceTypeDes;
+///璁惧鍥轰欢鐗堟湰鍙�
+@property (nonatomic,copy) NSString *firmwareVersion;
+///鎸変綅琛ㄧず,瀵瑰簲涓轰负1琛ㄧず鏀寔,0x01:鏄惁鏀寔Ipv6,0x02:鏄惁鏀寔淇敼Ipv6鍙傛暟,0x04:鏄惁鏀寔Dhcp,0x08:鏄惁鏀寔udp澶氭挱,0x10:鏄惁鍚姞瀵嗚妭鐐�,0x20:鏄惁鏀寔鎭㈠瀵嗙爜,0x40:鏄惁鏀寔閲嶇疆瀵嗙爜,0x80:鏄惁鏀寔鍚屾IPC瀵嗙爜
+@property (nonatomic,assign) NSInteger abilitySupport;
+///鏄惁鍚敤DHCP
+@property (nonatomic,assign) BOOL DHCPOn;
+///鏄惁鏄悿鐭宠澶�
+@property (nonatomic,assign) BOOL isEzvizDevice;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZStorageInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZStorageInfo.h
new file mode 100644
index 0000000..2393d5a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZStorageInfo.h
@@ -0,0 +1,23 @@
+//
+// EZStorageInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/15.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囧瓨鍌ㄤ俊鎭璞�
+@interface EZStorageInfo : NSObject
+
+/// 瀛樺偍浠嬭川绱㈠紩
+@property (nonatomic) NSInteger index;
+/// 瀛樺偍浠嬭川鍚嶇О
+@property (nonatomic, copy) NSString *name;
+/// 瀛樺偍浠嬭川鐘舵�侊紝0姝e父銆�1瀛樺偍浠嬭川閿欍��2鏈牸寮忓寲銆�3姝e湪鏍煎紡鍖�
+@property (nonatomic) NSInteger status;
+/// 瀛樺偍浠嬭川鏍煎紡鍖栬繘搴�
+@property (nonatomic) NSInteger formatRate;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZStreamPlayer.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZStreamPlayer.h
new file mode 100644
index 0000000..408ba05
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZStreamPlayer.h
@@ -0,0 +1,118 @@
+//
+// EZStreamPlayer.h
+// EZOpenSDKFramework
+//
+// Created by yuqian on 2020/4/3.
+// Copyright 漏 2020 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZDeviceRecordFile.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class EZStreamPlayer;
+
+typedef enum : NSUInteger {
+ EZStreamPlayerMsgTypeUnknown, //鏃犳晥绫诲瀷
+ EZStreamPlayerMsgTypeRealPlayStart, //寮�鍚瑙堟垚鍔�
+ EZStreamPlayerMsgTypeRealPlayClose, //鍏抽棴棰勮鎴愬姛
+ EZStreamPlayerMsgTypePlayBackStart, //寮�鍚澶囧洖鏀炬垚鍔�
+ EZStreamPlayerMsgTypePlayBackClose, //鍏抽棴璁惧鍥炴斁鎴愬姛
+} EZStreamPlayerMsgType;
+
+typedef enum : NSUInteger {
+ EZStreamDataTypeUnknown, // 鏃犳晥绫诲瀷
+ EZStreamDataTypeHeader, // 鎺ユ敹娴佸ご
+ EZStreamDataTypeData, // 鎺ユ敹鏁版嵁
+ EZStreamDataTypeStreamEnd, // 娴佺粨鏉�
+}EZStreamDataType;
+
+
+@protocol EZStreamPlayerDelegate <NSObject>
+
+/**
+ * 鎾斁鍣ㄦ挱鏀惧け璐ラ敊璇洖璋�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param error 鎾斁鍣ㄩ敊璇�
+ */
+- (void)streamPlayer:(EZStreamPlayer *)player didPlayFailed:(NSError *)error;
+
+/**
+ * 鎾斁鍣ㄦ秷鎭洖璋�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param msgType 鎾斁鍣ㄦ秷鎭爜
+ */
+- (void)streamPlayer:(EZStreamPlayer *)player didReceivedMessage:(EZStreamPlayerMsgType)msgType;
+
+/**
+ * 鐮佹祦鍥炶皟
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param dataType 鏁版嵁绫诲瀷
+ * @param data 鐮佹祦鏁版嵁
+ * @param dataLength 闀垮害
+ */
+- (void)streamPlayer:(EZStreamPlayer *)player didReceivedData:(EZStreamDataType)dataType data:(int8_t *)data length:(int)dataLength;
+
+@end
+
+@interface EZStreamPlayer : NSObject
+
+@property (nonatomic, weak) id<EZStreamPlayerDelegate>delegate;
+
+/// 鏄惁璁╂挱鏀惧櫒澶勭悊杩涘叆鍚庡彴,YES:鑷姩澶勭悊;NO:涓嶅鐞�,榛樿涓篩ES
+@property (nonatomic) BOOL backgroundModeByPlayer;
+
+
+/**
+* 鏍规嵁璁惧搴忓垪鍙峰拰閫氶亾鍙峰垱寤篍ZPlayer瀵硅薄
+*
+* @param deviceSerial 璁惧搴忓垪鍙�
+* @param cameraNo 閫氶亾鍙�
+*
+* @return EZStreamPlayer瀵硅薄
+*/
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo;
+
+/**
+ * 閿�姣丒ZPlayer
+ *
+ * @return YES/NO;
+ */
+- (BOOL)destoryPlayer;
+
+/**
+ * 寮�濮嬫挱鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startRealPlay;
+
+/**
+ * 鍋滄鎾斁锛屽紓姝ユ帴鍙�
+ *
+ */
+- (void)stopRealPlay;
+
+/**
+ * 寮�濮嬭澶囧洖鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @param deviceFile SD鍗℃枃浠朵俊鎭�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startDevicePlayback:(EZDeviceRecordFile *)deviceFile;
+
+/// 缁撴潫璁惧鍥炴斁
+- (void)stopDevicePlayback;
+
+/// 璁剧疆璁惧楠岃瘉鐮侊紝鎾斁鍓嶈缃�
+/// @param verifyCode 璁惧楠岃瘉鐮�
+- (void)setVerifyCode:(NSString *)verifyCode;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZTokenKit.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZTokenKit.h
new file mode 100644
index 0000000..03f143f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZTokenKit.h
@@ -0,0 +1,40 @@
+//
+// EzvizTokenKit.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/8/31.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EZTokenKit : NSObject
+
+@property (nonatomic, readonly) NSString *token; //鑾峰彇绗竴涓猼oken
+@property (nonatomic, readonly) NSInteger tokenCount; //褰撳墠tokenKit閲岃繕鏈夊灏憈oken鐨勬暟閲�
+
+/**
+ * 鍗曚緥鏂规硶
+ *
+ * @return EZTokenKit瀵硅薄
+ */
++ (instancetype)sharedKit;
+
+/**
+ * 璁剧疆TokenList鏁扮粍
+ *
+ * @param tokenList token鏁扮粍
+ */
+- (void)setTokens:(NSArray *)tokenList;
+
+/**
+ * 娓呯┖鏁扮粍
+ */
+- (void)clearTokens;
+
+/**
+ * 棰勫姞杞藉彇娴乼oken
+ */
+- (void)prepareToken:(void (^)(NSError *error))block;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZUserInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZUserInfo.h
new file mode 100644
index 0000000..dbfafe6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZUserInfo.h
@@ -0,0 +1,23 @@
+//
+// EZUserInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/11.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓虹敤鎴蜂俊鎭璞�
+@interface EZUserInfo : NSObject
+
+/// 鐢ㄦ埛鍚�
+@property (nonatomic, copy) NSString *username;
+/// 鏄电О锛屾捣澶栫増鏈瀛楁涓虹┖
+@property (nonatomic, copy) NSString *nickname;
+/// 鐢ㄦ埛澶村儚鍦板潃锛屾捣澶栫増鏈瀛楁涓虹┖
+@property (nonatomic, copy) NSString *avatarUrl;
+/// 鐢ㄦ埛鍖哄煙domain
+@property (nonatomic, copy) NSString *areaDomain;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoQualityInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoQualityInfo.h
new file mode 100644
index 0000000..f392af7
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoQualityInfo.h
@@ -0,0 +1,23 @@
+//
+// EZVideoQualityInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/2/28.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓洪�氶亾鏀寔鐨勬竻鏅板害淇℃伅
+@interface EZVideoQualityInfo : NSObject
+
+/// 娓呮櫚搴﹀悕绉帮紝濡傝秴娓呫�侀珮娓呫�佸潎琛°�佹祦鐣呯瓑
+@property (nonatomic,copy) NSString *videoQualityName;
+
+/// 瑙嗛璐ㄩ噺锛�0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+@property (nonatomic,assign) NSInteger videoLevel;
+
+/// 璇ユ竻鏅板害鎵�浣跨敤鐨勭爜娴佺被鍨嬶紝1涓轰富鐮佹祦锛�2涓哄瓙鐮佹祦
+@property (nonatomic,assign) NSInteger streamType;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalk.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalk.h
new file mode 100644
index 0000000..98fda05
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalk.h
@@ -0,0 +1,179 @@
+//
+// EZBAVClient.h
+// EZBAVClient
+//
+// Created by kanhaiping on 2018/6/26.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "EZBAVParam.h"
+#import "EZRTCMediaSessionDefines.h"
+#import "EZVideoTalkView.h"
+
+@class EZVideoTalk;
+@class EZRTCCameraParam;
+@class EZRTCVideoEncodeParam;
+
+@protocol EZVideoTalkDelegate<NSObject>
+
+@required
+/// 閿欒鍥炶皟
+/// @param client client
+/// @param errorCode 鍑洪敊鐨勯敊璇爜
+- (void)bavClient:(EZVideoTalk *)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 闄勫姞淇℃伅锛�
+ 濡傛灉鏄疎ZBAVMessagePeerEnteredRoom銆丒ZBAVMessagePeerLeaveRoom娑堟伅锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄
+ 濡傛灉娑堟伅鏄� EZBAVMessageTransferData msg鏄� msg鏄瓧绗︿覆 @"瀹為檯鐨勯�忎紶娑堟伅"
+ */
+- (void)bavClient:(EZVideoTalk *)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+
+@optional
+///**
+// 鍥炶皟娑堟伅 bavclient log鍥炶皟
+//
+// @param client client
+// @param msg 閫忎紶娑堟伅
+// */
+//- (void)bavClient:(EZVideoTalk *)client didReceivedBavClientLogMsg:(NSString*)msg;
+
+/**
+ 鏄剧ず鍥炶皟锛岄娆$敾闈㈠嚭鏉ヤ互鍙婂悗缁敾闈㈠昂瀵稿彂鐢熷彉鍖栨椂鍥炶皟
+
+ @param client client
+ @param width 鐢婚潰瀹藉害
+ @param height 鐢婚潰楂樺害
+ */
+- (void)bavClient:(EZVideoTalk *)client didDisplayWidth:(int32_t)width height:(int32_t)height;
+
+/**
+ 鎾斁鍗¢】
+
+ @param client client
+ @param delayTime 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZVideoTalk *)client playDelayTime:(int32_t)delayTime;
+
+///**
+// 鎾斁鍗¢】缁熻
+//
+// @param client client
+// @param delayTimeStat 鍗¢】鏃堕棿
+// */
+//- (void)bavClient:(EZVideoTalk *)client playDelayTimeStatistics:(double)delayTimeStat;
+
+@end
+
+
+
+/// 鍙屽悜闊宠棰戦�氳瘽绫�
+/// 1.涓诲姩鍛煎彨
+/// A.鍙戣捣
+/// - init
+/// - enableCapture
+/// - start:param role=0 reason=0 roomid=0
+/// B.閫氳瘽缁撴潫 璋冪敤 stop
+/// C.绛夊緟瀵规柟杩囩▼涓寕鏂� 璋冪敤stop
+/// 2.琚姩鏀跺埌鍛煎彨
+/// - init
+/// - enableCapture
+/// 灞曠ず鎺ュ惉鐣岄潰
+/// A.濡傛灉鎺ュ惉 璋冪敤 start锛歱aram role=1 reason=0 roomid=鏀跺埌鐨剅oomid 鎺ュ惉瀹岄�氳瘽涓寕鏂皟鐢╯top
+/// B.濡傛灉涓诲姩鎷掓帴 璋冪敤 start锛歱aram role=2 reason=101 roomid=鏀跺埌鐨剅oomid 鎷掓帴瀹屾垚鍚庣珛椹皟鐢╯top
+/// C.濡傛灉鏃犱汉鎺ュ惉 璋冪敤 start锛歱aram role=2 reason=102 roomid=鏀跺埌鐨剅oomid 瀹屾垚鍚庣珛椹皟鐢╯top
+@interface EZVideoTalk : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkDelegate> delegate;
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalWindow:(EZVideoTalkView *)localWin;
+
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableVideoCapture:(BOOL)enable;
+
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+- (NSInteger)enableAudioCatpure:(BOOL)enable;
+
+
+// 鏄惁寮�鍚睆骞曞叡浜�
+/// @param enable 鏄惁寮�鍚�
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableScreenShare:(BOOL)enable andName:(NSString *)name withResultBlock:(EZScreenShareResultBlock)block;
+
+
+/// 鍙戣捣鍙屽悜闊宠棰戝璁诧紝鑰楁椂鎺ュ彛锛屾垚鍔熻繑鍥� noErr锛屽け璐ヨ繑鍥為敊璇爜
+/// @param param EZBAVParam
+- (int32_t)startWithParam:(EZBAVParam *)param;
+
+/// 璁剧疆杩滅▼绐楀彛锛�.濡傛灉璁剧疆闈炵┖瀵硅薄view锛屽繀椤诲湪涓荤嚎绋嬭皟鐢紙濡傛灉鏄缃垚nil锛屽彲浠ヤ笉鍦ㄤ富绾跨▼璋冪敤锛�
+/// @param window 鎾斁绐楀彛
+- (int32_t)setRemoteWindow:(UIView *)window;
+
+/// 鍋滄鍙屽悜闊宠棰戝璁诧紝鎴愬姛杩斿洖 noErr锛屽け璐ヨ繑鍥為敊璇爜
+- (int32_t)stop;
+
+#pragma 闄勫姞鎺ュ彛
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+/// 寮�鍏宠繙绋嬪0闊筹紝榛樿寮�
+/// @param open 寮�鍚�
+- (int32_t)enableRemoteSound:(BOOL)open;
+/// 寮傛鑾峰彇鏈湴鎶撳浘
+/// @param block 鎶撳浘鎴愬姛鍥炶皟锛屽け璐mage涓簄il
+//- (void)localScreenShotWithBlock:(void (^)(UIImage *image))block;
+
+/// 鑾峰彇杩滅鎶撳浘
+/// @param quality 鍘嬬缉璐ㄩ噺 0 ~ 100
+//- (UIImage *)remoteScreenShotWithQuality:(int)quality;
+
+/// 鏈湴褰曞埗
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+//- (BOOL)startLocalVideoRecordWithPath:(NSString *)path;
+
+/// 鍋滄鏈湴褰曞埗
+//- (BOOL)stopLocalVideoRecord;
+
+/// 寮�濮嬭繙绔綍鍒� mp4
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+//- (BOOL)startRemoteVideoRecordWithPath:(NSString *)path forClient:(int32_t)clientID;
+
+
+/// 鍋滄杩滅褰曞埗
+//- (BOOL)stopRemoteVideoRecordForClient:(int32_t)clientID;
+
+
+/// 鍙戦�侀�忎紶娑堟伅鎺ュ彛锛屽悓姝ユ帴鍙o紝鍙兘鑰楁椂
+/// @param msg 娑堟伅鍐呭锛屾瘮濡俲son鏁版嵁
+- (int)sendTransferMsg:(NSString *)msg;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkComponent.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkComponent.h
new file mode 100644
index 0000000..2eaaa0e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkComponent.h
@@ -0,0 +1,23 @@
+//
+// EZVideoTalkComponent.h
+// EZOpenSDK
+//
+// Created by JuneCheng on 2022/7/23.
+//
+
+#ifndef EZVideoTalkComponent_h
+#define EZVideoTalkComponent_h
+
+#import <EZOpenSDKFramework/EZBAVParam.h>
+#import <EZOpenSDKFramework/EZConferenceClient.h>
+#import <EZOpenSDKFramework/EZRTCCameraParam.h>
+#import <EZOpenSDKFramework/EZRTCMediaSessionDefines.h>
+#import <EZOpenSDKFramework/EZRTCSampleHandleManager.h>
+#import <EZOpenSDKFramework/EZRTCVideoEncodeParam.h>
+#import <EZOpenSDKFramework/EZVideoTalk.h>
+#import <EZOpenSDKFramework/EZVideoTalkGlobal.h>
+#import <EZOpenSDKFramework/EZVideoTalkSDK.h>
+#import <EZOpenSDKFramework/EZVideoTalkSDKDefines.h>
+#import <EZOpenSDKFramework/EZVideoTalkView.h>
+
+#endif /* EZVideoTalkComponent_h */
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkGlobal.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkGlobal.h
new file mode 100644
index 0000000..5517624
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkGlobal.h
@@ -0,0 +1,63 @@
+//
+// EZVideoTalkGlobal.h
+// EZVideoTalk
+//
+// Created by yuqian on 2018/9/12.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZRTCMediaSessionDefines.h"
+
+@class EZRTCVideoEncodeParam;
+@class EZRTCCameraParam;
+
+@interface EZVideoTalkGlobal : NSObject
+
+/**
+ 鏃ュ織璁剧疆
+
+ @param enable 鏄惁鎵撳嵃鏃ュ織
+ @param logCallback 鏃ュ織鍥炶皟锛屼笂灞傝嚜瀹氫箟澶勭悊
+ */
++ (void)setDebugLogEnable:(BOOL)enable withLogCallback:(void(^)(NSString *logStr))logCallback;
+
+
+/**
+ 鎵撳紑瀵圭鐮佹祦鎶撳彇
+
+ @param enble 鏄惁鎵撳紑
+ */
++(void)setDebugVideoLog:(BOOL)enble;
+
+
+/**
+ 鑾峰彇sdk鐗堟湰淇℃伅
+
+ @return 鐗堟湰鍙�
+ */
++ (NSString*)getVersion;
+
+
+
+/// 璁剧疆閲囬泦鐨勬憚鍍忓ご鍙傛暟锛屾瘮濡傞噰鐢ㄥ墠缃繕鏄悗缃紝鍦ㄥ彂璧蜂换浣曡棰戞搷浣滃墠璋冪敤鐢熸晥
+/// @param cameraParam 鎽勫儚澶村弬鏁�
++ (void)setCameraParam:(EZRTCCameraParam *)cameraParam;
+
+
+/// 璁剧疆閲囬泦鐨勮棰戠殑缂栫爜鍙傛暟锛屾瘮濡傞噰闆嗘渶缁堣緭鍑虹殑鍒嗚鲸鐜囥�佺爜鐜囩瓑
+/// @param encodeParam 缂栫爜鍙傛暟
++ (void)setVideoEncodeParam:(EZRTCVideoEncodeParam *)encodeParam;
+
+
+/// 璁剧疆閲囬泦鐨勮緟娴佺殑缂栫爜鍙傛暟锛屾瘮濡傞噰闆嗘渶缁堣緭鍑虹殑鍒嗚鲸鐜囥�佺爜鐜囩瓑
+/// @param encodeParam 缂栫爜鍙傛暟
++ (void)setSmallVideoEncodeParam:(EZRTCVideoEncodeParam *)encodeParam;
+
+
++ (EZRTCAudioEncodeType)audioEncodeType;
+
+/// 璁剧疆缂栫爜绫诲瀷锛屽湪瑙嗛閫氳瘽鍙戣捣鍓嶈缃湁鏁�
++ (void)setAudioEncodeType:(EZRTCAudioEncodeType)type;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDK.h
new file mode 100644
index 0000000..353e0c0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDK.h
@@ -0,0 +1,268 @@
+//
+// EZVideoTalkSDK.h
+// EZOpenSDK
+//
+// Created by yuqian on 2020/3/14.
+// Copyright 漏 2020 Hikvision. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "EZRTCMediaSessionDefines.h"
+#import "EZBAVParam.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+@class EZVideoTalkSDK, EZMediaSessionVideoParam, EZVideoTalkView, EZBAVParam, EZConferenceParam;
+
+@protocol EZVideoTalkSDKDelegate<NSObject>
+
+- (void)videoTalk:(id)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 閫忎紶娑堟伅锛�
+ 濡傛灉鏄疎ZVideoTalkMessagePeerEnteredRoom鍜孍ZVideoTalkMessagePeerLeaveRoom娑堟伅锛宮sg鏄瘂@"clientID":@(9527),@"clientName":@"寮犱笁"}
+ 濡傛灉娑堟伅鏄� EZVideoTalkMessageTransferData msg鏄� msg鏄瘂@"content":@"瀹為檯鐨勯�忎紶娑堟伅"}
+ */
+- (void)videoTalk:(id)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+/// 鐢婚潰鏄剧ず鍥炶皟
+/// @param client client
+/// @param width 鐢婚潰鐨勫 鍍忕礌鍗曚綅
+/// @param height 鐢婚潰鐨勯珮 鍍忕礌鍗曚綅
+/// @param userID 鐢ㄦ埛id
+- (void)videoTalk:(id)client didDisplayWidth:(int32_t)width height:(int32_t)height ofRemoteClient:(NSString *)userID;
+
+@end
+
+@interface EZVideoTalkSDK : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
+
+/// 鍔犲叆鐨勬埧闂村彿
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+- (instancetype)init;
+
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalWindow:(EZVideoTalkView *)localWin;
+
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableVideoCapture:(BOOL)enable;
+
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+- (NSInteger)enableAudioCatpure:(BOOL)enable;
+
+
+/// 鏄惁寮�鍚睆骞曞叡浜�
+/// @param enable 鏄惁寮�鍚�
+- (NSInteger)enableScreenShare:(BOOL)enable withName:(NSString *)name;
+
+
+/// 鍙戣捣鍙屽悜闊宠棰戝璁诧紝鑰楁椂鎺ュ彛锛屾垚鍔熻繑鍥� noErr锛屽け璐ヨ繑鍥為敊璇爜
+/// @param param EZBAVParam
+- (int32_t)startWithParam:(EZBAVParam *)param;
+
+/// 璁剧疆杩滅▼绐楀彛锛�.濡傛灉璁剧疆闈炵┖瀵硅薄view锛屽繀椤诲湪涓荤嚎绋嬭皟鐢紙濡傛灉鏄缃垚nil锛屽彲浠ヤ笉鍦ㄤ富绾跨▼璋冪敤锛�
+/// @param window 鎾斁绐楀彛
+- (int32_t)setRemoteWindow:(UIView *)window;
+
+/// 鍋滄鍙屽悜闊宠棰戝璁诧紝鎴愬姛杩斿洖 noErr锛屽け璐ヨ繑鍥為敊璇爜
+- (int32_t)stop;
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+/// 寮�鍏宠繙绋嬪0闊筹紝榛樿寮�
+/// @param open 寮�鍚�
+- (int32_t)enableRemoteSound:(BOOL)open;
+
+#pragma mark - 鏃ュ織璋冭瘯
+/**
+ 鏃ュ織璁剧疆
+
+ @param enable 鏄惁鎵撳嵃鏃ュ織
+ @param logCallback 鏃ュ織鍥炶皟锛屼笂灞傝嚜瀹氫箟澶勭悊
+ */
++ (void)setDebugLogEnable:(BOOL)enable withLogCallback:(void(^)(NSString *logStr))logCallback;
+
+/**
+ 鎵撳紑瀵圭鐮佹祦鎶撳彇
+
+ @param enble 鏄惁鎵撳紑
+ */
++(void)setDebugVideoLog:(BOOL)enble;
+
+/**
+ 鑾峰彇sdk鐗堟湰淇℃伅
+
+ @return 鐗堟湰鍙�
+ */
++ (NSString*)getVersion;
+
+@end
+
+
+@interface EZRTCClient : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
+
+/// 鍔犲叆鐨勬埧闂村彿
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+
+/// 鍔犲叆浼氳锛堟柊鎺ュ彛锛�
+/// @param roomId 鎴块棿鍙�
+/// @param password 瀵嗙爜
+/// @param userID 鐢ㄦ埛鑷畾涔塈D
+- (void)enterRoom:(int32_t)roomId
+ withPassword:(NSString *)password
+ withUserID:(NSString *)userID
+ withAppId:(NSString *)appId;
+
+
+/// 閫�鍑轰細璁�
+- (NSInteger)exitRoom;
+
+
+/// 瑙f暎浼氳锛岃В鏁e悗锛屽叾浠栦笌浼氳�呬細鏀跺埌浼氳琚В鏁f秷鎭�
+- (void)dissolveRoom;
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛.
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableLocalVideo:(BOOL)enable;
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalView:(EZVideoTalkView *)localWin;
+
+/// 鏄惁寮�鍚緟娴侊紝杈呮祦鍒嗚鲸鐜囨洿浣庛�佺爜鐜囨洿灏�
+/// @param enable 鏄惁寮�鍚�
+- (NSInteger)enableLocalSmallVideo:(BOOL)enable;
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableLocalAudio:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
+
+/// 寮�鍚睆骞曞叡浜�
+/// @param name 鍏变韩鍚嶇О
+/// @param resultBlock 灞忓箷鍏变韩缁撴灉鍥炶皟
+/// @param didFinishBlock 灞忓箷鍏变韩缁撴潫鍥炶皟锛屽湪姝e父鐨勫睆骞曞叡浜粨鏉熺粨鏉熷悗鍥炶皟
+- (void)startScreenShareWithName:(NSString *)name
+ withResultBlock:(EZScreenShareResultBlock)resultBlock
+ andEndedBlock:(dispatch_block_t)didFinishBlock;
+
+
+/// 缁撴潫灞忓箷鍏变韩
+- (void)stopScreenShare;
+
+
+/// 璁剧疆杩滅▼绐楀彛锛�1.蹇呴』鍦ㄦ嬁鍒拌繙绔鎴风鍔犲叆鐨勬秷鎭悗璁剧疆锛�2.蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param window 鎾斁绐楀彛
+/// @param clientID 鍔犲叆鐨勫鎴风鐨処D
+/// @param streamType 1瑙嗛 2闊抽 4灏忔祦
+- (int32_t)setRemoteView:(nullable UIView *)window ofUser:(NSString *)userID withStream:(NSInteger)streamType;
+
+/// 璁剧疆瑙傜湅灞忓箷鍏变韩鐨勭獥鍙�,蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param view 绐楀彛
+- (int32_t)setScreenShareView:(UIView *_Nullable)view;
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+#pragma mark - 褰曞埗鐩稿叧鎺ュ彛
+/// 寮�濮嬫埧闂磋棰戜細璁綍鍒�
+/// @param roomId 鎴块棿鍙�
+/// @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+/// @param recUsers 闇�瑕佸綍鍒剁殑鎴块棿鍙備笌鑰卛d
+/// @param projectId 浜戝瓨鍌ㄩ」鐩甀D
+/// @param fileId 浜戝瓨鍌ㄦ枃浠跺悕
+/// @param completion operation
++ (void)requestStartRecordRoomId:(NSString *)roomId
+ customId:(NSInteger)customId
+ recUsers:(NSArray *)recUsers
+ projectId:(NSString *)projectId
+ fileId:(NSString *)fileId
+ completion:(void (^)(bool success, NSError *error))completion;
+
+/// 鍋滄鎴块棿瑙嗛浼氳褰曞埗
+/// @param roomId 鎴块棿鍙�
+/// @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+/// @param completion operation
++ (void)requestStopRecordRoomId:(NSString *)roomId
+ customId:(NSInteger)customId
+ completion:(void (^)(bool success, NSError *error))completion;
+
+/// 鑾峰彇鏂囦欢涓嬭浇鍦板潃
+/// @param projectId 椤圭洰ID
+/// @param fileId 鏂囦欢ID
+/// @param completion operation
++ (void)requestGetRecordFileProjectId:(NSString *)projectId
+ fileId:(NSString *)fileId
+ completion:(void (^)(id responseObject, NSError *error))completion;
+
+
+/// 鏂板缓椤圭洰鎺ュ彛
+/// @param projectId 椤圭洰ID
+/// @param projectName 椤圭洰鍚嶇О
+/// @param expireDays 椤圭洰瀛樺偍瀵硅薄杩囨湡澶╂暟 榛樿姘镐笉杩囨湡
+/// @param completion operation
++ (void)requestCreateProjectId:(NSString *)projectId
+ projectName:(NSString *)projectName
+ expireDays:(NSInteger )expireDays
+ completion:(void (^)(bool success, NSError *error))completion;
+
+
+
+#pragma mark - 4.16.3 鏂扮殑浼氭帶鎺ュ彛
+/// 棰勮浼氳鎺ュ彛
+/// @param customId 涓绘寔浜虹敤鎴穒d锛堝紑鍙戣�呰嚜瀹氫箟鐨勭敤鎴穒d锛�
+/// @param password 鎴块棿瀵嗙爜锛堣嫢涓嶄紶鎴栦负绌哄垯璁や负鎴块棿鍏紑銆佹棤瀵嗙爜锛�
+/// @param limit 鎴块棿浜烘暟闄愬埗锛�<100锛屼笉浼犲垯榛樿100锛�
+/// @param beginTime 姣鏃堕棿鎴筹紝浼氳棰勮寮�濮嬫椂闂达紙>=褰撳墠鏃堕棿锛�
+/// @param endTime 姣鏃堕棿鎴筹紝浼氳棰勮缁撴潫鏃堕棿锛�>beginTime涓�<涓冨ぉ鍚庣殑鏃堕棿鎴筹級
+/// @param completion completion
++ (NSURLSessionDataTask *)orderMeetingWithCustomId:(NSString *)customId
+ password:(NSString *)password
+ limit:(NSInteger)limit
+ beginTime:(long)beginTime
+ endTime:(long)endTime
+ completion:(void (^)(int32_t roomId, NSInteger limit, NSError *error))completion;
+
+
+
+@end
+
+
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDKDefines.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDKDefines.h
new file mode 100644
index 0000000..c3347aa
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDKDefines.h
@@ -0,0 +1,17 @@
+//
+// EZVideoTalkSDKDefines.h
+// EzvizOpenSDK
+//
+// Created by Harper Kan on 2021/7/5.
+// Copyright 漏 2021 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZVideoTalkSDKDefines : NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkView.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkView.h
new file mode 100644
index 0000000..1ab4653
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkView.h
@@ -0,0 +1,18 @@
+//
+// EZVideoTalkView.h
+// EZVideoTalk
+//
+// Created by Harper Kan on 2020/12/5.
+// Copyright 漏 2020 hikvision. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <AVFoundation/AVFoundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZVideoTalkView : UIView
+- (AVSampleBufferDisplayLayer *)videoLayer;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTransformer.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTransformer.h
new file mode 100644
index 0000000..61c9126
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZVideoTransformer.h
@@ -0,0 +1,39 @@
+//
+// EZVideoTransformer.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/6/17.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef enum {
+
+ EZVideoTransformerTypeMP4,
+
+} EZVideoTransformerType;
+
+@interface EZVideoTransformer : NSObject
+
+/// 鏈湴PS鏂囦欢杞崲涓篗P4鏂囦欢
+/// @param psPath ps鏂囦欢璺緞
+/// @param targetPath mp4鏂囦欢璺緞
+/// @param type 杞崲绫诲瀷
+/// @param key 璁惧楠岃瘉鐮�
+/// @param succBlock 鎴愬姛鍥炶皟
+/// @param processBlock 杩涘害鍥炶皟
+/// @param failBlock 澶辫触鍥炶皟
++ (void)videoTransFormerPSPath:(NSString *)psPath
+ toPath:(NSString *)targetPath
+ type:(EZVideoTransformerType)type
+ withKey:(NSString *)key
+ succBlock:(void (^)())succBlock
+ processBlock:(void(^)(int rate))processBlock
+ failBlock:(void(^)(int errCode))failBlock;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZWiFiItemInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZWiFiItemInfo.h
new file mode 100644
index 0000000..3ea2418
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EZWiFiItemInfo.h
@@ -0,0 +1,21 @@
+//
+// EZWiFiItemInfo.h
+// EZWiFiConfigSDK
+//
+// Created by yuqian on 2020/7/28.
+// Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZWiFiItemInfo : NSObject
+
+@property (nonatomic, copy) NSString *ssid; /*蹇呭~,SSID,string*/
+@property (nonatomic, assign) NSInteger signalStrength; /*蹇呭~,淇″彿寮哄害,"-100-0",int锛屾暟鍊艰秺澶т俊鍙疯秺寮�*/
+@property (nonatomic, copy) NSString *securityMode; /*鍙��,瀹夊叏妯″紡: "open,WEP,WPA-personal,WPA2-personal,WPA-WPA2-personal,WPA2-enterprise",string*/
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EzvizRecordFileInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EzvizRecordFileInfo.h
new file mode 100644
index 0000000..38db6dc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EzvizRecordFileInfo.h
@@ -0,0 +1,47 @@
+//
+// EzvizRecordFileInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/5/5.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+///褰曞儚鏂囦欢淇℃伅
+@interface EzvizRecordFileInfo : NSObject
+
+///璁惧搴忓垪鍙�
+@property (nonatomic,copy) NSString *deviceSerial;
+
+///璁惧閫氶亾鍙�
+@property (nonatomic,assign) NSInteger channelNo;
+
+///鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚
+@property (nonatomic,assign) NSInteger recType;
+
+///鏂囦欢寮�濮嬫椂闂�
+@property (nonatomic,strong) NSDate *startTime;
+
+///鏂囦欢缁撴潫鏃堕棿
+@property (nonatomic,strong) NSDate *endTime;
+
+///鏂囦欢绫诲瀷0锛氱洰褰�1锛氳棰戞枃浠�2锛氬浘鐗囨枃浠�3锛氶煶棰戞枃浠�
+@property (nonatomic,assign) NSInteger fileType;
+
+///鏄惁鍔犲瘑0--涓嶅姞瀵�,1--鍔犲瘑
+@property (nonatomic,assign) NSInteger crypt;
+
+///楠岃瘉鐮丮D5鍊�
+@property (nonatomic,copy) NSString *keyChecksum;
+
+///鏂囦欢ID
+@property (nonatomic,copy) NSString *fileId;
+
+///灏侀潰鍥剧墖鍦板潃
+@property (nonatomic,copy) NSString *coverPic;
+
+///涓嬭浇璺緞
+@property (nonatomic,copy) NSString *downloadPath;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EzvizWatchServerInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EzvizWatchServerInfo.h
new file mode 100644
index 0000000..acaf6d6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/EzvizWatchServerInfo.h
@@ -0,0 +1,26 @@
+//
+// EzvizWatchServerInfo.h
+// EzvizOpenSDK
+//
+// Created by yuqian on 2020/3/2.
+// Copyright 漏 2020 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EzvizWatchServerInfo : NSObject
+
+@property (nonatomic, copy) NSString *domain;
+@property (nonatomic, copy) NSString *externalIp;
+@property (nonatomic, assign) int forceStreamType;
+@property (nonatomic, copy) NSString *idcType;
+@property (nonatomic, copy) NSString *internalIp;
+@property (nonatomic, assign) int isBackup;
+@property (nonatomic, copy) NSString *memo;
+@property (nonatomic, assign) int port;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/Sadp.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/Sadp.h
new file mode 100644
index 0000000..a6ec76d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Headers/Sadp.h
@@ -0,0 +1,557 @@
+#ifndef _SADP_H_
+#define _SADP_H_
+
+
+#if defined _WIN32 || defined _WIN64
+#define CSADP_API extern "C" __declspec(dllimport)
+#elif defined __linux__ || defined __APPLE__
+#define CSADP_API extern "C"
+#endif
+
+#if defined _WIN32 || defined _WIN64
+#define CALLBACK __stdcall
+#elif defined __linux__ || defined __APPLE__
+#define CALLBACK
+#endif
+
+#define BOOL int
+
+//消息操作的类型
+#define SADP_ADD 1 //增加一设备
+#define SADP_UPDATE 2 //更新设备
+#define SADP_DEC 3 //设备下线
+#define SADP_RESTART 4 //设备重新启动
+#define SADP_UPDATEFAIL 5 //设备更新失败
+
+//外部命令码
+#define SADP_GET_DEVICE_CODE 1 //获取设备码,对应结构体SADP_SAFE_CODE
+#define SADP_GET_ENCRYPT_STRING 2 //获取加密串,对应结构体SADP_ENCRYPT_STRING
+#define SADP_GET_DEVICE_TYPE_UNLOCK_CODE 3 //获取设备类型解禁码,对应的结构体SADP_TYPE_UNLOCK_CODE
+#define SADP_SET_DEVICE_CUSTOM_TYPE 4 //设置设备自定义型号,对应的结构体SADP_CUSTOM_DEVICE_TYPE
+#define SADP_GET_GUID 5 //获取GUID
+#define SADP_GET_SECURITY_QUESTION 6 //获取安全问题
+#define SADP_SET_SECURITY_QUESTION 7 //设置安全问题
+#define SADP_SET_HCPLATFORM_STATUS 8 //设置HCPLATFORM状态
+#define SADP_SET_VERIFICATION_CODE 9 //设置验证码(验证码用于萤石接入、预览、控制的唯一密码)
+#define SADP_GET_BIND_LIST 12 //获取绑定设备列表
+#define SADP_SET_BIND_LIST 13 //设置绑定设备列表
+#define SADP_RESTORE_INACTIVE 14 //恢复未激活
+#define SADP_SET_WIFI_REGION 15 //设置wifi区域
+#define SADP_SET_CHANNEL_DEFAULT_PASSWORD 16 //设置通道默认密码
+#define SADP_GET_SELF_CHECK 17 //获取设备自检状态
+#define SADP_DISK_LOCATE 18 //坏盘定位
+#define SADP_EHOME_ENABLE 19 //EHome使能
+#define SADP_SET_USER_MAILBOX 20 //设置用户邮箱
+#define SADP_GET_QR_CODES 21 //获取二维码数据
+#define SADP_GET_PASSWORD_RESET_TYPE 27 //获取重置密码方式参数
+
+
+
+#define SADP_MAX_VERIFICATION_CODE_LEN 12 //最大验证码长度
+#define MAX_PASS_LEN 16 //设备最大密码长度
+#define MAX_QUESTION_LIST_LEN 32 //最多问题列表个数
+#define SADP_MAX_BIND_NUM 32 //最大绑定设备个数
+#define MAX_CPU_LEN 32 //CPU长度
+#define MAX_MEMORY_LEN 32 //内存长度
+#define MAX_USERNAME_LEN 32 //用户名最大长度
+#define SADP_MAX_SERIALNO_LEN 64 //最大设备序列号长度
+#define MAX_DEVICE_CODE 128 //设备返回码长度,暂定最大128
+#define MAX_MAILBOX_LEN 128 //邮箱长度,暂定最大128
+#define MAX_GUID_LEN 128 //GUID长度
+#define MAX_EXCHANGE_CODE 256 //交换码长度
+#define MAX_ENCRYPT_CODE 256 //设备返回码加密后长度
+#define MAX_UNLOCK_CODE_KEY 256 //解禁密钥
+#define MAX_QR_CODES 256 //二维码数据长度,暂定最大256
+#define MAX_ANSWER_LEN 256 //最大答案长度
+#define MAX_UNLOCK_CODE_RANDOM_LEN 256 //解禁码随机串
+#define MAX_FILE_PATH_LEN 260 //文件最大路径长度
+
+
+
+
+// 错误码
+#define SADP_ERROR_BASE 2000
+#define SADP_NOERROR 0 // 没有错误
+#define SADP_ALLOC_RESOURCE_ERROR (SADP_ERROR_BASE+1) // 资源分配错误
+#define SADP_NOT_START_ERROR (SADP_ERROR_BASE+2) // SADP未启动
+#define SADP_NO_ADAPTER_ERROR (SADP_ERROR_BASE+3) // 无网卡
+#define SADP_GET_ADAPTER_FAIL_ERROR (SADP_ERROR_BASE+4) // 获取网卡信息失败
+#define SADP_PARAMETER_ERROR (SADP_ERROR_BASE+5) // 参数错误
+#define SADP_OPEN_ADAPTER_FAIL_ERROR (SADP_ERROR_BASE+6) // 打开网卡失败
+#define SADP_SEND_PACKET_FAIL_ERROR (SADP_ERROR_BASE+7) // 发送数据失败
+#define SADP_SYSTEM_CALL_ERROR (SADP_ERROR_BASE+8) // 系统接口调用失败
+#define SADP_DEVICE_DENY (SADP_ERROR_BASE+9) // 设备拒绝处理
+#define SADP_NPF_INSTALL_ERROR (SADP_ERROR_BASE+10) // 安装NPF服务失败
+#define SADP_TIMEOUT (SADP_ERROR_BASE+11) // 设备超时
+#define SADP_CREATE_SOCKET_ERROR (SADP_ERROR_BASE+12) // 创建socket失败
+#define SADP_BIND_SOCKET_ERROR (SADP_ERROR_BASE+13) // 绑定socket失败
+#define SADP_JOIN_MULTI_CAST_ERROR (SADP_ERROR_BASE+14) // 加入多播组失败
+#define SADP_NETWORK_SEND_ERROR (SADP_ERROR_BASE+15) // 发送出错
+#define SADP_NETWORK_RECV_ERROR (SADP_ERROR_BASE+16) // 接收出错
+#define SADP_XML_PARSE_ERROR (SADP_ERROR_BASE+17) // 多播XML解析出错
+#define SADP_LOCKED (SADP_ERROR_BASE+18) // 设备锁定
+#define SADP_NOT_ACTIVATED (SADP_ERROR_BASE+19) // 设备未激活
+#define SADP_RISK_PASSWORD (SADP_ERROR_BASE+20) // 风险高的密码
+#define SADP_HAS_ACTIVATED (SADP_ERROR_BASE+21) // 设备已激活
+#define SADP_EMPTY_ENCRYPT_STRING (SADP_ERROR_BASE+22) // 加密串为空
+#define SADP_EXPORT_FILE_OVERDUE (SADP_ERROR_BASE+23) // 导出文件超期
+#define SADP_PASSWORD_ERROR (SADP_ERROR_BASE+24) // 密码错误
+#define SADP_LONG_SECURITY_ANSWER (SADP_ERROR_BASE+25) // 安全问题答案太长
+#define SADP_INVALID_GUID (SADP_ERROR_BASE+26) // 无效的GUID
+#define SADP_ANSWER_ERROR (SADP_ERROR_BASE+27) // 答案错误
+#define SADP_QUESTION_NUM_ERR (SADP_ERROR_BASE+28) // 安全问题个数配置错误
+#define SADP_LOAD_WPCAP_FAIL (SADP_ERROR_BASE+30) // 加载Wpcap失败
+#define SADP_ILLEGAL_VERIFICATION_CODE (SADP_ERROR_BASE+33) // 非法验证码
+#define SADP_BIND_ERROR_DEV (SADP_ERROR_BASE+34) // 绑定错误的设备
+#define SADP_EXTED_MAX_BIND_NUM (SADP_ERROR_BASE+35) // 超过最大绑定个数
+#define SADP_MAILBOX_NOT_EXIST (SADP_ERROR_BASE+36) // 邮箱不存在
+#define SADP_MAILBOX_NOT_SET (SADP_ERROR_BASE+38) // [add] <2019/01/08> by yangzheng 邮箱重置密码未设置邮箱
+#define SADP_INVALID_RESET_CODE (SADP_ERROR_BASE+39) // 重置密码 重置口令错误
+
+
+//SADP设备过滤规则类型
+//按位表示,为1表示过滤,0表示不过滤;
+//bit 1:是否过滤萤石;bit 2:是否过滤OEM;
+#define SADP_DISPLAY_ALL 0 //显示所有设备
+#define SADP_FILTER_EZVIZ 0x01 //过滤萤石设备
+#define SADP_FILTER_OEM 0x02 //过滤OEM设备
+#define SADP_FILTER_EZVIZ_OEM 0x03 //同时过滤萤石和OEM设备
+#define SADP_ONLY_DISPLAY_OEM 0xfffffffd //仅显示OEM设备,对应结构体SADP_DISPLAY_OEM_CFG
+#define SADP_ONLY_DISPLAY_EZVIZ 0xfffffffe //仅显示萤石设备
+// 结构体
+
+typedef struct tagSADP_DEVICE_INFO
+{
+ char szSeries[12]; //设备系列(保留)
+ char szSerialNO[48]; //设备序列号
+ char szMAC[20]; //设备物理地址
+ char szIPv4Address[16]; //设备IPv4地址
+ char szIPv4SubnetMask[16]; //设备IPv4子网掩码
+ unsigned int dwDeviceType; //设备类型,具体数值代表的设备型号
+ unsigned int dwPort; //设备网络SDK服务端口号(默认8000)
+ unsigned int dwNumberOfEncoders; //设备编码器个数,即设备编码通道个数。对于解码器,其值设为0
+ unsigned int dwNumberOfHardDisk; //设备硬盘数目
+ char szDeviceSoftwareVersion[48]; //设备软件版本号
+ char szDSPVersion[48]; //设备DSP版本号
+ char szBootTime[48]; //开机时间
+ int iResult;
+ //信息类型: 1.设备上线 2.设备更新 3.设备下线 4.设备重启 5.设备更新失败
+ //SADP_ADD 1 新设备上线,之前在SADP库列表中未出现的设备
+ //SADP_UPDATE 2 在线的设备的网络参数或者某些状态改变
+ //SADP_DEC 3 设备下线,设备自动发送下线消息或120秒内检测不到设备
+ //SADP_RESTART 4 之前SADP库列表中出现过之后下线的设备再次上线
+ //SADP_UPDATEFAIL 5 设备更新失败
+ char szDevDesc[24]; //设备类型描述 与dwDeviceType对应
+ char szOEMinfo[24]; //OEM产商信息
+ char szIPv4Gateway[16]; //IPv4网关
+ char szIPv6Address[46]; //IPv6地址
+ char szIPv6Gateway[46]; //IPv6网关
+ unsigned char byIPv6MaskLen; //IPv6子网前缀长度
+ unsigned char bySupport;
+ //按位表示,对应为为1表示支持
+ //0x01:是否支持Ipv6
+ //0x02:是否支持修改Ipv6参数
+ //0x04:是否支持Dhcp
+ //0x08:是否支持udp多播
+ //0x10:是否含加密节点
+ //0x20:是否支持恢复密码
+ //0x40:是否支持重置密码
+ //0x80:是否支持同步IPC密码
+ unsigned char byDhcpEnabled; //Dhcp状态, 0 不启用 1 启用
+ unsigned char byDeviceAbility; //设备能力
+ //0:设备不支持“‘设备类型描述’ 'OEM厂商' 'IPv4网关' ‘IPv6地址’ 'IPv6网关' ‘IPv6子网前缀’‘DHCP’”
+ //1:支持上诉功能
+ unsigned short wHttpPort; //Http 端口
+ unsigned short wDigitalChannelNum; //数字通道数
+ char szCmsIPv4[16]; //CMS注册服务器IPv4地址
+ unsigned short wCmsPort; //CMS注册服务器监听端口
+ unsigned char byOEMCode; //0-基线设备 1-OEM设备
+ unsigned char byActivated; //设备是否激活;0-激活,1-未激活(老的设备都是已激活状态)
+ char szBaseDesc[24]; //基线短型号,不随定制而修改的型号,用于萤石平台进行型号对比
+ unsigned char bySupport1;
+ //按位表示, 1表示支持,0表示不支持
+ //0x01:是否支持重置密码方式2
+ //0x02;是否支持设备锁定功能
+ //0x04:是否支持导入GUID重置密码
+ //0x08:是否支持安全问题重置密码
+ //0x10:是否支持OEM更换Logo
+ //0x20:是否支持绑定操作
+ //0x40:是否支持恢复未激活
+ //0x80:是否支持wifi信号增强模式
+ unsigned char byHCPlatform; //是否支持HCPlatform 0-保留, 1-支持, 2-不支持
+ unsigned char byEnableHCPlatform; //是否启用HCPlatform 0-保留, 1-启用, 2-不启用
+ unsigned char byEZVIZCode; //0-基线设备, 1-萤石设备
+ unsigned int dwDetailOEMCode; //详细OEMCode信息:oemcode由客户序号(可变位,从1开始,1~429496)+菜单风格(2位)+区域号(2位)三部分构成。
+ //规则说明:oemcode最大值为4294967295,最多是十位数。
+ //0: 老设备
+ //1: 新基线设备
+ //10101: 有具体OEM code的为OEM设备
+ unsigned char byModifyVerificationCode; //是否修改验证码 0-保留, 1-修改验证码, 2-不修改验证码
+ unsigned char byMaxBindNum; //支持绑定的最大个数(目前只有NVR支持该字段)
+ unsigned short wOEMCommandPort; //OEM命令端口
+ unsigned char bySupportWifiRegion;
+ //设备支持的wifi区域列表,按位表示,1表示支持,0表示不支持
+ //0x01:是否支持default(默认功率和北美一致)
+ //0x02:是否支持china
+ //0x04:是否支持nothAmerica
+ //0x08:是否支持japan
+ //0x10:是否支持europe
+ //0x20:是否支持world
+ unsigned char byEnableWifiEnhancement;//是否启用wifi增强模式,0-不启用,1-启用
+ unsigned char byWifiRegion; //设备当前区域,0-default,1-china,2-nothAmerica,3-japan,4-europe,5-world
+ unsigned char bySupport2;
+ //按位表示, 1表示支持,0表示不支持
+ //0x01:是否支持通道默认密码配置(该密码用于nvr添加IPC, 默认使用的是nvr admin密码,会单独保存在本地)
+ //0x02:是否支持邮箱重置密码
+ //0x04:是否支持未激活配置SSID和Password
+}SADP_DEVICE_INFO, *LPSADP_DEVICE_INFO;
+
+typedef struct tagSADP_DEVICE_INFO_V40
+{
+ SADP_DEVICE_INFO struSadpDeviceInfo;
+ unsigned char byLicensed; //设备是否授权:0-保留,1-设备未授权,2-设备已授权
+ unsigned char bySystemMode; //系统模式 0-保留,1-单控,2-双控,3-单机集群,4-双控集群
+ unsigned char byControllerType; //控制器类型 0-保留,1-A控,2-B控
+ char szEhmoeVersion[16]; //Ehmoe版本号
+ unsigned char bySpecificDeviceType;//设备类型,1-中性设备 2-海康设备
+ unsigned int dwSDKOverTLSPort; //私有协议中 SDK Over TLS 命令端口
+ unsigned char bySecurityMode; //设备安全模式:0-standard,1-high-A,2-high-B,3-custom
+ unsigned char bySDKServerStatus; //设备SDK服务状态, 0-开启,1-关闭
+ unsigned char bySDKOverTLSServerStatus; //设备SDKOverTLS服务状态, 0-关闭,1-开启
+ char szUserName[MAX_USERNAME_LEN + 1]; //管理员用户的用户名(设备安全模式在非标准模式下是允许用户设置管理员用户的用户名,标准模式默认为admin)
+ char szWifiMAC[20]; //设备所连wifi的Mac地址
+ unsigned char byDataFromMulticast; //0-链路 1-多播
+ unsigned char bySupportEzvizUnbind; //是否支持萤石解绑 0-不支持 1-支持
+ unsigned char bySupportCodeEncrypt; //是否支持重置口令AES128_ECB解密 0-不支持 1-支持
+ unsigned char bySupportPasswordResetType; //是否支持获取密码重置方式参数 0-不支持 1-支持
+ unsigned char byEZVIZBindStatus; //设备萤石云绑定状态,0-未知,1-已绑定,2-未绑定
+ char szPhysicalAccessVerification[16]; //设备支持的物理接触式添加方式,1#AP配网传递,2#用户令牌(用户token)绑定,3#物理按键接触,4#扫码绑定(设备token)
+ unsigned char byRes[411];
+}SADP_DEVICE_INFO_V40, *LPSADP_DEVICE_INFO_V40;
+
+//待修改的设备网络参数
+typedef struct tagSADP_DEV_NET_PARAM
+{
+ char szIPv4Address[16]; // IPv4地址
+ char szIPv4SubNetMask[16]; // IPv4子网掩码
+ char szIPv4Gateway[16]; // IPv4网关
+ char szIPv6Address[128]; // IPv6地址
+ char szIPv6Gateway[128]; // IPv6网关
+ unsigned short wPort; // 设备网络SDK服务端口号(默认8000)
+ unsigned char byIPv6MaskLen; // IPv6掩码长度
+ unsigned char byDhcpEnable; // DHCP使能
+ unsigned short wHttpPort; // HTTP端口
+ unsigned int dwSDKOverTLSPort; // 私有协议中 SDK Over TLS 命令端口
+ unsigned char byRes[122];
+}SADP_DEV_NET_PARAM, *LPSADP_DEV_NET_PARAM;
+
+
+//设备返回网络参数信息
+typedef struct tagSADP_DEV_RET_NET_PARAM
+{
+ unsigned char byRetryModifyTime; //剩余可尝试修改网络参数次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char byRes[126];
+}SADP_DEV_RET_NET_PARAM, *LPSADP_DEV_RET_NET_PARAM;
+
+// CMS参数
+typedef struct tagSADP_CMS_PARAM
+{
+ char szPUID[32]; // 预分配的PUID
+ char szPassword[16]; // 设置的登录密码
+ char szCmsIPv4[16]; // CMS服务器IPv4地址
+ char szCmsIPv6[128]; // CMS服务器IPv6地址
+ unsigned short wCmsPort; // CMS服务器监听端口
+ unsigned char byRes[30];
+}SADP_CMS_PARAM, *LPSADP_CMS_PARAM;
+
+//设备安全码,对应配置命令SADP_GET_DEVICE_CODE,接口SADP_GetDeviceConfig
+typedef struct tagSADP_SAFE_CODE
+{
+ unsigned int dwCodeSize;
+ char szDeviceCode[MAX_DEVICE_CODE];
+ unsigned char byRes[128];
+}SADP_SAFE_CODE, *LPSADP_SAFE_CODE;
+
+//设备二维码
+typedef struct tagSADP_QR_CODES
+{
+ unsigned int dwCodeSize;
+ unsigned int dwMailBoxSize;
+ unsigned int dwServiceMailBoxSize;
+ char szQrCodes[MAX_QR_CODES];
+ char szMailBoxAddr[MAX_MAILBOX_LEN]; //要设置的邮箱地址
+ char szServiceMailBoxAddr[MAX_MAILBOX_LEN]; //服务的邮箱地址
+ unsigned char byRes[128];
+}SADP_QR_CODES, *LPSADP_QR_CODES;
+
+//加密串结构体,对应配置命令SADP_GET_ENCRYPT_STRING,接口SADP_GetDeviceConfig
+typedef struct tagSADP_ENCRYPT_STRING
+{
+ unsigned int dwEncryptStringSize; //加密串长度
+ char szEncryptString[MAX_ENCRYPT_CODE]; //加密串内容
+ unsigned char byRes[128];
+}SADP_ENCRYPT_STRING, *LPSADP_ENCRYPT_STRING;
+//恢复/重置密码结构体
+typedef struct tagSADP_RESET_PARAM
+{
+ char szCode[MAX_ENCRYPT_CODE]; //日期转换过的特殊字符串或加密工具加密后的字符串 - 为兼容老接口
+ char szAuthFile[MAX_FILE_PATH_LEN];//重置授权文件
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byEnableSyncIPCPW; //是否启用同步IPC密码。0 - 不启用, 1- 启用
+ unsigned char byRes[511];
+}SADP_RESET_PARAM, *LSADP_RESET_PARAM;
+
+//显示OEM配置结构体
+typedef struct tagSADP_DISPLAY_OEM_CFG
+{
+ unsigned int dwDisplayOEM; //0-显示所有OEM,其它值为要显示的某一种类型的OEMCode,具体详见dwDetailOEMCode
+ unsigned char byRes[32]; //保留
+}SADP_DISPLAY_OEM_CFG, *LPSADP_DISPLAY_OEM_CFG;
+
+typedef struct tagSADP_TYPE_UNLOCK_CODE
+{
+ unsigned int dwCodeSize;
+ char szDeviceTypeUnlockCode[MAX_UNLOCK_CODE_RANDOM_LEN/*256*/];//设备型号解禁码
+ unsigned char byRes[128];
+}SADP_TYPE_UNLOCK_CODE, *LPSADP_TYPE_UNLOCK_CODE;
+
+typedef struct tagSADP_CUSTOM_DEVICE_TYPE
+{
+ unsigned int dwCodeSize;
+ char szDeviceTypeSecretKey[MAX_UNLOCK_CODE_KEY/*256*/];//类型解禁秘钥
+ unsigned char byRes[128];
+}SADP_CUSTOM_DEVICE_TYPE, *LPSADP_CUSTOM_DEVICE_TYPE;
+
+//获取GUID参数结构体
+typedef struct tagSADP_GUID_FILE_COND
+{
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes[128];
+}SADP_GUID_FILE_COND, *LPSADP_GUID_FILE_COND;
+
+//GUID结构体
+typedef struct tagSADP_GUID_FILE
+{
+ unsigned int dwGUIDSize;
+ char szGUID[MAX_GUID_LEN];
+ unsigned char byRetryGUIDTime; //剩余可导入/导出GUID次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char byRes[254];
+}SADP_GUID_FILE, *LPSADP_GUID_FILE;
+
+typedef struct tagSADP_SINGLE_SECURITY_QUESTION_CFG
+{
+ unsigned int dwSize;
+ unsigned int dwId;//序号
+ char szAnswer[MAX_ANSWER_LEN/*256*/];//答案,只在设置时有效,获取时无效
+ unsigned char byMark;//标记该序号的问题是否被设置 0-未设置 1-已设置
+ unsigned char byRes[127];
+}SADP_SINGLE_SECURITY_QUESTION_CFG, *LPSADP_SINGLE_SECURITY_QUESTION_CFG;
+
+typedef struct tagSADP_SECURITY_QUESTION_CFG
+{
+ unsigned int dwSize;
+ SADP_SINGLE_SECURITY_QUESTION_CFG struSecurityQuestion[MAX_QUESTION_LIST_LEN/*32*/];//安全问题列表
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes[512];
+}SADP_SECURITY_QUESTION_CFG, *LPSADP_SECURITY_QUESTION_CFG;
+
+typedef struct tagSADP_SECURITY_QUESTION
+{
+ unsigned char byRetryAnswerTime; //剩余可设置安全问题次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char byRes[254];
+}SADP_SECURITY_QUESTION, *LPSADP_SECURITY_QUESTION;
+
+typedef struct tagSADP_RESET_PARAM_V40
+{
+ unsigned int dwSize;
+ unsigned char byResetType; //密码重置类型 0-保留,1- 通过设备序列号恢复默认密码,2-导入/导出文件重置密码,3-二维码重置, 4-GUID重置,5-安全问题重置 6-邮箱重置密码
+ unsigned char byEnableSyncIPCPW; //是否同时将密码启用为NVR同步IPC密码。0 - 不启用, 1- 启用
+ unsigned char byRes2[2]; //保留
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ char szCode[MAX_ENCRYPT_CODE]; //日期转换过的特殊字符串或加密工具加密后的字符串 - byResetType 为1、3时有效
+ char szAuthFile[MAX_FILE_PATH_LEN];//重置授权文件, byResetType 为2时有效
+ char szGUID[MAX_GUID_LEN]; //GUID, byResetType 为4时有效
+ SADP_SECURITY_QUESTION_CFG struSecurityQuestionCfg;//安全问题结构体, byResetType 为5时有效
+ unsigned char byRes[512];
+}SADP_RESET_PARAM_V40, *LPSADP_RESET_PARAM_V40;
+
+typedef struct tagSADP_RET_RESET_PARAM_V40
+{
+ unsigned char byRetryGUIDTime; //剩余可设置次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char bRetryTimeValid; //byRetryGUIDTime字段是否有效 0-无效,1-有效
+ unsigned char bLockTimeValid; //bySurplusLockTime字段是否有效 0-无效,1-有效
+ unsigned char byRes[252];
+}SADP_RET_RESET_PARAM_V40, *LPSADP_RET_RESET_PARAM_V40;
+
+//HCPlatform状态
+typedef struct tagSADP_HCPLATFORM_STATUS_INFO
+{
+ unsigned int dwSize;
+ unsigned char byEnableHCPlatform; //是否启用HCPlatform。0 - 保留, 1- 启用, 2-不启用
+ unsigned char byRes[3]; //保留
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes2[128];
+}SADP_HCPLATFORM_STATUS_INFO, *LPSADP_HCPLATFORM_STATUS_INFO;
+
+typedef struct tagSADP_USER_MAILBOX
+{
+ unsigned int dwSize;
+ char szPassword[MAX_PASS_LEN]; //设备admin用户密码
+ char szMailBoxAddr[MAX_MAILBOX_LEN]; //预留邮箱地址,用于接收密码服务器返回的安全码
+ unsigned char byRes[128];
+}SADP_USER_MAILBOX, *LPSADP_USER_MAILBOX;
+//设备验证码
+typedef struct tagSADP_VERIFICATION_CODE_INFO
+{
+ unsigned int dwSize;
+ char szVerificationCode[SADP_MAX_VERIFICATION_CODE_LEN]; //验证码(验证码用于萤石接入、预览、控制的唯一密码)
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes[128];
+}SADP_VERIFICATION_CODE_INFO, *LPSADP_VERIFICATION_CODE_INFO;
+
+//设备锁定信息
+typedef struct tagSADP_DEV_LOCK_INFO
+{
+ unsigned char byRetryTime; //剩余可尝试次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char byRes[126];
+}SADP_DEV_LOCK_INFO, *LPSADP_DEV_LOCK_INFO;
+
+//被绑定设备信息结构体
+typedef struct tagSADP_BIND_INFO
+{
+ char szSerialNO[SADP_MAX_SERIALNO_LEN]; //被绑定设备的序列号
+ unsigned char byiBind; //设备是否绑定 0-未绑定;1-已绑定
+ unsigned char byRes[127];
+}SADP_BIND_INFO, *LPSADP_BIND_INFO;
+
+typedef struct tagSADP_BIND_LIST
+{
+ SADP_BIND_INFO struBindInfo[SADP_MAX_BIND_NUM]; //绑定设备信息列表
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byUnbindAll; //是否解绑所有设备 0-不解绑所有设备;1-解绑所有设备
+ unsigned char byRes[127];
+}SADP_BIND_LIST, *LPSADP_BIND_LIST;
+
+typedef struct tagSADP_INACTIVE_INFO
+{
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes[128];
+}SADP_INACTIVE_INFO, *LPSADP_INACTIVE_INFO;
+
+//wifi Region
+typedef struct tagSADP_WIFI_REGION_INFO
+{
+ unsigned char byMode; //模式,0-保留,1-wifi区域配置模式,2-wifi增强模式
+ unsigned char byWifiRegion; //wifi区域,当byMode为1时,该字段有效。0 -default, 1- china, 2-nothAmerica,3-japan,4-europe,5-world
+ unsigned char byWifiEnhancementEnabled;//是否启用wifi增强模式,当byMode为2时,该字段有效 0 -不启用, 1- 启用
+ unsigned char byRes; //保留
+ char szPassword[MAX_PASS_LEN];//用户密码
+ unsigned char byRes2[128];
+}SADP_WIFI_REGION_INFO, *LPSADP_WIFI_REGION_INFO;
+
+//通道默认密码信息
+typedef struct tagSADP_CHANNEL_DEFAULT_PASSWORD
+{
+ char szPassword[MAX_PASS_LEN]; //设备admin用户密码
+ char szChannelDefaultPassword[MAX_PASS_LEN]; //通道默认密码(用户NVR激活,添加IPC)
+ unsigned char byRes[128];
+}SADP_CHANNEL_DEFAULT_PASSWORD, *LPSADP_CHANNEL_DEFAULT_PASSWORD;
+
+
+//设备自检状态结构体
+typedef struct tagSADP_SELF_CHECK_STATE
+{
+ unsigned int dwSize;
+ int dwTotalDisk; //磁盘总数(默认值为-1)
+ int dwGoodDisk; //好盘数(默认值为-1)
+ char szCPU[MAX_CPU_LEN]; //CPU
+ char szMemory[MAX_MEMORY_LEN]; //内存
+ unsigned char byProgress; //自检进度,0-100
+ unsigned char byTemperatureState; //温度状态,0-无效;1-正常;2-异常
+ unsigned char byFanState; //风扇状态,0-无效;1-正常;2-异常
+ unsigned char byPowerState; //电源状态,0-无效;1-正常;2-异常
+ unsigned char bySASConnectState; //SAS连接状态,0-无效;1-连接;2-未连接
+ char byTotalNetworkPort; //网口总数(默认值为-1)
+ char byConnectNetworkPort; //网口连接数(默认值为-1)
+ unsigned char byRes[129];
+}SADP_SELF_CHECK_STATE, *LPSADP_SELF_CHECK_STATE;
+
+//EHome使能参数
+typedef struct tagSADP_EHOME_ENABLE_PARAM
+{
+ unsigned int dwSize;
+ char szDevID[MAX_PASS_LEN]; //设备ID
+ char szEhomeKey[MAX_PASS_LEN]; //Ehome Key
+ char szPassword[MAX_PASS_LEN]; //设备密码
+ unsigned char byRes[64];
+}SADP_EHOME_ENABLE_PARAM, *LPSADP_EHOME_ENABLE_PARAM;
+
+//WIFI参数配置结构体
+typedef struct tagSADP_WIFI_CONFIG_PARAM
+{
+ unsigned int dwSize;
+ char szSSID[SADP_MAX_SERIALNO_LEN]; //SSID
+ char szPassword[SADP_MAX_SERIALNO_LEN]; //Password
+ unsigned char byWifiMode; //wifi模式,0-默认,1-Station, 2-AP
+ unsigned char byRes[64];
+}SADP_WIFI_CONFIG_PARAM, *LPSADP_WIFI_CONFIG_PARAM;
+
+//已配置重置密码类型参数配置结构体
+typedef struct tagSADP_PASSWORD_RESET_TYPE_PARAM
+{
+ unsigned int dwSize;
+ unsigned char byEnable; //0-未配置 1-(GUID,安全问题,安全邮箱,HC)配置过一种或多种
+ unsigned char byGuidEnabled; //0-未导出过GUID 1-导出过GUID
+ unsigned char bySecurityQuestionEnabled; //0-未配置过安全问题 1-配置过安全问题
+ unsigned char bySecurityMailBoxEnabled; //0-未配置过安全邮箱 1-配置过安全邮箱
+ unsigned char byHikConnectEnabled; //0-未绑定HikConnect账号 1-绑定过HikConnect账号
+ unsigned char byRes1[3];
+ unsigned char byRes[64];
+}SADP_PASSWORD_RESET_TYPE_PARAM, *LPSADP_PASSWORD_RESET_TYPE_PARAM;
+
+
+// 接口
+typedef void (CALLBACK *PDEVICE_FIND_CALLBACK)(const SADP_DEVICE_INFO *lpDeviceInfo, void *pUserData);
+CSADP_API BOOL CALLBACK SADP_Start_V30(PDEVICE_FIND_CALLBACK pDeviceFindCallBack, int bInstallNPF = 0, void* pUserData = NULL);
+typedef void (CALLBACK *PDEVICE_FIND_CALLBACK_V40)(const SADP_DEVICE_INFO_V40 *lpDeviceInfo, void *pUserData);
+CSADP_API BOOL CALLBACK SADP_Start_V40(PDEVICE_FIND_CALLBACK_V40 pDeviceFindCallBack, int bInstallNPF = 0, void* pUserData = NULL);
+CSADP_API BOOL CALLBACK SADP_SendInquiry(void);
+CSADP_API BOOL CALLBACK SADP_Stop(void);
+CSADP_API BOOL CALLBACK SADP_ModifyDeviceNetParam(const char* sMAC, const char* sPassword, const SADP_DEV_NET_PARAM *lpNetParam);
+CSADP_API unsigned int CALLBACK SADP_GetSadpVersion(void);
+CSADP_API BOOL CALLBACK SADP_SetLogToFile(int nLogLevel=0, char const *strLogDir = NULL, int bAutoDel = 1);
+CSADP_API unsigned int CALLBACK SADP_GetLastError(void);
+CSADP_API BOOL CALLBACK SADP_ResetDefaultPasswd(const char* sDevSerialNO, const char* sCommand);
+CSADP_API BOOL CALLBACK SADP_SetCMSInfo(const char* sMac, const SADP_CMS_PARAM *lpCmsParam);
+CSADP_API BOOL CALLBACK SADP_Clearup(void);
+CSADP_API void CALLBACK SADP_SetAutoRequestInterval(unsigned int dwInterval); //设置自动搜索时间间隔(单位秒,为0则不自动请求,默认60s)
+
+CSADP_API BOOL CALLBACK SADP_GetDeviceConfig(const char* sDevSerialNO, unsigned int dwCommand, void* lpInBuffer, unsigned int dwinBuffSize, void *lpOutBuffer, unsigned int dwOutBuffSize);
+CSADP_API BOOL CALLBACK SADP_SetDeviceConfig(const char* sDevSerialNO, unsigned int dwCommand, void* lpInBuffer, unsigned int dwInBuffSize, void* lpOutBuffer, unsigned int dwOutBuffSize);
+CSADP_API BOOL CALLBACK SADP_GetDeviceConfigByMAC(const char* sDevMAC, unsigned int dwCommand, void* lpInBuffer, unsigned int dwinBuffSize, void *lpOutBuffer, unsigned int dwOutBuffSize);
+//激活设备
+CSADP_API BOOL CALLBACK SADP_ActivateDevice(const char* sDevSerialNO, const char* sCommand);
+
+//重置密码接口,兼容之前的恢复默认密码接口
+CSADP_API BOOL CALLBACK SADP_ResetPasswd(const char* sDevSerialNO, const SADP_RESET_PARAM *pResetParam);
+//重置密码接口V40,兼容之前的SADP_ResetPasswd
+CSADP_API BOOL CALLBACK SADP_ResetPasswd_V40(const char* sDevSerialNO, const SADP_RESET_PARAM_V40 *pResetParam, SADP_RET_RESET_PARAM_V40 *pRetResetParam);
+
+
+//设置设备过滤规则
+//dwFilterRule,按位表示,为1表示过滤,全0表示不过滤;0x01:过滤萤石设备;0x02:过滤OEM设备;0x03:过滤萤和OEM设备;0xfffffffe:仅显示萤石设备;0xfffffffd:仅显示OEM设备
+CSADP_API BOOL CALLBACK SADP_SetDeviceFilterRule( unsigned int dwFilterRule, const void *lpInBuff, unsigned int dwInBuffLen);
+//修改网络参数V40
+CSADP_API BOOL CALLBACK SADP_ModifyDeviceNetParam_V40(const char* sMAC, const char* sPassword, const SADP_DEV_NET_PARAM *lpNetParam, SADP_DEV_RET_NET_PARAM *lpRetNetParam, unsigned int dwOutBuffSize);
+//点灯
+CSADP_API BOOL CALLBACK SADP_SendLamp(const char* sMAC, unsigned int dwCommand);
+#endif
+
+
+
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Info.plist b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Info.plist
new file mode 100644
index 0000000..7d15dcc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Info.plist
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Modules/module.modulemap b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Modules/module.modulemap
new file mode 100644
index 0000000..b77c28a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/EZOpenSDKFramework.framework/Modules/module.modulemap
@@ -0,0 +1,6 @@
+framework module EZOpenSDKFramework {
+ umbrella header "EZOpenSDKFramework.h"
+
+ export *
+ module * { export * }
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASCompositeConstraint.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASCompositeConstraint.h
new file mode 100755
index 0000000..934c6f1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASCompositeConstraint.h
@@ -0,0 +1,26 @@
+//
+// MASCompositeConstraint.h
+// Masonry
+//
+// Created by Jonas Budelmann on 21/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASConstraint.h"
+#import "MASUtilities.h"
+
+/**
+ * A group of MASConstraint objects
+ */
+@interface MASCompositeConstraint : MASConstraint
+
+/**
+ * Creates a composite with a predefined array of children
+ *
+ * @param children child MASConstraints
+ *
+ * @return a composite constraint
+ */
+- (id)initWithChildren:(NSArray *)children;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASCompositeConstraint.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASCompositeConstraint.m
new file mode 100755
index 0000000..2002a40
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASCompositeConstraint.m
@@ -0,0 +1,183 @@
+//
+// MASCompositeConstraint.m
+// Masonry
+//
+// Created by Jonas Budelmann on 21/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASCompositeConstraint.h"
+#import "MASConstraint+Private.h"
+
+@interface MASCompositeConstraint () <MASConstraintDelegate>
+
+@property (nonatomic, strong) id mas_key;
+@property (nonatomic, strong) NSMutableArray *childConstraints;
+
+@end
+
+@implementation MASCompositeConstraint
+
+- (id)initWithChildren:(NSArray *)children {
+ self = [super init];
+ if (!self) return nil;
+
+ _childConstraints = [children mutableCopy];
+ for (MASConstraint *constraint in _childConstraints) {
+ constraint.delegate = self;
+ }
+
+ return self;
+}
+
+#pragma mark - MASConstraintDelegate
+
+- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint {
+ NSUInteger index = [self.childConstraints indexOfObject:constraint];
+ NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint);
+ [self.childConstraints replaceObjectAtIndex:index withObject:replacementConstraint];
+}
+
+- (MASConstraint *)constraint:(MASConstraint __unused *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
+ id<MASConstraintDelegate> strongDelegate = self.delegate;
+ MASConstraint *newConstraint = [strongDelegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute];
+ newConstraint.delegate = self;
+ [self.childConstraints addObject:newConstraint];
+ return newConstraint;
+}
+
+#pragma mark - NSLayoutConstraint multiplier proxies
+
+- (MASConstraint * (^)(CGFloat))multipliedBy {
+ return ^id(CGFloat multiplier) {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.multipliedBy(multiplier);
+ }
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(CGFloat))dividedBy {
+ return ^id(CGFloat divider) {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.dividedBy(divider);
+ }
+ return self;
+ };
+}
+
+#pragma mark - MASLayoutPriority proxy
+
+- (MASConstraint * (^)(MASLayoutPriority))priority {
+ return ^id(MASLayoutPriority priority) {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.priority(priority);
+ }
+ return self;
+ };
+}
+
+#pragma mark - NSLayoutRelation proxy
+
+- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation {
+ return ^id(id attr, NSLayoutRelation relation) {
+ for (MASConstraint *constraint in self.childConstraints.copy) {
+ constraint.equalToWithRelation(attr, relation);
+ }
+ return self;
+ };
+}
+
+#pragma mark - attribute chaining
+
+- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
+ [self constraint:self addConstraintWithLayoutAttribute:layoutAttribute];
+ return self;
+}
+
+#pragma mark - Animator proxy
+
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
+
+- (MASConstraint *)animator {
+ for (MASConstraint *constraint in self.childConstraints) {
+ [constraint animator];
+ }
+ return self;
+}
+
+#endif
+
+#pragma mark - debug helpers
+
+- (MASConstraint * (^)(id))key {
+ return ^id(id key) {
+ self.mas_key = key;
+ int i = 0;
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.key([NSString stringWithFormat:@"%@[%d]", key, i++]);
+ }
+ return self;
+ };
+}
+
+#pragma mark - NSLayoutConstraint constant setters
+
+- (void)setInsets:(MASEdgeInsets)insets {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.insets = insets;
+ }
+}
+
+- (void)setInset:(CGFloat)inset {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.inset = inset;
+ }
+}
+
+- (void)setOffset:(CGFloat)offset {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.offset = offset;
+ }
+}
+
+- (void)setSizeOffset:(CGSize)sizeOffset {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.sizeOffset = sizeOffset;
+ }
+}
+
+- (void)setCenterOffset:(CGPoint)centerOffset {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.centerOffset = centerOffset;
+ }
+}
+
+#pragma mark - MASConstraint
+
+- (void)activate {
+ for (MASConstraint *constraint in self.childConstraints) {
+ [constraint activate];
+ }
+}
+
+- (void)deactivate {
+ for (MASConstraint *constraint in self.childConstraints) {
+ [constraint deactivate];
+ }
+}
+
+- (void)install {
+ for (MASConstraint *constraint in self.childConstraints) {
+ constraint.updateExisting = self.updateExisting;
+ [constraint install];
+ }
+}
+
+- (void)uninstall {
+ for (MASConstraint *constraint in self.childConstraints) {
+ [constraint uninstall];
+ }
+}
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint+Private.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint+Private.h
new file mode 100755
index 0000000..ee0fd96
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint+Private.h
@@ -0,0 +1,66 @@
+//
+// MASConstraint+Private.h
+// Masonry
+//
+// Created by Nick Tymchenko on 29/04/14.
+// Copyright (c) 2014 cloudling. All rights reserved.
+//
+
+#import "MASConstraint.h"
+
+@protocol MASConstraintDelegate;
+
+
+@interface MASConstraint ()
+
+/**
+ * Whether or not to check for an existing constraint instead of adding constraint
+ */
+@property (nonatomic, assign) BOOL updateExisting;
+
+/**
+ * Usually MASConstraintMaker but could be a parent MASConstraint
+ */
+@property (nonatomic, weak) id<MASConstraintDelegate> delegate;
+
+/**
+ * Based on a provided value type, is equal to calling:
+ * NSNumber - setOffset:
+ * NSValue with CGPoint - setPointOffset:
+ * NSValue with CGSize - setSizeOffset:
+ * NSValue with MASEdgeInsets - setInsets:
+ */
+- (void)setLayoutConstantWithValue:(NSValue *)value;
+
+@end
+
+
+@interface MASConstraint (Abstract)
+
+/**
+ * Sets the constraint relation to given NSLayoutRelation
+ * returns a block which accepts one of the following:
+ * MASViewAttribute, UIView, NSValue, NSArray
+ * see readme for more details.
+ */
+- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation;
+
+/**
+ * Override to set a custom chaining behaviour
+ */
+- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute;
+
+@end
+
+
+@protocol MASConstraintDelegate <NSObject>
+
+/**
+ * Notifies the delegate when the constraint needs to be replaced with another constraint. For example
+ * A MASViewConstraint may turn into a MASCompositeConstraint when an array is passed to one of the equality blocks
+ */
+- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint;
+
+- (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint.h
new file mode 100755
index 0000000..3eaa8a1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint.h
@@ -0,0 +1,272 @@
+//
+// MASConstraint.h
+// Masonry
+//
+// Created by Jonas Budelmann on 22/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASUtilities.h"
+
+/**
+ * Enables Constraints to be created with chainable syntax
+ * Constraint can represent single NSLayoutConstraint (MASViewConstraint)
+ * or a group of NSLayoutConstraints (MASComposisteConstraint)
+ */
+@interface MASConstraint : NSObject
+
+// Chaining Support
+
+/**
+ * Modifies the NSLayoutConstraint constant,
+ * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
+ */
+- (MASConstraint * (^)(MASEdgeInsets insets))insets;
+
+/**
+ * Modifies the NSLayoutConstraint constant,
+ * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
+ */
+- (MASConstraint * (^)(CGFloat inset))inset;
+
+/**
+ * Modifies the NSLayoutConstraint constant,
+ * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ * NSLayoutAttributeWidth, NSLayoutAttributeHeight
+ */
+- (MASConstraint * (^)(CGSize offset))sizeOffset;
+
+/**
+ * Modifies the NSLayoutConstraint constant,
+ * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ * NSLayoutAttributeCenterX, NSLayoutAttributeCenterY
+ */
+- (MASConstraint * (^)(CGPoint offset))centerOffset;
+
+/**
+ * Modifies the NSLayoutConstraint constant
+ */
+- (MASConstraint * (^)(CGFloat offset))offset;
+
+/**
+ * Modifies the NSLayoutConstraint constant based on a value type
+ */
+- (MASConstraint * (^)(NSValue *value))valueOffset;
+
+/**
+ * Sets the NSLayoutConstraint multiplier property
+ */
+- (MASConstraint * (^)(CGFloat multiplier))multipliedBy;
+
+/**
+ * Sets the NSLayoutConstraint multiplier to 1.0/dividedBy
+ */
+- (MASConstraint * (^)(CGFloat divider))dividedBy;
+
+/**
+ * Sets the NSLayoutConstraint priority to a float or MASLayoutPriority
+ */
+- (MASConstraint * (^)(MASLayoutPriority priority))priority;
+
+/**
+ * Sets the NSLayoutConstraint priority to MASLayoutPriorityLow
+ */
+- (MASConstraint * (^)(void))priorityLow;
+
+/**
+ * Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium
+ */
+- (MASConstraint * (^)(void))priorityMedium;
+
+/**
+ * Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh
+ */
+- (MASConstraint * (^)(void))priorityHigh;
+
+/**
+ * Sets the constraint relation to NSLayoutRelationEqual
+ * returns a block which accepts one of the following:
+ * MASViewAttribute, UIView, NSValue, NSArray
+ * see readme for more details.
+ */
+- (MASConstraint * (^)(id attr))equalTo;
+
+/**
+ * Sets the constraint relation to NSLayoutRelationGreaterThanOrEqual
+ * returns a block which accepts one of the following:
+ * MASViewAttribute, UIView, NSValue, NSArray
+ * see readme for more details.
+ */
+- (MASConstraint * (^)(id attr))greaterThanOrEqualTo;
+
+/**
+ * Sets the constraint relation to NSLayoutRelationLessThanOrEqual
+ * returns a block which accepts one of the following:
+ * MASViewAttribute, UIView, NSValue, NSArray
+ * see readme for more details.
+ */
+- (MASConstraint * (^)(id attr))lessThanOrEqualTo;
+
+/**
+ * Optional semantic property which has no effect but improves the readability of constraint
+ */
+- (MASConstraint *)with;
+
+/**
+ * Optional semantic property which has no effect but improves the readability of constraint
+ */
+- (MASConstraint *)and;
+
+/**
+ * Creates a new MASCompositeConstraint with the called attribute and reciever
+ */
+- (MASConstraint *)left;
+- (MASConstraint *)top;
+- (MASConstraint *)right;
+- (MASConstraint *)bottom;
+- (MASConstraint *)leading;
+- (MASConstraint *)trailing;
+- (MASConstraint *)width;
+- (MASConstraint *)height;
+- (MASConstraint *)centerX;
+- (MASConstraint *)centerY;
+- (MASConstraint *)baseline;
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline;
+- (MASConstraint *)lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+- (MASConstraint *)leftMargin;
+- (MASConstraint *)rightMargin;
+- (MASConstraint *)topMargin;
+- (MASConstraint *)bottomMargin;
+- (MASConstraint *)leadingMargin;
+- (MASConstraint *)trailingMargin;
+- (MASConstraint *)centerXWithinMargins;
+- (MASConstraint *)centerYWithinMargins;
+
+#endif
+
+
+/**
+ * Sets the constraint debug name
+ */
+- (MASConstraint * (^)(id key))key;
+
+// NSLayoutConstraint constant Setters
+// for use outside of mas_updateConstraints/mas_makeConstraints blocks
+
+/**
+ * Modifies the NSLayoutConstraint constant,
+ * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
+ */
+- (void)setInsets:(MASEdgeInsets)insets;
+
+/**
+ * Modifies the NSLayoutConstraint constant,
+ * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ * NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
+ */
+- (void)setInset:(CGFloat)inset;
+
+/**
+ * Modifies the NSLayoutConstraint constant,
+ * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ * NSLayoutAttributeWidth, NSLayoutAttributeHeight
+ */
+- (void)setSizeOffset:(CGSize)sizeOffset;
+
+/**
+ * Modifies the NSLayoutConstraint constant,
+ * only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ * NSLayoutAttributeCenterX, NSLayoutAttributeCenterY
+ */
+- (void)setCenterOffset:(CGPoint)centerOffset;
+
+/**
+ * Modifies the NSLayoutConstraint constant
+ */
+- (void)setOffset:(CGFloat)offset;
+
+
+// NSLayoutConstraint Installation support
+
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
+/**
+ * Whether or not to go through the animator proxy when modifying the constraint
+ */
+@property (nonatomic, copy, readonly) MASConstraint *animator;
+#endif
+
+/**
+ * Activates an NSLayoutConstraint if it's supported by an OS.
+ * Invokes install otherwise.
+ */
+- (void)activate;
+
+/**
+ * Deactivates previously installed/activated NSLayoutConstraint.
+ */
+- (void)deactivate;
+
+/**
+ * Creates a NSLayoutConstraint and adds it to the appropriate view.
+ */
+- (void)install;
+
+/**
+ * Removes previously installed NSLayoutConstraint
+ */
+- (void)uninstall;
+
+@end
+
+
+/**
+ * Convenience auto-boxing macros for MASConstraint methods.
+ *
+ * Defining MAS_SHORTHAND_GLOBALS will turn on auto-boxing for default syntax.
+ * A potential drawback of this is that the unprefixed macros will appear in global scope.
+ */
+#define mas_equalTo(...) equalTo(MASBoxValue((__VA_ARGS__)))
+#define mas_greaterThanOrEqualTo(...) greaterThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
+#define mas_lessThanOrEqualTo(...) lessThanOrEqualTo(MASBoxValue((__VA_ARGS__)))
+
+#define mas_offset(...) valueOffset(MASBoxValue((__VA_ARGS__)))
+
+
+#ifdef MAS_SHORTHAND_GLOBALS
+
+#define equalTo(...) mas_equalTo(__VA_ARGS__)
+#define greaterThanOrEqualTo(...) mas_greaterThanOrEqualTo(__VA_ARGS__)
+#define lessThanOrEqualTo(...) mas_lessThanOrEqualTo(__VA_ARGS__)
+
+#define offset(...) mas_offset(__VA_ARGS__)
+
+#endif
+
+
+@interface MASConstraint (AutoboxingSupport)
+
+/**
+ * Aliases to corresponding relation methods (for shorthand macros)
+ * Also needed to aid autocompletion
+ */
+- (MASConstraint * (^)(id attr))mas_equalTo;
+- (MASConstraint * (^)(id attr))mas_greaterThanOrEqualTo;
+- (MASConstraint * (^)(id attr))mas_lessThanOrEqualTo;
+
+/**
+ * A dummy method to aid autocompletion
+ */
+- (MASConstraint * (^)(id offset))mas_offset;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint.m
new file mode 100755
index 0000000..52de590
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraint.m
@@ -0,0 +1,301 @@
+//
+// MASConstraint.m
+// Masonry
+//
+// Created by Nick Tymchenko on 1/20/14.
+//
+
+#import "MASConstraint.h"
+#import "MASConstraint+Private.h"
+
+#define MASMethodNotImplemented() \
+ @throw [NSException exceptionWithName:NSInternalInconsistencyException \
+ reason:[NSString stringWithFormat:@"You must override %@ in a subclass.", NSStringFromSelector(_cmd)] \
+ userInfo:nil]
+
+@implementation MASConstraint
+
+#pragma mark - Init
+
+- (id)init {
+ NSAssert(![self isMemberOfClass:[MASConstraint class]], @"MASConstraint is an abstract class, you should not instantiate it directly.");
+ return [super init];
+}
+
+#pragma mark - NSLayoutRelation proxies
+
+- (MASConstraint * (^)(id))equalTo {
+ return ^id(id attribute) {
+ return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
+ };
+}
+
+- (MASConstraint * (^)(id))mas_equalTo {
+ return ^id(id attribute) {
+ return self.equalToWithRelation(attribute, NSLayoutRelationEqual);
+ };
+}
+
+- (MASConstraint * (^)(id))greaterThanOrEqualTo {
+ return ^id(id attribute) {
+ return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual);
+ };
+}
+
+- (MASConstraint * (^)(id))mas_greaterThanOrEqualTo {
+ return ^id(id attribute) {
+ return self.equalToWithRelation(attribute, NSLayoutRelationGreaterThanOrEqual);
+ };
+}
+
+- (MASConstraint * (^)(id))lessThanOrEqualTo {
+ return ^id(id attribute) {
+ return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual);
+ };
+}
+
+- (MASConstraint * (^)(id))mas_lessThanOrEqualTo {
+ return ^id(id attribute) {
+ return self.equalToWithRelation(attribute, NSLayoutRelationLessThanOrEqual);
+ };
+}
+
+#pragma mark - MASLayoutPriority proxies
+
+- (MASConstraint * (^)(void))priorityLow {
+ return ^id{
+ self.priority(MASLayoutPriorityDefaultLow);
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(void))priorityMedium {
+ return ^id{
+ self.priority(MASLayoutPriorityDefaultMedium);
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(void))priorityHigh {
+ return ^id{
+ self.priority(MASLayoutPriorityDefaultHigh);
+ return self;
+ };
+}
+
+#pragma mark - NSLayoutConstraint constant proxies
+
+- (MASConstraint * (^)(MASEdgeInsets))insets {
+ return ^id(MASEdgeInsets insets){
+ self.insets = insets;
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(CGFloat))inset {
+ return ^id(CGFloat inset){
+ self.inset = inset;
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(CGSize))sizeOffset {
+ return ^id(CGSize offset) {
+ self.sizeOffset = offset;
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(CGPoint))centerOffset {
+ return ^id(CGPoint offset) {
+ self.centerOffset = offset;
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(CGFloat))offset {
+ return ^id(CGFloat offset){
+ self.offset = offset;
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(NSValue *value))valueOffset {
+ return ^id(NSValue *offset) {
+ NSAssert([offset isKindOfClass:NSValue.class], @"expected an NSValue offset, got: %@", offset);
+ [self setLayoutConstantWithValue:offset];
+ return self;
+ };
+}
+
+- (MASConstraint * (^)(id offset))mas_offset {
+ // Will never be called due to macro
+ return nil;
+}
+
+#pragma mark - NSLayoutConstraint constant setter
+
+- (void)setLayoutConstantWithValue:(NSValue *)value {
+ if ([value isKindOfClass:NSNumber.class]) {
+ self.offset = [(NSNumber *)value doubleValue];
+ } else if (strcmp(value.objCType, @encode(CGPoint)) == 0) {
+ CGPoint point;
+ [value getValue:&point];
+ self.centerOffset = point;
+ } else if (strcmp(value.objCType, @encode(CGSize)) == 0) {
+ CGSize size;
+ [value getValue:&size];
+ self.sizeOffset = size;
+ } else if (strcmp(value.objCType, @encode(MASEdgeInsets)) == 0) {
+ MASEdgeInsets insets;
+ [value getValue:&insets];
+ self.insets = insets;
+ } else {
+ NSAssert(NO, @"attempting to set layout constant with unsupported value: %@", value);
+ }
+}
+
+#pragma mark - Semantic properties
+
+- (MASConstraint *)with {
+ return self;
+}
+
+- (MASConstraint *)and {
+ return self;
+}
+
+#pragma mark - Chaining
+
+- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute __unused)layoutAttribute {
+ MASMethodNotImplemented();
+}
+
+- (MASConstraint *)left {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft];
+}
+
+- (MASConstraint *)top {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop];
+}
+
+- (MASConstraint *)right {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight];
+}
+
+- (MASConstraint *)bottom {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom];
+}
+
+- (MASConstraint *)leading {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading];
+}
+
+- (MASConstraint *)trailing {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing];
+}
+
+- (MASConstraint *)width {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth];
+}
+
+- (MASConstraint *)height {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight];
+}
+
+- (MASConstraint *)centerX {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX];
+}
+
+- (MASConstraint *)centerY {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY];
+}
+
+- (MASConstraint *)baseline {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline];
+}
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+- (MASConstraint *)lastBaseline {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+- (MASConstraint *)leftMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
+}
+
+- (MASConstraint *)rightMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin];
+}
+
+- (MASConstraint *)topMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin];
+}
+
+- (MASConstraint *)bottomMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin];
+}
+
+- (MASConstraint *)leadingMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin];
+}
+
+- (MASConstraint *)trailingMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin];
+}
+
+- (MASConstraint *)centerXWithinMargins {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins];
+}
+
+- (MASConstraint *)centerYWithinMargins {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins];
+}
+
+#endif
+
+#pragma mark - Abstract
+
+- (MASConstraint * (^)(CGFloat multiplier))multipliedBy { MASMethodNotImplemented(); }
+
+- (MASConstraint * (^)(CGFloat divider))dividedBy { MASMethodNotImplemented(); }
+
+- (MASConstraint * (^)(MASLayoutPriority priority))priority { MASMethodNotImplemented(); }
+
+- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation { MASMethodNotImplemented(); }
+
+- (MASConstraint * (^)(id key))key { MASMethodNotImplemented(); }
+
+- (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); }
+
+- (void)setInset:(CGFloat __unused)inset { MASMethodNotImplemented(); }
+
+- (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); }
+
+- (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); }
+
+- (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); }
+
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
+
+- (MASConstraint *)animator { MASMethodNotImplemented(); }
+
+#endif
+
+- (void)activate { MASMethodNotImplemented(); }
+
+- (void)deactivate { MASMethodNotImplemented(); }
+
+- (void)install { MASMethodNotImplemented(); }
+
+- (void)uninstall { MASMethodNotImplemented(); }
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraintMaker.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraintMaker.h
new file mode 100755
index 0000000..d9b58f4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraintMaker.h
@@ -0,0 +1,146 @@
+//
+// MASConstraintMaker.h
+// Masonry
+//
+// Created by Jonas Budelmann on 20/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASConstraint.h"
+#import "MASUtilities.h"
+
+typedef NS_OPTIONS(NSInteger, MASAttribute) {
+ MASAttributeLeft = 1 << NSLayoutAttributeLeft,
+ MASAttributeRight = 1 << NSLayoutAttributeRight,
+ MASAttributeTop = 1 << NSLayoutAttributeTop,
+ MASAttributeBottom = 1 << NSLayoutAttributeBottom,
+ MASAttributeLeading = 1 << NSLayoutAttributeLeading,
+ MASAttributeTrailing = 1 << NSLayoutAttributeTrailing,
+ MASAttributeWidth = 1 << NSLayoutAttributeWidth,
+ MASAttributeHeight = 1 << NSLayoutAttributeHeight,
+ MASAttributeCenterX = 1 << NSLayoutAttributeCenterX,
+ MASAttributeCenterY = 1 << NSLayoutAttributeCenterY,
+ MASAttributeBaseline = 1 << NSLayoutAttributeBaseline,
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+ MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline,
+ MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline,
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+ MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin,
+ MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin,
+ MASAttributeTopMargin = 1 << NSLayoutAttributeTopMargin,
+ MASAttributeBottomMargin = 1 << NSLayoutAttributeBottomMargin,
+ MASAttributeLeadingMargin = 1 << NSLayoutAttributeLeadingMargin,
+ MASAttributeTrailingMargin = 1 << NSLayoutAttributeTrailingMargin,
+ MASAttributeCenterXWithinMargins = 1 << NSLayoutAttributeCenterXWithinMargins,
+ MASAttributeCenterYWithinMargins = 1 << NSLayoutAttributeCenterYWithinMargins,
+
+#endif
+
+};
+
+/**
+ * Provides factory methods for creating MASConstraints.
+ * Constraints are collected until they are ready to be installed
+ *
+ */
+@interface MASConstraintMaker : NSObject
+
+/**
+ * The following properties return a new MASViewConstraint
+ * with the first item set to the makers associated view and the appropriate MASViewAttribute
+ */
+@property (nonatomic, strong, readonly) MASConstraint *left;
+@property (nonatomic, strong, readonly) MASConstraint *top;
+@property (nonatomic, strong, readonly) MASConstraint *right;
+@property (nonatomic, strong, readonly) MASConstraint *bottom;
+@property (nonatomic, strong, readonly) MASConstraint *leading;
+@property (nonatomic, strong, readonly) MASConstraint *trailing;
+@property (nonatomic, strong, readonly) MASConstraint *width;
+@property (nonatomic, strong, readonly) MASConstraint *height;
+@property (nonatomic, strong, readonly) MASConstraint *centerX;
+@property (nonatomic, strong, readonly) MASConstraint *centerY;
+@property (nonatomic, strong, readonly) MASConstraint *baseline;
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASConstraint *firstBaseline;
+@property (nonatomic, strong, readonly) MASConstraint *lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+@property (nonatomic, strong, readonly) MASConstraint *leftMargin;
+@property (nonatomic, strong, readonly) MASConstraint *rightMargin;
+@property (nonatomic, strong, readonly) MASConstraint *topMargin;
+@property (nonatomic, strong, readonly) MASConstraint *bottomMargin;
+@property (nonatomic, strong, readonly) MASConstraint *leadingMargin;
+@property (nonatomic, strong, readonly) MASConstraint *trailingMargin;
+@property (nonatomic, strong, readonly) MASConstraint *centerXWithinMargins;
+@property (nonatomic, strong, readonly) MASConstraint *centerYWithinMargins;
+
+#endif
+
+/**
+ * Returns a block which creates a new MASCompositeConstraint with the first item set
+ * to the makers associated view and children corresponding to the set bits in the
+ * MASAttribute parameter. Combine multiple attributes via binary-or.
+ */
+@property (nonatomic, strong, readonly) MASConstraint *(^attributes)(MASAttribute attrs);
+
+/**
+ * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeEdges
+ * which generates the appropriate MASViewConstraint children (top, left, bottom, right)
+ * with the first item set to the makers associated view
+ */
+@property (nonatomic, strong, readonly) MASConstraint *edges;
+
+/**
+ * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeSize
+ * which generates the appropriate MASViewConstraint children (width, height)
+ * with the first item set to the makers associated view
+ */
+@property (nonatomic, strong, readonly) MASConstraint *size;
+
+/**
+ * Creates a MASCompositeConstraint with type MASCompositeConstraintTypeCenter
+ * which generates the appropriate MASViewConstraint children (centerX, centerY)
+ * with the first item set to the makers associated view
+ */
+@property (nonatomic, strong, readonly) MASConstraint *center;
+
+/**
+ * Whether or not to check for an existing constraint instead of adding constraint
+ */
+@property (nonatomic, assign) BOOL updateExisting;
+
+/**
+ * Whether or not to remove existing constraints prior to installing
+ */
+@property (nonatomic, assign) BOOL removeExisting;
+
+/**
+ * initialises the maker with a default view
+ *
+ * @param view any MASConstraint are created with this view as the first item
+ *
+ * @return a new MASConstraintMaker
+ */
+- (id)initWithView:(MAS_VIEW *)view;
+
+/**
+ * Calls install method on any MASConstraints which have been created by this maker
+ *
+ * @return an array of all the installed MASConstraints
+ */
+- (NSArray *)install;
+
+- (MASConstraint * (^)(dispatch_block_t))group;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraintMaker.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraintMaker.m
new file mode 100755
index 0000000..f11492a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASConstraintMaker.m
@@ -0,0 +1,273 @@
+//
+// MASConstraintMaker.m
+// Masonry
+//
+// Created by Jonas Budelmann on 20/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASConstraintMaker.h"
+#import "MASViewConstraint.h"
+#import "MASCompositeConstraint.h"
+#import "MASConstraint+Private.h"
+#import "MASViewAttribute.h"
+#import "View+MASAdditions.h"
+
+@interface MASConstraintMaker () <MASConstraintDelegate>
+
+@property (nonatomic, weak) MAS_VIEW *view;
+@property (nonatomic, strong) NSMutableArray *constraints;
+
+@end
+
+@implementation MASConstraintMaker
+
+- (id)initWithView:(MAS_VIEW *)view {
+ self = [super init];
+ if (!self) return nil;
+
+ self.view = view;
+ self.constraints = NSMutableArray.new;
+
+ return self;
+}
+
+- (NSArray *)install {
+ if (self.removeExisting) {
+ NSArray *installedConstraints = [MASViewConstraint installedConstraintsForView:self.view];
+ for (MASConstraint *constraint in installedConstraints) {
+ [constraint uninstall];
+ }
+ }
+ NSArray *constraints = self.constraints.copy;
+ for (MASConstraint *constraint in constraints) {
+ constraint.updateExisting = self.updateExisting;
+ [constraint install];
+ }
+ [self.constraints removeAllObjects];
+ return constraints;
+}
+
+#pragma mark - MASConstraintDelegate
+
+- (void)constraint:(MASConstraint *)constraint shouldBeReplacedWithConstraint:(MASConstraint *)replacementConstraint {
+ NSUInteger index = [self.constraints indexOfObject:constraint];
+ NSAssert(index != NSNotFound, @"Could not find constraint %@", constraint);
+ [self.constraints replaceObjectAtIndex:index withObject:replacementConstraint];
+}
+
+- (MASConstraint *)constraint:(MASConstraint *)constraint addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
+ MASViewAttribute *viewAttribute = [[MASViewAttribute alloc] initWithView:self.view layoutAttribute:layoutAttribute];
+ MASViewConstraint *newConstraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:viewAttribute];
+ if ([constraint isKindOfClass:MASViewConstraint.class]) {
+ //replace with composite constraint
+ NSArray *children = @[constraint, newConstraint];
+ MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children];
+ compositeConstraint.delegate = self;
+ [self constraint:constraint shouldBeReplacedWithConstraint:compositeConstraint];
+ return compositeConstraint;
+ }
+ if (!constraint) {
+ newConstraint.delegate = self;
+ [self.constraints addObject:newConstraint];
+ }
+ return newConstraint;
+}
+
+- (MASConstraint *)addConstraintWithAttributes:(MASAttribute)attrs {
+ __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading
+ | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX
+ | MASAttributeCenterY | MASAttributeBaseline
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+ | MASAttributeFirstBaseline | MASAttributeLastBaseline
+#endif
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+ | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin
+ | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins
+ | MASAttributeCenterYWithinMargins
+#endif
+ );
+
+ NSAssert((attrs & anyAttribute) != 0, @"You didn't pass any attribute to make.attributes(...)");
+
+ NSMutableArray *attributes = [NSMutableArray array];
+
+ if (attrs & MASAttributeLeft) [attributes addObject:self.view.mas_left];
+ if (attrs & MASAttributeRight) [attributes addObject:self.view.mas_right];
+ if (attrs & MASAttributeTop) [attributes addObject:self.view.mas_top];
+ if (attrs & MASAttributeBottom) [attributes addObject:self.view.mas_bottom];
+ if (attrs & MASAttributeLeading) [attributes addObject:self.view.mas_leading];
+ if (attrs & MASAttributeTrailing) [attributes addObject:self.view.mas_trailing];
+ if (attrs & MASAttributeWidth) [attributes addObject:self.view.mas_width];
+ if (attrs & MASAttributeHeight) [attributes addObject:self.view.mas_height];
+ if (attrs & MASAttributeCenterX) [attributes addObject:self.view.mas_centerX];
+ if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY];
+ if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline];
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+ if (attrs & MASAttributeFirstBaseline) [attributes addObject:self.view.mas_firstBaseline];
+ if (attrs & MASAttributeLastBaseline) [attributes addObject:self.view.mas_lastBaseline];
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+ if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin];
+ if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin];
+ if (attrs & MASAttributeTopMargin) [attributes addObject:self.view.mas_topMargin];
+ if (attrs & MASAttributeBottomMargin) [attributes addObject:self.view.mas_bottomMargin];
+ if (attrs & MASAttributeLeadingMargin) [attributes addObject:self.view.mas_leadingMargin];
+ if (attrs & MASAttributeTrailingMargin) [attributes addObject:self.view.mas_trailingMargin];
+ if (attrs & MASAttributeCenterXWithinMargins) [attributes addObject:self.view.mas_centerXWithinMargins];
+ if (attrs & MASAttributeCenterYWithinMargins) [attributes addObject:self.view.mas_centerYWithinMargins];
+
+#endif
+
+ NSMutableArray *children = [NSMutableArray arrayWithCapacity:attributes.count];
+
+ for (MASViewAttribute *a in attributes) {
+ [children addObject:[[MASViewConstraint alloc] initWithFirstViewAttribute:a]];
+ }
+
+ MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children];
+ constraint.delegate = self;
+ [self.constraints addObject:constraint];
+ return constraint;
+}
+
+#pragma mark - standard Attributes
+
+- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
+ return [self constraint:nil addConstraintWithLayoutAttribute:layoutAttribute];
+}
+
+- (MASConstraint *)left {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeft];
+}
+
+- (MASConstraint *)top {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTop];
+}
+
+- (MASConstraint *)right {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRight];
+}
+
+- (MASConstraint *)bottom {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottom];
+}
+
+- (MASConstraint *)leading {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeading];
+}
+
+- (MASConstraint *)trailing {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailing];
+}
+
+- (MASConstraint *)width {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeWidth];
+}
+
+- (MASConstraint *)height {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeHeight];
+}
+
+- (MASConstraint *)centerX {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterX];
+}
+
+- (MASConstraint *)centerY {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterY];
+}
+
+- (MASConstraint *)baseline {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline];
+}
+
+- (MASConstraint *(^)(MASAttribute))attributes {
+ return ^(MASAttribute attrs){
+ return [self addConstraintWithAttributes:attrs];
+ };
+}
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+
+- (MASConstraint *)lastBaseline {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+- (MASConstraint *)leftMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
+}
+
+- (MASConstraint *)rightMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeRightMargin];
+}
+
+- (MASConstraint *)topMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTopMargin];
+}
+
+- (MASConstraint *)bottomMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBottomMargin];
+}
+
+- (MASConstraint *)leadingMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeadingMargin];
+}
+
+- (MASConstraint *)trailingMargin {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeTrailingMargin];
+}
+
+- (MASConstraint *)centerXWithinMargins {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterXWithinMargins];
+}
+
+- (MASConstraint *)centerYWithinMargins {
+ return [self addConstraintWithLayoutAttribute:NSLayoutAttributeCenterYWithinMargins];
+}
+
+#endif
+
+
+#pragma mark - composite Attributes
+
+- (MASConstraint *)edges {
+ return [self addConstraintWithAttributes:MASAttributeTop | MASAttributeLeft | MASAttributeRight | MASAttributeBottom];
+}
+
+- (MASConstraint *)size {
+ return [self addConstraintWithAttributes:MASAttributeWidth | MASAttributeHeight];
+}
+
+- (MASConstraint *)center {
+ return [self addConstraintWithAttributes:MASAttributeCenterX | MASAttributeCenterY];
+}
+
+#pragma mark - grouping
+
+- (MASConstraint *(^)(dispatch_block_t group))group {
+ return ^id(dispatch_block_t group) {
+ NSInteger previousCount = self.constraints.count;
+ group();
+
+ NSArray *children = [self.constraints subarrayWithRange:NSMakeRange(previousCount, self.constraints.count - previousCount)];
+ MASCompositeConstraint *constraint = [[MASCompositeConstraint alloc] initWithChildren:children];
+ constraint.delegate = self;
+ return constraint;
+ };
+}
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASLayoutConstraint.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASLayoutConstraint.h
new file mode 100755
index 0000000..699041c
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASLayoutConstraint.h
@@ -0,0 +1,22 @@
+//
+// MASLayoutConstraint.h
+// Masonry
+//
+// Created by Jonas Budelmann on 3/08/13.
+// Copyright (c) 2013 Jonas Budelmann. All rights reserved.
+//
+
+#import "MASUtilities.h"
+
+/**
+ * When you are debugging or printing the constraints attached to a view this subclass
+ * makes it easier to identify which constraints have been created via Masonry
+ */
+@interface MASLayoutConstraint : NSLayoutConstraint
+
+/**
+ * a key to associate with this constraint
+ */
+@property (nonatomic, strong) id mas_key;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASLayoutConstraint.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASLayoutConstraint.m
new file mode 100755
index 0000000..3483f02
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASLayoutConstraint.m
@@ -0,0 +1,13 @@
+//
+// MASLayoutConstraint.m
+// Masonry
+//
+// Created by Jonas Budelmann on 3/08/13.
+// Copyright (c) 2013 Jonas Budelmann. All rights reserved.
+//
+
+#import "MASLayoutConstraint.h"
+
+@implementation MASLayoutConstraint
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASUtilities.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASUtilities.h
new file mode 100755
index 0000000..1dbfd93
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASUtilities.h
@@ -0,0 +1,136 @@
+//
+// MASUtilities.h
+// Masonry
+//
+// Created by Jonas Budelmann on 19/08/13.
+// Copyright (c) 2013 Jonas Budelmann. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+
+#if TARGET_OS_IPHONE || TARGET_OS_TV
+
+ #import <UIKit/UIKit.h>
+ #define MAS_VIEW UIView
+ #define MAS_VIEW_CONTROLLER UIViewController
+ #define MASEdgeInsets UIEdgeInsets
+
+ typedef UILayoutPriority MASLayoutPriority;
+ static const MASLayoutPriority MASLayoutPriorityRequired = UILayoutPriorityRequired;
+ static const MASLayoutPriority MASLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh;
+ static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 500;
+ static const MASLayoutPriority MASLayoutPriorityDefaultLow = UILayoutPriorityDefaultLow;
+ static const MASLayoutPriority MASLayoutPriorityFittingSizeLevel = UILayoutPriorityFittingSizeLevel;
+
+#elif TARGET_OS_MAC
+
+ #import <AppKit/AppKit.h>
+ #define MAS_VIEW NSView
+ #define MASEdgeInsets NSEdgeInsets
+
+ typedef NSLayoutPriority MASLayoutPriority;
+ static const MASLayoutPriority MASLayoutPriorityRequired = NSLayoutPriorityRequired;
+ static const MASLayoutPriority MASLayoutPriorityDefaultHigh = NSLayoutPriorityDefaultHigh;
+ static const MASLayoutPriority MASLayoutPriorityDragThatCanResizeWindow = NSLayoutPriorityDragThatCanResizeWindow;
+ static const MASLayoutPriority MASLayoutPriorityDefaultMedium = 501;
+ static const MASLayoutPriority MASLayoutPriorityWindowSizeStayPut = NSLayoutPriorityWindowSizeStayPut;
+ static const MASLayoutPriority MASLayoutPriorityDragThatCannotResizeWindow = NSLayoutPriorityDragThatCannotResizeWindow;
+ static const MASLayoutPriority MASLayoutPriorityDefaultLow = NSLayoutPriorityDefaultLow;
+ static const MASLayoutPriority MASLayoutPriorityFittingSizeCompression = NSLayoutPriorityFittingSizeCompression;
+
+#endif
+
+/**
+ * Allows you to attach keys to objects matching the variable names passed.
+ *
+ * view1.mas_key = @"view1", view2.mas_key = @"view2";
+ *
+ * is equivalent to:
+ *
+ * MASAttachKeys(view1, view2);
+ */
+#define MASAttachKeys(...) \
+ { \
+ NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__); \
+ for (id key in keyPairs.allKeys) { \
+ id obj = keyPairs[key]; \
+ NSAssert([obj respondsToSelector:@selector(setMas_key:)], \
+ @"Cannot attach mas_key to %@", obj); \
+ [obj setMas_key:key]; \
+ } \
+ }
+
+/**
+ * Used to create object hashes
+ * Based on http://www.mikeash.com/pyblog/friday-qa-2010-06-18-implementing-equality-and-hashing.html
+ */
+#define MAS_NSUINT_BIT (CHAR_BIT * sizeof(NSUInteger))
+#define MAS_NSUINTROTATE(val, howmuch) ((((NSUInteger)val) << howmuch) | (((NSUInteger)val) >> (MAS_NSUINT_BIT - howmuch)))
+
+/**
+ * Given a scalar or struct value, wraps it in NSValue
+ * Based on EXPObjectify: https://github.com/specta/expecta
+ */
+static inline id _MASBoxValue(const char *type, ...) {
+ va_list v;
+ va_start(v, type);
+ id obj = nil;
+ if (strcmp(type, @encode(id)) == 0) {
+ id actual = va_arg(v, id);
+ obj = actual;
+ } else if (strcmp(type, @encode(CGPoint)) == 0) {
+ CGPoint actual = (CGPoint)va_arg(v, CGPoint);
+ obj = [NSValue value:&actual withObjCType:type];
+ } else if (strcmp(type, @encode(CGSize)) == 0) {
+ CGSize actual = (CGSize)va_arg(v, CGSize);
+ obj = [NSValue value:&actual withObjCType:type];
+ } else if (strcmp(type, @encode(MASEdgeInsets)) == 0) {
+ MASEdgeInsets actual = (MASEdgeInsets)va_arg(v, MASEdgeInsets);
+ obj = [NSValue value:&actual withObjCType:type];
+ } else if (strcmp(type, @encode(double)) == 0) {
+ double actual = (double)va_arg(v, double);
+ obj = [NSNumber numberWithDouble:actual];
+ } else if (strcmp(type, @encode(float)) == 0) {
+ float actual = (float)va_arg(v, double);
+ obj = [NSNumber numberWithFloat:actual];
+ } else if (strcmp(type, @encode(int)) == 0) {
+ int actual = (int)va_arg(v, int);
+ obj = [NSNumber numberWithInt:actual];
+ } else if (strcmp(type, @encode(long)) == 0) {
+ long actual = (long)va_arg(v, long);
+ obj = [NSNumber numberWithLong:actual];
+ } else if (strcmp(type, @encode(long long)) == 0) {
+ long long actual = (long long)va_arg(v, long long);
+ obj = [NSNumber numberWithLongLong:actual];
+ } else if (strcmp(type, @encode(short)) == 0) {
+ short actual = (short)va_arg(v, int);
+ obj = [NSNumber numberWithShort:actual];
+ } else if (strcmp(type, @encode(char)) == 0) {
+ char actual = (char)va_arg(v, int);
+ obj = [NSNumber numberWithChar:actual];
+ } else if (strcmp(type, @encode(bool)) == 0) {
+ bool actual = (bool)va_arg(v, int);
+ obj = [NSNumber numberWithBool:actual];
+ } else if (strcmp(type, @encode(unsigned char)) == 0) {
+ unsigned char actual = (unsigned char)va_arg(v, unsigned int);
+ obj = [NSNumber numberWithUnsignedChar:actual];
+ } else if (strcmp(type, @encode(unsigned int)) == 0) {
+ unsigned int actual = (unsigned int)va_arg(v, unsigned int);
+ obj = [NSNumber numberWithUnsignedInt:actual];
+ } else if (strcmp(type, @encode(unsigned long)) == 0) {
+ unsigned long actual = (unsigned long)va_arg(v, unsigned long);
+ obj = [NSNumber numberWithUnsignedLong:actual];
+ } else if (strcmp(type, @encode(unsigned long long)) == 0) {
+ unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long);
+ obj = [NSNumber numberWithUnsignedLongLong:actual];
+ } else if (strcmp(type, @encode(unsigned short)) == 0) {
+ unsigned short actual = (unsigned short)va_arg(v, unsigned int);
+ obj = [NSNumber numberWithUnsignedShort:actual];
+ }
+ va_end(v);
+ return obj;
+}
+
+#define MASBoxValue(value) _MASBoxValue(@encode(__typeof__((value))), (value))
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewAttribute.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewAttribute.h
new file mode 100755
index 0000000..601c25d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewAttribute.h
@@ -0,0 +1,49 @@
+//
+// MASViewAttribute.h
+// Masonry
+//
+// Created by Jonas Budelmann on 21/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASUtilities.h"
+
+/**
+ * An immutable tuple which stores the view and the related NSLayoutAttribute.
+ * Describes part of either the left or right hand side of a constraint equation
+ */
+@interface MASViewAttribute : NSObject
+
+/**
+ * The view which the reciever relates to. Can be nil if item is not a view.
+ */
+@property (nonatomic, weak, readonly) MAS_VIEW *view;
+
+/**
+ * The item which the reciever relates to.
+ */
+@property (nonatomic, weak, readonly) id item;
+
+/**
+ * The attribute which the reciever relates to
+ */
+@property (nonatomic, assign, readonly) NSLayoutAttribute layoutAttribute;
+
+/**
+ * Convenience initializer.
+ */
+- (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute;
+
+/**
+ * The designated initializer.
+ */
+- (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute;
+
+/**
+ * Determine whether the layoutAttribute is a size attribute
+ *
+ * @return YES if layoutAttribute is equal to NSLayoutAttributeWidth or NSLayoutAttributeHeight
+ */
+- (BOOL)isSizeAttribute;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewAttribute.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewAttribute.m
new file mode 100755
index 0000000..e573e8b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewAttribute.m
@@ -0,0 +1,46 @@
+//
+// MASViewAttribute.m
+// Masonry
+//
+// Created by Jonas Budelmann on 21/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASViewAttribute.h"
+
+@implementation MASViewAttribute
+
+- (id)initWithView:(MAS_VIEW *)view layoutAttribute:(NSLayoutAttribute)layoutAttribute {
+ self = [self initWithView:view item:view layoutAttribute:layoutAttribute];
+ return self;
+}
+
+- (id)initWithView:(MAS_VIEW *)view item:(id)item layoutAttribute:(NSLayoutAttribute)layoutAttribute {
+ self = [super init];
+ if (!self) return nil;
+
+ _view = view;
+ _item = item;
+ _layoutAttribute = layoutAttribute;
+
+ return self;
+}
+
+- (BOOL)isSizeAttribute {
+ return self.layoutAttribute == NSLayoutAttributeWidth
+ || self.layoutAttribute == NSLayoutAttributeHeight;
+}
+
+- (BOOL)isEqual:(MASViewAttribute *)viewAttribute {
+ if ([viewAttribute isKindOfClass:self.class]) {
+ return self.view == viewAttribute.view
+ && self.layoutAttribute == viewAttribute.layoutAttribute;
+ }
+ return [super isEqual:viewAttribute];
+}
+
+- (NSUInteger)hash {
+ return MAS_NSUINTROTATE([self.view hash], MAS_NSUINT_BIT / 2) ^ self.layoutAttribute;
+}
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewConstraint.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewConstraint.h
new file mode 100755
index 0000000..ec390d1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewConstraint.h
@@ -0,0 +1,48 @@
+//
+// MASViewConstraint.h
+// Masonry
+//
+// Created by Jonas Budelmann on 20/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASViewAttribute.h"
+#import "MASConstraint.h"
+#import "MASLayoutConstraint.h"
+#import "MASUtilities.h"
+
+/**
+ * A single constraint.
+ * Contains the attributes neccessary for creating a NSLayoutConstraint and adding it to the appropriate view
+ */
+@interface MASViewConstraint : MASConstraint <NSCopying>
+
+/**
+ * First item/view and first attribute of the NSLayoutConstraint
+ */
+@property (nonatomic, strong, readonly) MASViewAttribute *firstViewAttribute;
+
+/**
+ * Second item/view and second attribute of the NSLayoutConstraint
+ */
+@property (nonatomic, strong, readonly) MASViewAttribute *secondViewAttribute;
+
+/**
+ * initialises the MASViewConstraint with the first part of the equation
+ *
+ * @param firstViewAttribute view.mas_left, view.mas_width etc.
+ *
+ * @return a new view constraint
+ */
+- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute;
+
+/**
+ * Returns all MASViewConstraints installed with this view as a first item.
+ *
+ * @param view A view to retrieve constraints for.
+ *
+ * @return An array of MASViewConstraints.
+ */
++ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewConstraint.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewConstraint.m
new file mode 100755
index 0000000..173eec1
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/MASViewConstraint.m
@@ -0,0 +1,401 @@
+//
+// MASViewConstraint.m
+// Masonry
+//
+// Created by Jonas Budelmann on 20/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASViewConstraint.h"
+#import "MASConstraint+Private.h"
+#import "MASCompositeConstraint.h"
+#import "MASLayoutConstraint.h"
+#import "View+MASAdditions.h"
+#import <objc/runtime.h>
+
+@interface MAS_VIEW (MASConstraints)
+
+@property (nonatomic, readonly) NSMutableSet *mas_installedConstraints;
+
+@end
+
+@implementation MAS_VIEW (MASConstraints)
+
+static char kInstalledConstraintsKey;
+
+- (NSMutableSet *)mas_installedConstraints {
+ NSMutableSet *constraints = objc_getAssociatedObject(self, &kInstalledConstraintsKey);
+ if (!constraints) {
+ constraints = [NSMutableSet set];
+ objc_setAssociatedObject(self, &kInstalledConstraintsKey, constraints, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+ }
+ return constraints;
+}
+
+@end
+
+
+@interface MASViewConstraint ()
+
+@property (nonatomic, strong, readwrite) MASViewAttribute *secondViewAttribute;
+@property (nonatomic, weak) MAS_VIEW *installedView;
+@property (nonatomic, weak) MASLayoutConstraint *layoutConstraint;
+@property (nonatomic, assign) NSLayoutRelation layoutRelation;
+@property (nonatomic, assign) MASLayoutPriority layoutPriority;
+@property (nonatomic, assign) CGFloat layoutMultiplier;
+@property (nonatomic, assign) CGFloat layoutConstant;
+@property (nonatomic, assign) BOOL hasLayoutRelation;
+@property (nonatomic, strong) id mas_key;
+@property (nonatomic, assign) BOOL useAnimator;
+
+@end
+
+@implementation MASViewConstraint
+
+- (id)initWithFirstViewAttribute:(MASViewAttribute *)firstViewAttribute {
+ self = [super init];
+ if (!self) return nil;
+
+ _firstViewAttribute = firstViewAttribute;
+ self.layoutPriority = MASLayoutPriorityRequired;
+ self.layoutMultiplier = 1;
+
+ return self;
+}
+
+#pragma mark - NSCoping
+
+- (id)copyWithZone:(NSZone __unused *)zone {
+ MASViewConstraint *constraint = [[MASViewConstraint alloc] initWithFirstViewAttribute:self.firstViewAttribute];
+ constraint.layoutConstant = self.layoutConstant;
+ constraint.layoutRelation = self.layoutRelation;
+ constraint.layoutPriority = self.layoutPriority;
+ constraint.layoutMultiplier = self.layoutMultiplier;
+ constraint.delegate = self.delegate;
+ return constraint;
+}
+
+#pragma mark - Public
+
++ (NSArray *)installedConstraintsForView:(MAS_VIEW *)view {
+ return [view.mas_installedConstraints allObjects];
+}
+
+#pragma mark - Private
+
+- (void)setLayoutConstant:(CGFloat)layoutConstant {
+ _layoutConstant = layoutConstant;
+
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
+ if (self.useAnimator) {
+ [self.layoutConstraint.animator setConstant:layoutConstant];
+ } else {
+ self.layoutConstraint.constant = layoutConstant;
+ }
+#else
+ self.layoutConstraint.constant = layoutConstant;
+#endif
+}
+
+- (void)setLayoutRelation:(NSLayoutRelation)layoutRelation {
+ _layoutRelation = layoutRelation;
+ self.hasLayoutRelation = YES;
+}
+
+- (BOOL)supportsActiveProperty {
+ return [self.layoutConstraint respondsToSelector:@selector(isActive)];
+}
+
+- (BOOL)isActive {
+ BOOL active = YES;
+ if ([self supportsActiveProperty]) {
+ active = [self.layoutConstraint isActive];
+ }
+
+ return active;
+}
+
+- (BOOL)hasBeenInstalled {
+ return (self.layoutConstraint != nil) && [self isActive];
+}
+
+- (void)setSecondViewAttribute:(id)secondViewAttribute {
+ if ([secondViewAttribute isKindOfClass:NSValue.class]) {
+ [self setLayoutConstantWithValue:secondViewAttribute];
+ } else if ([secondViewAttribute isKindOfClass:MAS_VIEW.class]) {
+ _secondViewAttribute = [[MASViewAttribute alloc] initWithView:secondViewAttribute layoutAttribute:self.firstViewAttribute.layoutAttribute];
+ } else if ([secondViewAttribute isKindOfClass:MASViewAttribute.class]) {
+ _secondViewAttribute = secondViewAttribute;
+ } else {
+ NSAssert(NO, @"attempting to add unsupported attribute: %@", secondViewAttribute);
+ }
+}
+
+#pragma mark - NSLayoutConstraint multiplier proxies
+
+- (MASConstraint * (^)(CGFloat))multipliedBy {
+ return ^id(CGFloat multiplier) {
+ NSAssert(!self.hasBeenInstalled,
+ @"Cannot modify constraint multiplier after it has been installed");
+
+ self.layoutMultiplier = multiplier;
+ return self;
+ };
+}
+
+
+- (MASConstraint * (^)(CGFloat))dividedBy {
+ return ^id(CGFloat divider) {
+ NSAssert(!self.hasBeenInstalled,
+ @"Cannot modify constraint multiplier after it has been installed");
+
+ self.layoutMultiplier = 1.0/divider;
+ return self;
+ };
+}
+
+#pragma mark - MASLayoutPriority proxy
+
+- (MASConstraint * (^)(MASLayoutPriority))priority {
+ return ^id(MASLayoutPriority priority) {
+ NSAssert(!self.hasBeenInstalled,
+ @"Cannot modify constraint priority after it has been installed");
+
+ self.layoutPriority = priority;
+ return self;
+ };
+}
+
+#pragma mark - NSLayoutRelation proxy
+
+- (MASConstraint * (^)(id, NSLayoutRelation))equalToWithRelation {
+ return ^id(id attribute, NSLayoutRelation relation) {
+ if ([attribute isKindOfClass:NSArray.class]) {
+ NSAssert(!self.hasLayoutRelation, @"Redefinition of constraint relation");
+ NSMutableArray *children = NSMutableArray.new;
+ for (id attr in attribute) {
+ MASViewConstraint *viewConstraint = [self copy];
+ viewConstraint.layoutRelation = relation;
+ viewConstraint.secondViewAttribute = attr;
+ [children addObject:viewConstraint];
+ }
+ MASCompositeConstraint *compositeConstraint = [[MASCompositeConstraint alloc] initWithChildren:children];
+ compositeConstraint.delegate = self.delegate;
+ [self.delegate constraint:self shouldBeReplacedWithConstraint:compositeConstraint];
+ return compositeConstraint;
+ } else {
+ NSAssert(!self.hasLayoutRelation || self.layoutRelation == relation && [attribute isKindOfClass:NSValue.class], @"Redefinition of constraint relation");
+ self.layoutRelation = relation;
+ self.secondViewAttribute = attribute;
+ return self;
+ }
+ };
+}
+
+#pragma mark - Semantic properties
+
+- (MASConstraint *)with {
+ return self;
+}
+
+- (MASConstraint *)and {
+ return self;
+}
+
+#pragma mark - attribute chaining
+
+- (MASConstraint *)addConstraintWithLayoutAttribute:(NSLayoutAttribute)layoutAttribute {
+ NSAssert(!self.hasLayoutRelation, @"Attributes should be chained before defining the constraint relation");
+
+ return [self.delegate constraint:self addConstraintWithLayoutAttribute:layoutAttribute];
+}
+
+#pragma mark - Animator proxy
+
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
+
+- (MASConstraint *)animator {
+ self.useAnimator = YES;
+ return self;
+}
+
+#endif
+
+#pragma mark - debug helpers
+
+- (MASConstraint * (^)(id))key {
+ return ^id(id key) {
+ self.mas_key = key;
+ return self;
+ };
+}
+
+#pragma mark - NSLayoutConstraint constant setters
+
+- (void)setInsets:(MASEdgeInsets)insets {
+ NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute;
+ switch (layoutAttribute) {
+ case NSLayoutAttributeLeft:
+ case NSLayoutAttributeLeading:
+ self.layoutConstant = insets.left;
+ break;
+ case NSLayoutAttributeTop:
+ self.layoutConstant = insets.top;
+ break;
+ case NSLayoutAttributeBottom:
+ self.layoutConstant = -insets.bottom;
+ break;
+ case NSLayoutAttributeRight:
+ case NSLayoutAttributeTrailing:
+ self.layoutConstant = -insets.right;
+ break;
+ default:
+ break;
+ }
+}
+
+- (void)setInset:(CGFloat)inset {
+ [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}];
+}
+
+- (void)setOffset:(CGFloat)offset {
+ self.layoutConstant = offset;
+}
+
+- (void)setSizeOffset:(CGSize)sizeOffset {
+ NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute;
+ switch (layoutAttribute) {
+ case NSLayoutAttributeWidth:
+ self.layoutConstant = sizeOffset.width;
+ break;
+ case NSLayoutAttributeHeight:
+ self.layoutConstant = sizeOffset.height;
+ break;
+ default:
+ break;
+ }
+}
+
+- (void)setCenterOffset:(CGPoint)centerOffset {
+ NSLayoutAttribute layoutAttribute = self.firstViewAttribute.layoutAttribute;
+ switch (layoutAttribute) {
+ case NSLayoutAttributeCenterX:
+ self.layoutConstant = centerOffset.x;
+ break;
+ case NSLayoutAttributeCenterY:
+ self.layoutConstant = centerOffset.y;
+ break;
+ default:
+ break;
+ }
+}
+
+#pragma mark - MASConstraint
+
+- (void)activate {
+ [self install];
+}
+
+- (void)deactivate {
+ [self uninstall];
+}
+
+- (void)install {
+ if (self.hasBeenInstalled) {
+ return;
+ }
+
+ if ([self supportsActiveProperty] && self.layoutConstraint) {
+ self.layoutConstraint.active = YES;
+ [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
+ return;
+ }
+
+ MAS_VIEW *firstLayoutItem = self.firstViewAttribute.item;
+ NSLayoutAttribute firstLayoutAttribute = self.firstViewAttribute.layoutAttribute;
+ MAS_VIEW *secondLayoutItem = self.secondViewAttribute.item;
+ NSLayoutAttribute secondLayoutAttribute = self.secondViewAttribute.layoutAttribute;
+
+ // alignment attributes must have a secondViewAttribute
+ // therefore we assume that is refering to superview
+ // eg make.left.equalTo(@10)
+ if (!self.firstViewAttribute.isSizeAttribute && !self.secondViewAttribute) {
+ secondLayoutItem = self.firstViewAttribute.view.superview;
+ secondLayoutAttribute = firstLayoutAttribute;
+ }
+
+ MASLayoutConstraint *layoutConstraint
+ = [MASLayoutConstraint constraintWithItem:firstLayoutItem
+ attribute:firstLayoutAttribute
+ relatedBy:self.layoutRelation
+ toItem:secondLayoutItem
+ attribute:secondLayoutAttribute
+ multiplier:self.layoutMultiplier
+ constant:self.layoutConstant];
+
+ layoutConstraint.priority = self.layoutPriority;
+ layoutConstraint.mas_key = self.mas_key;
+
+ if (self.secondViewAttribute.view) {
+ MAS_VIEW *closestCommonSuperview = [self.firstViewAttribute.view mas_closestCommonSuperview:self.secondViewAttribute.view];
+ NSAssert(closestCommonSuperview,
+ @"couldn't find a common superview for %@ and %@",
+ self.firstViewAttribute.view, self.secondViewAttribute.view);
+ self.installedView = closestCommonSuperview;
+ } else if (self.firstViewAttribute.isSizeAttribute) {
+ self.installedView = self.firstViewAttribute.view;
+ } else {
+ self.installedView = self.firstViewAttribute.view.superview;
+ }
+
+
+ MASLayoutConstraint *existingConstraint = nil;
+ if (self.updateExisting) {
+ existingConstraint = [self layoutConstraintSimilarTo:layoutConstraint];
+ }
+ if (existingConstraint) {
+ // just update the constant
+ existingConstraint.constant = layoutConstraint.constant;
+ self.layoutConstraint = existingConstraint;
+ } else {
+ [self.installedView addConstraint:layoutConstraint];
+ self.layoutConstraint = layoutConstraint;
+ [firstLayoutItem.mas_installedConstraints addObject:self];
+ }
+}
+
+- (MASLayoutConstraint *)layoutConstraintSimilarTo:(MASLayoutConstraint *)layoutConstraint {
+ // check if any constraints are the same apart from the only mutable property constant
+
+ // go through constraints in reverse as we do not want to match auto-resizing or interface builder constraints
+ // and they are likely to be added first.
+ for (NSLayoutConstraint *existingConstraint in self.installedView.constraints.reverseObjectEnumerator) {
+ if (![existingConstraint isKindOfClass:MASLayoutConstraint.class]) continue;
+ if (existingConstraint.firstItem != layoutConstraint.firstItem) continue;
+ if (existingConstraint.secondItem != layoutConstraint.secondItem) continue;
+ if (existingConstraint.firstAttribute != layoutConstraint.firstAttribute) continue;
+ if (existingConstraint.secondAttribute != layoutConstraint.secondAttribute) continue;
+ if (existingConstraint.relation != layoutConstraint.relation) continue;
+ if (existingConstraint.multiplier != layoutConstraint.multiplier) continue;
+ if (existingConstraint.priority != layoutConstraint.priority) continue;
+
+ return (id)existingConstraint;
+ }
+ return nil;
+}
+
+- (void)uninstall {
+ if ([self supportsActiveProperty]) {
+ self.layoutConstraint.active = NO;
+ [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
+ return;
+ }
+
+ [self.installedView removeConstraint:self.layoutConstraint];
+ self.layoutConstraint = nil;
+ self.installedView = nil;
+
+ [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
+}
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/Masonry.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/Masonry.h
new file mode 100755
index 0000000..d1bd579
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/Masonry.h
@@ -0,0 +1,29 @@
+//
+// Masonry.h
+// Masonry
+//
+// Created by Jonas Budelmann on 20/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for Masonry.
+FOUNDATION_EXPORT double MasonryVersionNumber;
+
+//! Project version string for Masonry.
+FOUNDATION_EXPORT const unsigned char MasonryVersionString[];
+
+#import "MASUtilities.h"
+#import "View+MASAdditions.h"
+#import "View+MASShorthandAdditions.h"
+#import "ViewController+MASAdditions.h"
+#import "NSArray+MASAdditions.h"
+#import "NSArray+MASShorthandAdditions.h"
+#import "MASConstraint.h"
+#import "MASCompositeConstraint.h"
+#import "MASViewAttribute.h"
+#import "MASViewConstraint.h"
+#import "MASConstraintMaker.h"
+#import "MASLayoutConstraint.h"
+#import "NSLayoutConstraint+MASDebugAdditions.h"
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASAdditions.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASAdditions.h
new file mode 100755
index 0000000..587618d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASAdditions.h
@@ -0,0 +1,72 @@
+//
+// NSArray+MASAdditions.h
+//
+//
+// Created by Daniel Hammond on 11/26/13.
+//
+//
+
+#import "MASUtilities.h"
+#import "MASConstraintMaker.h"
+#import "MASViewAttribute.h"
+
+typedef NS_ENUM(NSUInteger, MASAxisType) {
+ MASAxisTypeHorizontal,
+ MASAxisTypeVertical
+};
+
+@interface NSArray (MASAdditions)
+
+/**
+ * Creates a MASConstraintMaker with each view in the callee.
+ * Any constraints defined are added to the view or the appropriate superview once the block has finished executing on each view
+ *
+ * @param block scope within which you can build up the constraints which you wish to apply to each view.
+ *
+ * @return Array of created MASConstraints
+ */
+- (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
+
+/**
+ * Creates a MASConstraintMaker with each view in the callee.
+ * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view.
+ * If an existing constraint exists then it will be updated instead.
+ *
+ * @param block scope within which you can build up the constraints which you wish to apply to each view.
+ *
+ * @return Array of created/updated MASConstraints
+ */
+- (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
+
+/**
+ * Creates a MASConstraintMaker with each view in the callee.
+ * Any constraints defined are added to each view or the appropriate superview once the block has finished executing on each view.
+ * All constraints previously installed for the views will be removed.
+ *
+ * @param block scope within which you can build up the constraints which you wish to apply to each view.
+ *
+ * @return Array of created/updated MASConstraints
+ */
+- (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
+
+/**
+ * distribute with fixed spacing
+ *
+ * @param axisType which axis to distribute items along
+ * @param fixedSpacing the spacing between each item
+ * @param leadSpacing the spacing before the first item and the container
+ * @param tailSpacing the spacing after the last item and the container
+ */
+- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
+
+/**
+ * distribute with fixed item size
+ *
+ * @param axisType which axis to distribute items along
+ * @param fixedItemLength the fixed length of each item
+ * @param leadSpacing the spacing before the first item and the container
+ * @param tailSpacing the spacing after the last item and the container
+ */
+- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASAdditions.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASAdditions.m
new file mode 100755
index 0000000..831d8cd
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASAdditions.m
@@ -0,0 +1,162 @@
+//
+// NSArray+MASAdditions.m
+//
+//
+// Created by Daniel Hammond on 11/26/13.
+//
+//
+
+#import "NSArray+MASAdditions.h"
+#import "View+MASAdditions.h"
+
+@implementation NSArray (MASAdditions)
+
+- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block {
+ NSMutableArray *constraints = [NSMutableArray array];
+ for (MAS_VIEW *view in self) {
+ NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views");
+ [constraints addObjectsFromArray:[view mas_makeConstraints:block]];
+ }
+ return constraints;
+}
+
+- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block {
+ NSMutableArray *constraints = [NSMutableArray array];
+ for (MAS_VIEW *view in self) {
+ NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views");
+ [constraints addObjectsFromArray:[view mas_updateConstraints:block]];
+ }
+ return constraints;
+}
+
+- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block {
+ NSMutableArray *constraints = [NSMutableArray array];
+ for (MAS_VIEW *view in self) {
+ NSAssert([view isKindOfClass:[MAS_VIEW class]], @"All objects in the array must be views");
+ [constraints addObjectsFromArray:[view mas_remakeConstraints:block]];
+ }
+ return constraints;
+}
+
+- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedSpacing:(CGFloat)fixedSpacing leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing {
+ if (self.count < 2) {
+ NSAssert(self.count>1,@"views to distribute need to bigger than one");
+ return;
+ }
+
+ MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews];
+ if (axisType == MASAxisTypeHorizontal) {
+ MAS_VIEW *prev;
+ for (int i = 0; i < self.count; i++) {
+ MAS_VIEW *v = self[i];
+ [v mas_makeConstraints:^(MASConstraintMaker *make) {
+ if (prev) {
+ make.width.equalTo(prev);
+ make.left.equalTo(prev.mas_right).offset(fixedSpacing);
+ if (i == self.count - 1) {//last one
+ make.right.equalTo(tempSuperView).offset(-tailSpacing);
+ }
+ }
+ else {//first one
+ make.left.equalTo(tempSuperView).offset(leadSpacing);
+ }
+
+ }];
+ prev = v;
+ }
+ }
+ else {
+ MAS_VIEW *prev;
+ for (int i = 0; i < self.count; i++) {
+ MAS_VIEW *v = self[i];
+ [v mas_makeConstraints:^(MASConstraintMaker *make) {
+ if (prev) {
+ make.height.equalTo(prev);
+ make.top.equalTo(prev.mas_bottom).offset(fixedSpacing);
+ if (i == self.count - 1) {//last one
+ make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
+ }
+ }
+ else {//first one
+ make.top.equalTo(tempSuperView).offset(leadSpacing);
+ }
+
+ }];
+ prev = v;
+ }
+ }
+}
+
+- (void)mas_distributeViewsAlongAxis:(MASAxisType)axisType withFixedItemLength:(CGFloat)fixedItemLength leadSpacing:(CGFloat)leadSpacing tailSpacing:(CGFloat)tailSpacing {
+ if (self.count < 2) {
+ NSAssert(self.count>1,@"views to distribute need to bigger than one");
+ return;
+ }
+
+ MAS_VIEW *tempSuperView = [self mas_commonSuperviewOfViews];
+ if (axisType == MASAxisTypeHorizontal) {
+ MAS_VIEW *prev;
+ for (int i = 0; i < self.count; i++) {
+ MAS_VIEW *v = self[i];
+ [v mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.width.equalTo(@(fixedItemLength));
+ if (prev) {
+ if (i == self.count - 1) {//last one
+ make.right.equalTo(tempSuperView).offset(-tailSpacing);
+ }
+ else {
+ CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
+ make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
+ }
+ }
+ else {//first one
+ make.left.equalTo(tempSuperView).offset(leadSpacing);
+ }
+ }];
+ prev = v;
+ }
+ }
+ else {
+ MAS_VIEW *prev;
+ for (int i = 0; i < self.count; i++) {
+ MAS_VIEW *v = self[i];
+ [v mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.height.equalTo(@(fixedItemLength));
+ if (prev) {
+ if (i == self.count - 1) {//last one
+ make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
+ }
+ else {
+ CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
+ make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
+ }
+ }
+ else {//first one
+ make.top.equalTo(tempSuperView).offset(leadSpacing);
+ }
+ }];
+ prev = v;
+ }
+ }
+}
+
+- (MAS_VIEW *)mas_commonSuperviewOfViews
+{
+ MAS_VIEW *commonSuperview = nil;
+ MAS_VIEW *previousView = nil;
+ for (id object in self) {
+ if ([object isKindOfClass:[MAS_VIEW class]]) {
+ MAS_VIEW *view = (MAS_VIEW *)object;
+ if (previousView) {
+ commonSuperview = [view mas_closestCommonSuperview:commonSuperview];
+ } else {
+ commonSuperview = view;
+ }
+ previousView = view;
+ }
+ }
+ NSAssert(commonSuperview, @"Can't constrain views that do not share a common superview. Make sure that all the views in this array have been added into the same view hierarchy.");
+ return commonSuperview;
+}
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASShorthandAdditions.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASShorthandAdditions.h
new file mode 100755
index 0000000..8b47369
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSArray+MASShorthandAdditions.h
@@ -0,0 +1,41 @@
+//
+// NSArray+MASShorthandAdditions.h
+// Masonry
+//
+// Created by Jonas Budelmann on 22/07/13.
+// Copyright (c) 2013 Jonas Budelmann. All rights reserved.
+//
+
+#import "NSArray+MASAdditions.h"
+
+#ifdef MAS_SHORTHAND
+
+/**
+ * Shorthand array additions without the 'mas_' prefixes,
+ * only enabled if MAS_SHORTHAND is defined
+ */
+@interface NSArray (MASShorthandAdditions)
+
+- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block;
+
+@end
+
+@implementation NSArray (MASShorthandAdditions)
+
+- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block {
+ return [self mas_makeConstraints:block];
+}
+
+- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block {
+ return [self mas_updateConstraints:block];
+}
+
+- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block {
+ return [self mas_remakeConstraints:block];
+}
+
+@end
+
+#endif
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSLayoutConstraint+MASDebugAdditions.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSLayoutConstraint+MASDebugAdditions.h
new file mode 100755
index 0000000..1279b4f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSLayoutConstraint+MASDebugAdditions.h
@@ -0,0 +1,16 @@
+//
+// NSLayoutConstraint+MASDebugAdditions.h
+// Masonry
+//
+// Created by Jonas Budelmann on 3/08/13.
+// Copyright (c) 2013 Jonas Budelmann. All rights reserved.
+//
+
+#import "MASUtilities.h"
+
+/**
+ * makes debug and log output of NSLayoutConstraints more readable
+ */
+@interface NSLayoutConstraint (MASDebugAdditions)
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSLayoutConstraint+MASDebugAdditions.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSLayoutConstraint+MASDebugAdditions.m
new file mode 100755
index 0000000..ab539a2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/NSLayoutConstraint+MASDebugAdditions.m
@@ -0,0 +1,146 @@
+//
+// NSLayoutConstraint+MASDebugAdditions.m
+// Masonry
+//
+// Created by Jonas Budelmann on 3/08/13.
+// Copyright (c) 2013 Jonas Budelmann. All rights reserved.
+//
+
+#import "NSLayoutConstraint+MASDebugAdditions.h"
+#import "MASConstraint.h"
+#import "MASLayoutConstraint.h"
+
+@implementation NSLayoutConstraint (MASDebugAdditions)
+
+#pragma mark - description maps
+
++ (NSDictionary *)layoutRelationDescriptionsByValue {
+ static dispatch_once_t once;
+ static NSDictionary *descriptionMap;
+ dispatch_once(&once, ^{
+ descriptionMap = @{
+ @(NSLayoutRelationEqual) : @"==",
+ @(NSLayoutRelationGreaterThanOrEqual) : @">=",
+ @(NSLayoutRelationLessThanOrEqual) : @"<=",
+ };
+ });
+ return descriptionMap;
+}
+
++ (NSDictionary *)layoutAttributeDescriptionsByValue {
+ static dispatch_once_t once;
+ static NSDictionary *descriptionMap;
+ dispatch_once(&once, ^{
+ descriptionMap = @{
+ @(NSLayoutAttributeTop) : @"top",
+ @(NSLayoutAttributeLeft) : @"left",
+ @(NSLayoutAttributeBottom) : @"bottom",
+ @(NSLayoutAttributeRight) : @"right",
+ @(NSLayoutAttributeLeading) : @"leading",
+ @(NSLayoutAttributeTrailing) : @"trailing",
+ @(NSLayoutAttributeWidth) : @"width",
+ @(NSLayoutAttributeHeight) : @"height",
+ @(NSLayoutAttributeCenterX) : @"centerX",
+ @(NSLayoutAttributeCenterY) : @"centerY",
+ @(NSLayoutAttributeBaseline) : @"baseline",
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+ @(NSLayoutAttributeFirstBaseline) : @"firstBaseline",
+ @(NSLayoutAttributeLastBaseline) : @"lastBaseline",
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+ @(NSLayoutAttributeLeftMargin) : @"leftMargin",
+ @(NSLayoutAttributeRightMargin) : @"rightMargin",
+ @(NSLayoutAttributeTopMargin) : @"topMargin",
+ @(NSLayoutAttributeBottomMargin) : @"bottomMargin",
+ @(NSLayoutAttributeLeadingMargin) : @"leadingMargin",
+ @(NSLayoutAttributeTrailingMargin) : @"trailingMargin",
+ @(NSLayoutAttributeCenterXWithinMargins) : @"centerXWithinMargins",
+ @(NSLayoutAttributeCenterYWithinMargins) : @"centerYWithinMargins",
+#endif
+
+ };
+
+ });
+ return descriptionMap;
+}
+
+
++ (NSDictionary *)layoutPriorityDescriptionsByValue {
+ static dispatch_once_t once;
+ static NSDictionary *descriptionMap;
+ dispatch_once(&once, ^{
+#if TARGET_OS_IPHONE || TARGET_OS_TV
+ descriptionMap = @{
+ @(MASLayoutPriorityDefaultHigh) : @"high",
+ @(MASLayoutPriorityDefaultLow) : @"low",
+ @(MASLayoutPriorityDefaultMedium) : @"medium",
+ @(MASLayoutPriorityRequired) : @"required",
+ @(MASLayoutPriorityFittingSizeLevel) : @"fitting size",
+ };
+#elif TARGET_OS_MAC
+ descriptionMap = @{
+ @(MASLayoutPriorityDefaultHigh) : @"high",
+ @(MASLayoutPriorityDragThatCanResizeWindow) : @"drag can resize window",
+ @(MASLayoutPriorityDefaultMedium) : @"medium",
+ @(MASLayoutPriorityWindowSizeStayPut) : @"window size stay put",
+ @(MASLayoutPriorityDragThatCannotResizeWindow) : @"drag cannot resize window",
+ @(MASLayoutPriorityDefaultLow) : @"low",
+ @(MASLayoutPriorityFittingSizeCompression) : @"fitting size",
+ @(MASLayoutPriorityRequired) : @"required",
+ };
+#endif
+ });
+ return descriptionMap;
+}
+
+#pragma mark - description override
+
++ (NSString *)descriptionForObject:(id)obj {
+ if ([obj respondsToSelector:@selector(mas_key)] && [obj mas_key]) {
+ return [NSString stringWithFormat:@"%@:%@", [obj class], [obj mas_key]];
+ }
+ return [NSString stringWithFormat:@"%@:%p", [obj class], obj];
+}
+
+- (NSString *)description {
+ NSMutableString *description = [[NSMutableString alloc] initWithString:@"<"];
+
+ [description appendString:[self.class descriptionForObject:self]];
+
+ [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]];
+ if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) {
+ [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]];
+ }
+
+ [description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]];
+
+ if (self.secondItem) {
+ [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]];
+ }
+ if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) {
+ [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]];
+ }
+
+ if (self.multiplier != 1) {
+ [description appendFormat:@" * %g", self.multiplier];
+ }
+
+ if (self.secondAttribute == NSLayoutAttributeNotAnAttribute) {
+ [description appendFormat:@" %g", self.constant];
+ } else {
+ if (self.constant) {
+ [description appendFormat:@" %@ %g", (self.constant < 0 ? @"-" : @"+"), ABS(self.constant)];
+ }
+ }
+
+ if (self.priority != MASLayoutPriorityRequired) {
+ [description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
+ }
+
+ [description appendString:@">"];
+ return description;
+}
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASAdditions.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASAdditions.h
new file mode 100755
index 0000000..f7343d2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASAdditions.h
@@ -0,0 +1,111 @@
+//
+// UIView+MASAdditions.h
+// Masonry
+//
+// Created by Jonas Budelmann on 20/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "MASUtilities.h"
+#import "MASConstraintMaker.h"
+#import "MASViewAttribute.h"
+
+/**
+ * Provides constraint maker block
+ * and convience methods for creating MASViewAttribute which are view + NSLayoutAttribute pairs
+ */
+@interface MAS_VIEW (MASAdditions)
+
+/**
+ * following properties return a new MASViewAttribute with current view and appropriate NSLayoutAttribute
+ */
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_left;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_top;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_right;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottom;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_leading;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailing;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_width;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_height;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerX;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerY;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline;
+@property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr);
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_firstBaseline;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_topMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_leadingMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
+
+#endif
+
+/**
+ * a key to associate with this view
+ */
+@property (nonatomic, strong) id mas_key;
+
+/**
+ * Finds the closest common superview between this view and another view
+ *
+ * @param view other view
+ *
+ * @return returns nil if common superview could not be found
+ */
+- (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view;
+
+/**
+ * Creates a MASConstraintMaker with the callee view.
+ * Any constraints defined are added to the view or the appropriate superview once the block has finished executing
+ *
+ * @param block scope within which you can build up the constraints which you wish to apply to the view.
+ *
+ * @return Array of created MASConstraints
+ */
+- (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
+
+/**
+ * Creates a MASConstraintMaker with the callee view.
+ * Any constraints defined are added to the view or the appropriate superview once the block has finished executing.
+ * If an existing constraint exists then it will be updated instead.
+ *
+ * @param block scope within which you can build up the constraints which you wish to apply to the view.
+ *
+ * @return Array of created/updated MASConstraints
+ */
+- (NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
+
+/**
+ * Creates a MASConstraintMaker with the callee view.
+ * Any constraints defined are added to the view or the appropriate superview once the block has finished executing.
+ * All constraints previously installed for the view will be removed.
+ *
+ * @param block scope within which you can build up the constraints which you wish to apply to the view.
+ *
+ * @return Array of created/updated MASConstraints
+ */
+- (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASAdditions.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASAdditions.m
new file mode 100755
index 0000000..4fa07b4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASAdditions.m
@@ -0,0 +1,186 @@
+//
+// UIView+MASAdditions.m
+// Masonry
+//
+// Created by Jonas Budelmann on 20/07/13.
+// Copyright (c) 2013 cloudling. All rights reserved.
+//
+
+#import "View+MASAdditions.h"
+#import <objc/runtime.h>
+
+@implementation MAS_VIEW (MASAdditions)
+
+- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *))block {
+ self.translatesAutoresizingMaskIntoConstraints = NO;
+ MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
+ block(constraintMaker);
+ return [constraintMaker install];
+}
+
+- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *))block {
+ self.translatesAutoresizingMaskIntoConstraints = NO;
+ MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
+ constraintMaker.updateExisting = YES;
+ block(constraintMaker);
+ return [constraintMaker install];
+}
+
+- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block {
+ self.translatesAutoresizingMaskIntoConstraints = NO;
+ MASConstraintMaker *constraintMaker = [[MASConstraintMaker alloc] initWithView:self];
+ constraintMaker.removeExisting = YES;
+ block(constraintMaker);
+ return [constraintMaker install];
+}
+
+#pragma mark - NSLayoutAttribute properties
+
+- (MASViewAttribute *)mas_left {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeft];
+}
+
+- (MASViewAttribute *)mas_top {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTop];
+}
+
+- (MASViewAttribute *)mas_right {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeRight];
+}
+
+- (MASViewAttribute *)mas_bottom {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBottom];
+}
+
+- (MASViewAttribute *)mas_leading {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeading];
+}
+
+- (MASViewAttribute *)mas_trailing {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTrailing];
+}
+
+- (MASViewAttribute *)mas_width {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeWidth];
+}
+
+- (MASViewAttribute *)mas_height {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeHeight];
+}
+
+- (MASViewAttribute *)mas_centerX {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterX];
+}
+
+- (MASViewAttribute *)mas_centerY {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterY];
+}
+
+- (MASViewAttribute *)mas_baseline {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBaseline];
+}
+
+- (MASViewAttribute *(^)(NSLayoutAttribute))mas_attribute
+{
+ return ^(NSLayoutAttribute attr) {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:attr];
+ };
+}
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASViewAttribute *)mas_firstBaseline {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+- (MASViewAttribute *)mas_lastBaseline {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+- (MASViewAttribute *)mas_leftMargin {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin];
+}
+
+- (MASViewAttribute *)mas_rightMargin {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeRightMargin];
+}
+
+- (MASViewAttribute *)mas_topMargin {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTopMargin];
+}
+
+- (MASViewAttribute *)mas_bottomMargin {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeBottomMargin];
+}
+
+- (MASViewAttribute *)mas_leadingMargin {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeadingMargin];
+}
+
+- (MASViewAttribute *)mas_trailingMargin {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeTrailingMargin];
+}
+
+- (MASViewAttribute *)mas_centerXWithinMargins {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterXWithinMargins];
+}
+
+- (MASViewAttribute *)mas_centerYWithinMargins {
+ return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeCenterYWithinMargins];
+}
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+- (MASViewAttribute *)mas_safeAreaLayoutGuide {
+ return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideTop {
+ return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeTop];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideBottom {
+ return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideLeft {
+ return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeLeft];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideRight {
+ return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeRight];
+}
+
+#endif
+
+#pragma mark - associated properties
+
+- (id)mas_key {
+ return objc_getAssociatedObject(self, @selector(mas_key));
+}
+
+- (void)setMas_key:(id)key {
+ objc_setAssociatedObject(self, @selector(mas_key), key, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
+#pragma mark - heirachy
+
+- (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view {
+ MAS_VIEW *closestCommonSuperview = nil;
+
+ MAS_VIEW *secondViewSuperview = view;
+ while (!closestCommonSuperview && secondViewSuperview) {
+ MAS_VIEW *firstViewSuperview = self;
+ while (!closestCommonSuperview && firstViewSuperview) {
+ if (secondViewSuperview == firstViewSuperview) {
+ closestCommonSuperview = secondViewSuperview;
+ }
+ firstViewSuperview = firstViewSuperview.superview;
+ }
+ secondViewSuperview = secondViewSuperview.superview;
+ }
+ return closestCommonSuperview;
+}
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASShorthandAdditions.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASShorthandAdditions.h
new file mode 100755
index 0000000..1c19a94
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/View+MASShorthandAdditions.h
@@ -0,0 +1,133 @@
+//
+// UIView+MASShorthandAdditions.h
+// Masonry
+//
+// Created by Jonas Budelmann on 22/07/13.
+// Copyright (c) 2013 Jonas Budelmann. All rights reserved.
+//
+
+#import "View+MASAdditions.h"
+
+#ifdef MAS_SHORTHAND
+
+/**
+ * Shorthand view additions without the 'mas_' prefixes,
+ * only enabled if MAS_SHORTHAND is defined
+ */
+@interface MAS_VIEW (MASShorthandAdditions)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *left;
+@property (nonatomic, strong, readonly) MASViewAttribute *top;
+@property (nonatomic, strong, readonly) MASViewAttribute *right;
+@property (nonatomic, strong, readonly) MASViewAttribute *bottom;
+@property (nonatomic, strong, readonly) MASViewAttribute *leading;
+@property (nonatomic, strong, readonly) MASViewAttribute *trailing;
+@property (nonatomic, strong, readonly) MASViewAttribute *width;
+@property (nonatomic, strong, readonly) MASViewAttribute *height;
+@property (nonatomic, strong, readonly) MASViewAttribute *centerX;
+@property (nonatomic, strong, readonly) MASViewAttribute *centerY;
+@property (nonatomic, strong, readonly) MASViewAttribute *baseline;
+@property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr);
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *firstBaseline;
+@property (nonatomic, strong, readonly) MASViewAttribute *lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *leftMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *rightMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *topMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *bottomMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *leadingMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin;
+@property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins;
+@property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
+
+#endif
+
+- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *make))block;
+
+@end
+
+#define MAS_ATTR_FORWARD(attr) \
+- (MASViewAttribute *)attr { \
+ return [self mas_##attr]; \
+}
+
+@implementation MAS_VIEW (MASShorthandAdditions)
+
+MAS_ATTR_FORWARD(top);
+MAS_ATTR_FORWARD(left);
+MAS_ATTR_FORWARD(bottom);
+MAS_ATTR_FORWARD(right);
+MAS_ATTR_FORWARD(leading);
+MAS_ATTR_FORWARD(trailing);
+MAS_ATTR_FORWARD(width);
+MAS_ATTR_FORWARD(height);
+MAS_ATTR_FORWARD(centerX);
+MAS_ATTR_FORWARD(centerY);
+MAS_ATTR_FORWARD(baseline);
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+MAS_ATTR_FORWARD(firstBaseline);
+MAS_ATTR_FORWARD(lastBaseline);
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
+
+MAS_ATTR_FORWARD(leftMargin);
+MAS_ATTR_FORWARD(rightMargin);
+MAS_ATTR_FORWARD(topMargin);
+MAS_ATTR_FORWARD(bottomMargin);
+MAS_ATTR_FORWARD(leadingMargin);
+MAS_ATTR_FORWARD(trailingMargin);
+MAS_ATTR_FORWARD(centerXWithinMargins);
+MAS_ATTR_FORWARD(centerYWithinMargins);
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+MAS_ATTR_FORWARD(safeAreaLayoutGuideTop);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideBottom);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideLeft);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideRight);
+
+#endif
+
+- (MASViewAttribute *(^)(NSLayoutAttribute))attribute {
+ return [self mas_attribute];
+}
+
+- (NSArray *)makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
+ return [self mas_makeConstraints:block];
+}
+
+- (NSArray *)updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
+ return [self mas_updateConstraints:block];
+}
+
+- (NSArray *)remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
+ return [self mas_remakeConstraints:block];
+}
+
+@end
+
+#endif
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/ViewController+MASAdditions.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/ViewController+MASAdditions.h
new file mode 100755
index 0000000..79fd1fa
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/ViewController+MASAdditions.h
@@ -0,0 +1,30 @@
+//
+// UIViewController+MASAdditions.h
+// Masonry
+//
+// Created by Craig Siemens on 2015-06-23.
+//
+//
+
+#import "MASUtilities.h"
+#import "MASConstraintMaker.h"
+#import "MASViewAttribute.h"
+
+#ifdef MAS_VIEW_CONTROLLER
+
+@interface MAS_VIEW_CONTROLLER (MASAdditions)
+
+/**
+ * following properties return a new MASViewAttribute with appropriate UILayoutGuide and NSLayoutAttribute
+ */
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuide;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuide;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideTop;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_topLayoutGuideBottom;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideTop;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_bottomLayoutGuideBottom;
+
+
+@end
+
+#endif
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/ViewController+MASAdditions.m b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/ViewController+MASAdditions.m
new file mode 100755
index 0000000..2f5139f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/ThirdParties/Masonry/ViewController+MASAdditions.m
@@ -0,0 +1,39 @@
+//
+// UIViewController+MASAdditions.m
+// Masonry
+//
+// Created by Craig Siemens on 2015-06-23.
+//
+//
+
+#import "ViewController+MASAdditions.h"
+
+#ifdef MAS_VIEW_CONTROLLER
+
+@implementation MAS_VIEW_CONTROLLER (MASAdditions)
+
+- (MASViewAttribute *)mas_topLayoutGuide {
+ return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+- (MASViewAttribute *)mas_topLayoutGuideTop {
+ return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeTop];
+}
+- (MASViewAttribute *)mas_topLayoutGuideBottom {
+ return [[MASViewAttribute alloc] initWithView:self.view item:self.topLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+
+- (MASViewAttribute *)mas_bottomLayoutGuide {
+ return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop];
+}
+- (MASViewAttribute *)mas_bottomLayoutGuideTop {
+ return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeTop];
+}
+- (MASViewAttribute *)mas_bottomLayoutGuideBottom {
+ return [[MASViewAttribute alloc] initWithView:self.view item:self.bottomLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+
+
+
+@end
+
+#endif
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/com.hri.hpc.mobile.ios.player.metallib b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/com.hri.hpc.mobile.ios.player.metallib
new file mode 100644
index 0000000..927d741
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/com.hri.hpc.mobile.ios.player.metallib
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants.h
new file mode 100644
index 0000000..edc3b24
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants.h
@@ -0,0 +1,222 @@
+//
+// EZConstants.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 16/7/20.
+// Copyright 漏 2016骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+//钀ょ煶寮�鏀惧钩鍙板鎵樻柟娉�
+@protocol EZOpenSDKDelegate <NSObject>
+
+@optional
+
+/**
+ 钀ょ煶鐧诲綍鏄惁鎴愬姛
+
+ @param result 鏄惁鎴愬姛
+ */
+- (void)ezvizLoginResult:(BOOL)result;
+
+@end
+
+/* EZOpenSDK鐨勯敊璇畾涔� */
+typedef NS_ENUM(NSInteger, EZErrorCode) {
+ /**
+ * 瀵硅閿欒鐮�
+ */
+ EZ_DEVICE_TTS_REQUEST_TIMEOUT = 360001, //瀹㈡埛绔姹傝秴鏃�
+ EZ_DEVICE_TTS_TALKING_TIMEOUT = 360002, //瀵硅鍙戣捣瓒呮椂
+ EZ_DEVICE_TTS_DEVICE_CONNECT_ERROR = 360003, //TTS鐨勮澶囩鍙戠敓閿欒
+ EZ_DEVICE_TTS_INTER_ERROR = 360004, //TTS鍐呴儴鍙戠敓閿欒
+ EZ_DEVICE_TTS_SEND_ERROR = 360005, //瀹㈡埛绔彂閫佺殑娑堟伅閿欒
+ EZ_DEVICE_TTS_RECEIVE_ERROR = 360006, //瀹㈡埛绔帴鏀跺彂鐢熼敊璇�
+ EZ_DEVICE_TTS_CLOSE_CONNECT = 360007, //TTS鍏抽棴浜嗕笌瀹㈡埛绔殑杩炴帴
+ EZ_DEVICE_TTS_TALKING = 360010, //璁惧姝e湪瀵硅涓�
+ EZ_DEVICE_TTS_PRIVACY_PROTECT = 360013, //璁惧寮�鍚簡闅愮淇濇姢
+ EZ_DEVICE_TTS_INIT_ERROR = 360102, //TTS鍒濆鍖栧け璐�
+
+
+ /**
+ * 鍙栨祦閿欒鐮�
+ */
+ EZ_DEVICE_IS_PRIVACY_PROTECTING = 380011, //璁惧闅愮淇濇姢涓�
+ EZ_DEVICE_CONNECT_COUNT_LIMIT = 380045, //璁惧鐩磋繛鍙栨祦杩炴帴鏁伴噺杩囧ぇ
+ EZ_DEVICE_COMMAND_NOT_SUPPORT = 380047, //璁惧涓嶆敮鎸佽鍛戒护
+ EZ_DEVICE_CAS_TALKING = 380077, //璁惧姝e湪瀵硅涓�
+ EZ_DEVICE_CAS_REC_ERROR = 380102, //鏁版嵁鎺ユ敹寮傚父
+ EZ_DEVICE_CAS_PARSE_ERROR = 380205, //璁惧妫�娴嬪叆鍙傚紓甯�
+ EZ_PLAY_TIMEOUT = 380209, //缃戠粶杩炴帴瓒呮椂
+ EZ_DEVICE_TIMEOUT = 380212, //璁惧绔綉缁滆繛鎺ヨ秴鏃�
+ EZ_STREAM_CLIENT_TIMEOUT = 390038, //鍚屾椂`390037`鎵嬫満缃戠粶寮曡捣鐨勫彇娴佽秴鏃�
+ EZ_STREAM_CLIENT_NOT_FIND_FILE = 395402, //鍥炴斁鎵句笉鍒板綍鍍忔枃浠讹紝妫�鏌ヤ紶鍏ョ殑鍥炴斁鏂囦欢鏄惁姝g‘
+ EZ_STREAM_CLIENT_OFFLINE = 395404, //璁惧涓嶅湪绾�
+ EZ_STREAM_CLIENT_TOKEN_INVALID = 395406, //鍙栨祦token楠岃瘉澶辨晥
+ EZ_STREAM_CLIENT_PRIVACY_PROTECT = 395409, //棰勮寮�鍚殣绉佷繚鎶�,鍙互鍦ㄨ悿鐭充簯APP涓叧闂�
+ EZ_STREAM_CLIENT_DEVICE_COUNT_LIMIT = 395410, //璁惧杩炴帴鏁拌繃澶�,鏈夎繃澶氱殑缁堢姝e湪瀵硅璁惧杩涜鍙栨祦鎿嶄綔
+ EZ_STREAM_CLIENT_TOKEN_LIMIT = 395411, //token鏃犳潈闄�
+ EZ_STREAM_CLIENT_CAMERANO_ERROR = 395415, //璁惧閫氶亾閿�
+ EZ_STREAM_CLIENT_TYPE_UNSUPPORT = 395451, //璁惧涓嶆敮鎸佺殑鐮佹祦绫诲瀷
+ EZ_STREAM_CLIENT_CONNECT_SERVER_ERROR = 395452, //璁惧杩炴帴棰勮娴佸獟浣撴湇鍔″櫒澶辫触
+ EZ_STREAM_CLIENT_SESSION_NOT_EXIST = 395454, //浼氳瘽涓嶅瓨鍦�
+ EZ_STREAM_CLIENT_SAME_REQUEST = 395491, //鐩稿悓璇锋眰姝e湪澶勭悊锛屾嫆缁濇湰娆″鐞�
+ EZ_STREAM_CLIENT_INNER_ERROR = 395500, //娴佸獟浣撴湇鍔″櫒鍐呴儴澶勭悊閿欒
+ EZ_STREAM_CLIENT_NO_SOURCE = 395544, //璁惧杩斿洖鏃犺棰戞簮
+ EZ_STREAM_CLIENT_VIDEO_OUT_SHARE_TIME = 395545, //瑙嗛鍒嗕韩鏃堕棿宸茬粡缁撴潫
+ EZ_STREAM_CLIENT_LIMIT = 395546, //璁惧鍙栨祦鍙楀埌闄愬埗锛屽崌绾т紒涓氱増鍙斁寮�闄愬埗
+ EZ_STREAM_CLIENT_DEVICE_OUT_SHARE_TIME = 395600, //鍒嗕韩璁惧涓嶅湪鍒嗕韩鏃堕棿鍐�
+
+ /**
+ * HTTP 閿欒鐮�
+ */
+ EZ_HTTPS_PARAM_ERROR = 110001, //璇锋眰鍙傛暟閿欒
+ EZ_HTTPS_ACCESS_TOKEN_INVALID = 110002, //AccessToken鏃犳晥
+ EZ_HTTPS_ACCESS_TOKEN_EXPIRE = 110003, //AccessToken杩囨湡
+ EZ_HTTPS_REGIST_USER_NOT_EXSIT = 110004, //娉ㄥ唽鐢ㄦ埛涓嶅瓨鍦�
+ EZ_HTTPS_APPKEY_ERROR = 110005, //AppKey寮傚父
+ EZ_HTTPS_IP_LIMIT = 110006, //ip鍙楅檺
+ EZ_HTTPS_INVOKE_LIMIT = 110007, //璋冪敤娆℃暟杈惧埌涓婇檺
+ EZ_HTTPS_USER_BINDED = 110012, //绗笁鏂硅处鎴蜂笌钀ょ煶璐﹀彿宸茬粡缁戝畾
+ EZ_HTTPS_APPKEY_IS_NULL = 110017, //AppKey涓嶅瓨鍦�
+ EZ_HTTPS_APPKEY_NOT_MATCHED = 110018, //AppKey涓嶅尮閰嶏紝璇锋鏌ユ湇鍔$璁剧疆鐨刟ppKey鏄惁鍜孲DK浣跨敤鐨刟ppKey涓�鑷�
+ EZ_HTTPS_CAMERA_NOT_EXISTS = 120001, //閫氶亾涓嶅瓨鍦紝璇锋鏌ユ憚鍍忓ご璁惧鏄惁閲嶆柊娣诲姞杩�
+ EZ_HTTPS_DEVICE_NOT_EXISTS = 120002, //璁惧涓嶅瓨鍦�
+ EZ_HTTPS_DEVICE_NETWORK_ANOMALY = 120006, //缃戠粶寮傚父
+ EZ_HTTPS_DEVICE_OFFLINE = 120007, //璁惧涓嶅湪绾�
+ EZ_HTTPS_DEIVCE_RESPONSE_TIMEOUT = 120008, //璁惧璇锋眰鍝嶅簲瓒呮椂寮傚父
+ EZ_HTTPS_DEVICE_VALICATECODE_ERROR = 120010, //璁惧楠岃瘉鐮侀敊璇�
+ EZ_HTTPS_ILLEGAL_DEVICE_SERIAL = 120014, //涓嶅悎娉曠殑搴忓垪鍙�
+ EZ_HTTPS_DEVICE_STORAGE_FORMATTING = 120016, //璁惧姝e湪鏍煎紡鍖栫鐩�
+ EZ_HTTPS_DEVICE_ADDED_MYSELF = 120017, //鍚宍120020`璁惧宸茬粡琚嚜宸辨坊鍔�
+ EZ_HTTPS_USER_NOT_OWN_THIS_DEVICE = 120018, //璇ョ敤鎴蜂笉鎷ユ湁璇ヨ澶�
+ EZ_HTTPS_DEVICE_UNSUPPORT_CLOUD = 120019, //璁惧涓嶆敮鎸佷簯瀛樺偍鏈嶅姟
+ EZ_HTTPS_DEVICE_ONLINE_ADDED = 120020, //璁惧鍦ㄧ嚎锛岃鑷繁娣诲姞
+ EZ_HTTPS_DEVICE_ONLINE_NOT_ADDED = 120021, //璁惧鍦ㄧ嚎锛屾湭琚敤鎴锋坊鍔�
+ EZ_HTTPS_DEVICE_ONLINE_IS_ADDED = 120022, //璁惧鍦ㄧ嚎锛屽凡缁忚鍒殑鐢ㄦ埛娣诲姞
+ EZ_HTTPS_DEVICE_OFFLINE_NOT_ADDED = 120023, //璁惧涓嶅湪绾匡紝鏈鐢ㄦ埛娣诲姞
+ EZ_HTTPS_DEVICE_OFFLINE_IS_ADDED = 120024, //璁惧涓嶅湪绾匡紝宸茬粡琚埆鐨勭敤鎴锋坊鍔�
+ EZ_HTTPS_DEVICE_OFFLINE_IS_ADDED_MYSELF = 120029, //璁惧涓嶅湪绾匡紝浣嗘槸宸茬粡琚嚜宸辨坊鍔�
+ EZ_HTTPS_DEVICE_BUNDEL_STATUS_ON = 120031, //鍚屾椂`106002`閿欒鐮佷篃鏄紝璁惧寮�鍚簡缁堢缁戝畾锛岃鍒拌悿鐭充簯瀹㈡埛绔叧闂粓绔粦瀹�
+ EZ_HTTPS_OPERATE_LEAVE_MSG_FAIL = 120202, //鎿嶄綔鐣欒█娑堟伅澶辫触
+ EZ_HTTPS_SERVER_DATA_ERROR = 149999, //鏁版嵁寮傚父
+ EZ_HTTPS_SERVER_ERROR = 150000, //鏈嶅姟鍣ㄥ紓甯�
+ EZ_HTTPS_CLOUD_DELETE_ALL_EXCEPT_LAST = 150002, //浜戝瓨鍌ㄨ棰戝垹闄ゅ畬鎴愶紝闄や簡鏈�鍚庝竴涓湪褰曞埗鐨勮棰戞棤娉曞垹闄�
+ EZ_HTTPS_DEVICE_PTZ_NOT_SUPPORT = 160000, //璁惧涓嶆敮鎸佷簯鍙版帶鍒�
+ EZ_HTTPS_DEVICE_PTZ_NO_PERMISSION = 160001, //鐢ㄦ埛娌℃湁鏉冮檺鎿嶄綔浜戝彴鎺у埗
+ EZ_HTTPS_DEVICE_PTZ_UPPER_LIMIT = 160002, //浜戝彴杈惧埌涓婇檺浣嶏紙椤堕儴锛�
+ EZ_HTTPS_DEVICE_PTZ_FLOOR_LIMIT = 160003, //浜戝彴杈惧埌涓嬮檺浣嶏紙搴曢儴锛�
+ EZ_HTTPS_DEVICE_PTZ_LEFT_LIMIT = 160004, //浜戝彴杈惧埌宸﹂檺浣嶏紙鏈�宸﹁竟锛�
+ EZ_HTTPS_DEVICE_PTZ_RIGHT_LIMIT = 160005, //浜戝彴杈惧埌鍙抽檺浣嶏紙鏈�鍙宠竟锛�
+ EZ_HTTPS_DEVICE_PTZ_FAILED = 160006, //浜戝彴鎿嶄綔澶辫触
+ EZ_HTTPS_DEVICE_PTZ_RESETING = 160009, //浜戝彴姝e湪璋冪敤棰勭疆鐐�
+ EZ_HTTPS_DEVICE_COMMAND_NOT_SUPPORT = 160020, //璁惧鎶撳浘澶辫触锛屼笉鏀寔鎶撳浘
+
+ /**
+ * 鎺ュ彛 閿欒鐮�(SDK鏈湴鏍¢獙)
+ */
+ EZ_SDK_PARAM_ERROR = 400002, //鎺ュ彛鍙傛暟閿欒
+ EZ_SDK_NOT_SUPPORT_TALK = 400025, //璁惧涓嶆敮鎸佸璁�
+ EZ_SDK_TIMEOUT = 400034, //鏃犳挱鏀総oken锛岃stop鍐峴tart鎾斁鍣�
+ EZ_SDK_NEED_VALIDATECODE = 400035, //闇�瑕佽澶囬獙璇佺爜
+ EZ_SDK_VALIDATECODE_NOT_MATCH = 400036, //璁惧楠岃瘉鐮佷笉鍖归厤
+ EZ_SDK_DECODE_TIMEOUT = 400041, //瑙g爜瓒呮椂锛屽彲鑳芥槸楠岃瘉鐮侀敊璇�
+ EZ_SDK_STREAM_TIMEOUT = 400015, //鍙栨祦瓒呮椂,璇锋鏌ユ墜鏈虹綉缁�
+ EZ_SDK_PLAYBACK_STREAM_TIMEOUT = 400409, //鍥炴斁鍙栨祦瓒呮椂,璇锋鏌ユ墜鏈虹綉缁�
+
+ /**
+ * NPC鍙栨祦閿欒鐮�
+ */
+ EZ_NPC_CLIENT_PARAMETER_ERROR = 500001, //鍙傛暟閿欒
+ EZ_NPC_CLIENT_ORDER_ERROR = 500002, //璋冪敤椤哄簭鍑洪敊
+ EZ_NPC_CLIENT_MEMORY_ERROR = 500003, //鍒嗛厤鍐呭瓨澶辫触
+ EZ_NPC_CLIENT_BUFFER_OVERFLOW_ERROR = 500004, //缂撳啿鍖烘孩鍑�
+ EZ_NPC_CLIENT_SYSTEM_NO_SUPPORT_ERROR = 500005, //绯荤粺涓嶆敮鎸�
+ EZ_NPC_CLIENT_INVALID_PORT_ERROR = 500006, //鏃犳晥绔彛
+ EZ_NPC_CLIENT_STREAM_CLOSE_ERROR = 500101, //娴佸叧闂�
+ EZ_NPC_CLIENT_TRACK_CLOSE_ERROR = 500102, //TRACK_CLOSE
+ EZ_NPC_CLIENT_NPCCREATE_ERROR = 500103, //鍒涘缓澶辫触
+ EZ_NPC_CLIENT_TRSCREATE_ERROR = 500104, //TRSCREATE_ERROR
+ EZ_NPC_CLIENT_FAIL_UNKNOWN_ERROR = 509999, //FAIL_UNKNOWN
+};
+
+/* 璁惧ptz鍛戒护锛屽畾涔夌殑鍊间笌Android瀹氫箟鐨勪笉涓�鏍凤紝SDK浼氬湪鍐呴儴浼氬仛涓�灞傝浆鎹� */
+typedef NS_OPTIONS(NSUInteger, EZPTZCommand) {
+ EZPTZCommandLeft = 1 << 0, //鍚戝乏鏃嬭浆
+ EZPTZCommandRight = 1 << 1, //鍚戝彸鏃嬭浆
+ EZPTZCommandUp = 1 << 2, //鍚戜笂鏃嬭浆
+ EZPTZCommandDown = 1 << 3, //鍚戜笅鏃嬭浆
+ EZPTZCommandZoomIn = 1 << 4, //闀滃ご鎷夎繘
+ EZPTZCommandZoomOut = 1 << 5, //闀滃ご鎷夎繙
+};
+
+/*
+ * 璁惧鏄剧ず鍛戒护
+ */
+typedef NS_OPTIONS(NSUInteger, EZDisplayCommand) {
+ EZDisplayCommandCenter = 1 << 0, //鏄剧ず涓棿
+};
+
+/**
+ * 璁惧ptz鍔ㄤ綔鍛戒护
+ */
+typedef NS_ENUM(NSInteger, EZPTZAction) {
+ EZPTZActionStart = 1, //ptz寮�濮�
+ EZPTZActionStop = 2 //ptz鍋滄
+};
+
+/* 娑堟伅鐘舵�� */
+typedef NS_ENUM(NSInteger, EZMessageStatus) {
+ EZMessageStatusRead = 1, //宸茶
+};
+
+/* 娑堟伅绫诲瀷 */
+typedef NS_ENUM(NSInteger, EZMessageType)
+{
+ EZMessageTypeAlarm = 1, //鍛婅绫诲瀷
+ EZMessageTypeLeave, //鐣欒█绫诲瀷
+};
+
+/* 鐣欒█娑堟伅绫诲瀷 */
+typedef NS_ENUM(NSInteger, EZLeaveMessageType)
+{
+ EZLeaveMessageTypeAll, //鍏ㄩ儴
+ EZLeaveMessageTypeVoice, //璇煶绫�
+ EZLeaveMessageTypeVideo, //瑙嗛绫�
+};
+
+/* 璁惧甯冮槻鐘舵�佹灇涓剧被鍨� */
+typedef NS_ENUM(NSInteger, EZDefenceStatus) {
+ EZDefenceStatusOffOrSleep = 0, //A1璁惧鐫$湢妯″紡鎴栬�呴潪A1璁惧鐨勬挙闃茬姸鎬�
+ EZDefenceStatusOn = 1, //闈濧1璁惧鐨勫竷闃茬姸鎬�
+ EZDefenceStatusAtHome = 8, //A1鍦ㄥ妯″紡
+ EZDefenceStatusOuter = 16, //A1澶栧嚭妯″紡
+};
+
+/* 閫氶亾娓呮櫚搴︼紝璇锋敞鎰忎笉鏄墍鏈夎澶囬兘鏈夎繖浜涙竻鏅板害鐨勶紝璇锋牴鎹疄闄呭満鏅娇鐢� */
+typedef NS_ENUM(NSInteger, EZVideoLevelType) {
+ EZVideoLevelLow = 0, //娴佺晠
+ EZVideoLevelMiddle = 1, //鍧囪
+ EZVideoLevelHigh = 2, //楂樻竻
+ EZVideoLevelSuperHigh = 3 //瓒呮竻
+};
+
+/* 褰曞儚绫诲瀷 */
+typedef NS_ENUM(NSUInteger, EZVideoRecordType) {
+ EZVideoRecordTypeAll, // 鎵�鏈夌被鍨�
+ EZVideoRecordTypeCMR, // 瀹氭椂褰曞儚
+ EZVideoRecordTypeEvent // 浜嬩欢绫诲瀷
+};
+
+/* 浜戝瓨鍌ㄥ綍鍍忕被鍨� */
+typedef NS_ENUM(NSInteger, EZCloudVideoType) {
+ EZCloudVideoTypeAll = -1, // 鍏ㄩ儴褰曞儚
+ EZCloudVideoTypeSeries = 1, // 杩炵画褰曞儚
+ EZCloudVideoTypeAct = 2 // 娲诲姩褰曞儚
+};
+
+/// 寮�鏀惧钩鍙板父閲忕被
+@interface EZConstants : NSObject
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants_Auth.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants_Auth.h
new file mode 100644
index 0000000..1d70767
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants_Auth.h
@@ -0,0 +1,52 @@
+//
+// EZConstants_Auth.h
+// Auth
+//
+// Created by JuneCheng on 2022/5/18.
+//
+
+#import <Foundation/Foundation.h>
+
+// 钀ょ煶寮�鏀惧钩鍙板鎵樻柟娉�
+@protocol EZAuthSDKDelegate <NSObject>
+
+@optional
+
+/**
+ 钀ょ煶鐧诲綍鏄惁鎴愬姛
+
+ @param result 鏄惁鎴愬姛
+ */
+- (void)ezvizLoginResult:(BOOL)result;
+
+@end
+
+/* 钀ょ煶鐮斿彂鐨凙PP */
+typedef NS_ENUM(NSInteger, EZAppType) {
+ EZEzviz = 0, // 钀ょ煶浜戣棰戝浗鍐呯増
+ EZEzvizInternational = 1, // 钀ょ煶浜戣棰戞捣澶栫増
+ EZHIKConnect = 2, // HIK-Connect
+};
+
+/* 钀ょ煶璐熻矗鐮斿彂鐨凙PP */
+typedef NS_ENUM(NSInteger, EZAppPageType) {
+ EZPageDeviceList = 0, // 璁惧鍒楄〃椤甸潰
+ EZPageAlarmList = 1, // 鍛婅娑堟伅鍒楄〃椤甸潰
+};
+
+///闇�瑕佽繘琛岄噸鏂扮櫥褰曠殑閫氱煡锛岃閫氱煡瑙﹀彂棰戠巼涓�5骞翠竴娆★紝闇�鍦⊿DK鍒濆鍖栫洃鍚�
+extern const NSNotificationName EZNeedReloginNotification;
+
+///閿欒瑙e喅鏂规KEY
+extern NSErrorUserInfoKey const EZErrorSolutionKey;
+
+///閿欒妯″潡閿欒鐮並EY
+extern NSErrorUserInfoKey const EZErrorModuleCodeKey;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZConstants_Auth : NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants_WifiConfig.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants_WifiConfig.h
new file mode 100644
index 0000000..97dd69d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZConstants_WifiConfig.h
@@ -0,0 +1,36 @@
+//
+// EZConstants_WifiConfig.h
+// WifiConfig
+//
+// Created by JuneCheng on 2022/5/6.
+//
+
+#ifndef EZConstants_WifiConfig_h
+#define EZConstants_WifiConfig_h
+
+/* 閰嶇綉鏂瑰紡 */
+typedef NS_ENUM(NSInteger, EZWiFiConfigMode) {
+ EZWiFiConfigSmart = 1 << 0, // smart config
+ EZWiFiConfigWave = 1 << 1, // 澹版尝閰嶇綉
+};
+
+/* WiFi閰嶇疆璁惧鐘舵�� */
+typedef NS_ENUM(NSInteger, EZWifiConfigStatus) {
+ DEVICE_WIFI_CONNECTING = 1, //璁惧姝e湪杩炴帴WiFi
+ DEVICE_WIFI_CONNECTED = 2, //璁惧杩炴帴WiFi鎴愬姛 (宸插簾寮� v4.16.0)
+ DEVICE_PLATFORM_REGISTED = 3, //璁惧娉ㄥ唽骞冲彴鎴愬姛
+ DEVICE_ACCOUNT_BINDED = 4, //璁惧宸茬粡缁戝畾璐︽埛 (宸插簾寮� v4.16.0)
+ DEVICE_WIFI_SENT_SUCCESS = 5, //鍚戣澶囧彂閫乄iFi淇℃伅鎴愬姛
+ DEVICE_WIFI_SENT_FAILED = 6, //鍚戣澶囧彂閫乄iFi淇℃伅澶辫触
+ DEVICE_PLATFORM_REGIST_FAILED = 7, //璁惧娉ㄥ唽骞冲彴澶辫触锛岃疆璇�20娆★紝20娆℃湭鏌ヨ鍒拌澶囦笂绾胯涓烘敞鍐屽钩鍙板け璐�
+};
+
+/* New AP閰嶇綉璁惧鐘舵�� */
+typedef NS_ENUM(NSInteger, EZNewAPConfigStatus) {
+ EZNewAPConfigStatusConnectSuccess = 104, // 杩炴帴鎴愬姛
+ EZNewAPConfigStatusUnknow = 105, // 鏈煡閿欒
+ EZNewAPConfigStatusPasswordError = 106, // 瀵嗙爜閿欒
+ EZNewAPConfigStatusNoAPFound = 201, // 鏈壘鍒皐ifi鐑偣
+};
+
+#endif /* EZConstants_WifiConfig_h */
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZGlobalSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZGlobalSDK.h
new file mode 100644
index 0000000..90f7cc9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZGlobalSDK.h
@@ -0,0 +1,1059 @@
+//
+// EZGlobalSDK.h
+// EZOpenSDK
+//
+// Created by JuneCheng on 2022/7/18.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZConstants.h"
+#import "EZConstants_Auth.h"
+#import "EZConstants_WifiConfig.h"
+
+@class EZAccessToken;
+@class EZPlayer;
+@class EZUserInfo;
+@class EZDeviceVersion;
+@class EZDeviceInfo;
+@class EZProbeDeviceInfo;
+@class EZDeviceUpgradeStatus;
+@class EZLeaveMessage;
+@class EZHiddnsDeviceInfo;
+@class EZDeviceCloudServiceInfo;
+@class EZWiFiItemInfo, EZAPDevInfo, EZConfigTokenInfo;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZGlobalSDK : NSObject
+
+#pragma mark - Auth璁よ瘉鐩稿叧Api
+
+/**
+ * 瀹炰緥EZOpenSDK鎺ュ彛
+ *
+ * @param appKey 浼犲叆鐢宠鐨刟ppKey
+ *
+ * @return YES/NO
+ */
++ (BOOL)initLibWithAppKey:(NSString *)appKey;
+
+/**
+ * 鍒濆鍖栨帴鍙o紝鍙缃湇鍔″櫒锛屾捣澶栫敤鎴蜂娇鐢ㄨ鍒濆鍖栨柟娉�
+ *
+ * @param appKey 浼犲叆鐢宠鐨刟ppKey
+ * @param apiUrl apiUrl鍦板潃
+ * @param authUrl auth鍦板潃
+ *
+ * @return YES/NO
+ */
++ (BOOL)initLibWithAppKey:(NSString *)appKey
+ url:(NSString *)apiUrl
+ authUrl:(NSString *)authUrl;
+
+/**
+ * 閿�姣丒ZOpenSDK鎺ュ彛
+ *
+ * @return YES/NO
+ */
++ (BOOL)destoryLib;
+
+/**
+ * 璁剧疆鏄惁鎵撳嵃debug鏃ュ織,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ * @param enable 鏄惁鎵撳嵃鏃ュ織锛岄粯璁ゅ叧闂�
+ *
+ * @return YES/NO
+ */
++ (BOOL)setDebugLogEnable:(BOOL)enable;
+
+/**
+ * 璁剧疆debug鏃ュ織鍥炶皟,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ * @param logCallback 鏃ュ織鍥炶皟
+ */
++ (void)setDebugLogCallBack:(void(^)(NSString *logStr))logCallback;
+
+/**
+ * 鎵撳紑鎺堟潈鐧诲綍涓棿椤甸潰鎺ュ彛
+ *
+ * @param areaId areaId
+ * @param block 鍥炶皟block
+*/
++ (void)openLoginPage:(NSString *)areaId
+ completion:(void (^)(EZAccessToken *accessToken))block;
+
+/**
+ * 鎺堟潈鐧诲綍浠ュ悗缁橢ZOpenSDK璁剧疆accessToken鎺ュ彛
+ *
+ * @param accessToken 鎺堟潈鐧诲綍鑾峰彇鐨刟ccessToken
+ */
++ (void)setAccessToken:(NSString *)accessToken;
+
+/**
+ * 璐︽埛娉ㄩ攢鎺ュ彛
+ *
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鐧诲嚭鎴愬姛
+ */
++ (void)logout:(void (^)(NSError *error))completion;
+
+
+/**
+ 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS9浠ヤ笂锛屽寘鎷琲OS9
+
+ @param url 璺宠浆杩囨潵鐨剈rl
+ @param options 鍙傛暟锛岄粯璁や负绌猴紝鐩墠鏈繘琛屽鐞嗭紝棰勭暀
+ @param delegate 濮旀墭
+ @return 缁撴灉
+ */
++ (BOOL)handleOpenUrl:(NSURL *)url options:(NSDictionary *)options delegate:(id<EZAuthSDKDelegate>)delegate;
+
+/**
+ * 鑾峰彇SDK鐗堟湰鍙锋帴鍙�
+ *
+ * @return 鐗堟湰鍙�
+ */
++ (NSString *)getVersion;
+
+/**
+ * 鎵撳紑浜戝瓨鍌ㄤ腑闂撮〉
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 璁惧閫氶亾鍙�
+ */
++ (void)openCloudPage:(NSString *)deviceSerial channelNo:(NSInteger)channelNo;
+
+/**
+ * 鎵撳紑淇敼瀵嗙爜涓棿椤�
+ *
+ * @param completion 鍥炶皟block resultCode涓�0鏃惰〃绀轰慨鏀瑰瘑鐮佹垚鍔�
+ */
++ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;
+
+/**
+ 鏄惁宸茬粡鐧诲綍
+
+ @return YES锛氬凡缁忕櫥褰曪紱NO锛氭湭鐧诲綍
+ */
++ (BOOL)isLogin;
+
+/**
+ 鑾峰彇褰撳墠accessToken
+
+ @return accessToken
+ */
++ (NSString *)getAccesstoken;
+
+#pragma mark - 鎾斁鍣ㄥ垱寤篈pi
+
+/**
+ * 鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo;
+
+/**
+ * 涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 铏氭嫙閫氶亾
+ * @param useSubStream 鏄惁浣跨敤瀛愮爜娴�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ useSubStream:(BOOL)useSubStream;
+
+/**
+ * 鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
+ *
+ * @param url 鎾斁url锛岀洰鍓嶅彧鏀寔璇ュ崗璁細ysproto://vtm.ys7.com:8554/live?dev=531993276&chn=1&stream=1&cln=1&isp=0&biz=3
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithUrl:(NSString *)url;
+
+
+/**
+ * 閲婃斁EZPlayer瀵硅薄
+ *
+ * @param player EZPlayer瀵硅薄
+ *
+ * @return YES/NO
+ */
++ (BOOL)releasePlayer:(EZPlayer *)player;
+
+#pragma mark - 鍙栨祦鐩稿叧Api
+
+/**
+ * 璁剧疆p2p鍔熻兘鏄惁寮�鍚帴鍙o紝榛樿涓嶅紑鍚痯2p锛岀敤鎴疯嚜宸遍�夋嫨鏄惁寮�鍚�
+ *
+ * @param enable p2p鏄惁寮�鍚�
+ */
++ (void)enableP2P:(BOOL)enable;
+
+/**
+ * 娓呴櫎鍙栨祦鏃剁殑缂撳瓨鏁版嵁
+ */
++ (void)clearStreamInfoCache;
+
+/**
+ * 鏄惁鏀寔鍥芥爣
+ * @param enable YES or NO
+ */
++ (void)enableNationalStandard:(BOOL)enable;
+
+#pragma mark - 褰曞儚鏌ヨApi
+
+/**
+ * 鏌ヨ浜戝瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZCloudRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromCloud:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
+
+/**
+ * 鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
+
+/**
+ * 鑾峰彇鎸囧畾鏃堕棿鍐呯殑鎵�鏈夊綍鍍忔枃浠�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙凤紝浼犲叆<=0鐨勫�煎垯涓洪粯璁ゅ��
+ * @param beginTime 寮�濮嬫椂闂达紝浼犲叆nil鍒欎负褰撳ぉ00:00:00
+ * @param endTime 缁撴潫鏃堕棿锛屼紶鍏il鍒欎负褰撳ぉ23:59:59
+ * @param rectype 鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚銆傞潪蹇呴�夛紝榛樿涓�0锛屼紶鍏ヨ礋鍊煎垯涓洪粯璁ゅ��
+ * @param bizType 璁惧褰掑睘涓氬姟鏉ユ簮
+ * @param platFormId 骞冲彴ID
+ * @param completion 鍥炶皟block records:EzvizRecordFileInfo鐨勬暟缁�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFile:(NSString *)deviceSerial
+ cameraNo:(NSString *)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ recType:(NSInteger)rectype
+ bizType:(NSString *)bizType
+ platFormId:(NSString *)platFormId
+ completion:(void (^)(id records, NSError *error))completion;
+
+#pragma mark - 璁惧鐩稿叧Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)addDevice:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鍒楄〃
+ *
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鑾峰彇鍒嗕韩缁欑敤鎴风殑璁惧鍒楄〃鎺ュ彛
+ *
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getSharedDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鏍规嵁搴忓垪鍙疯幏鍙栬澶囦俊鎭�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceInfo:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 鑾峰彇璁惧鐨勭増鏈俊鎭帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceVersion鐨勫璞′俊鎭紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceVersion:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;
+
+/**
+ * 閫氳繃璁惧楠岃瘉鐮佸紑鍏宠棰戝浘鐗囧姞瀵嗘帴鍙�
+ *
+ * @param isEncrypt 鏄惁鍔犲瘑锛屽彧鏈塏O(鍏抽棴)鐨勬椂鍊欓渶瑕佽澶囬獙璇佺爜鐨勭浉鍏冲弬鏁�(vaildateCode)
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceEncryptStatus:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ encrypt:(BOOL)isEncrypt
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙蜂慨鏀硅澶囧悕绉版帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param deviceName 璁惧鍚嶇О
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀轰慨鏀规垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceName:(NSString *)deviceName
+ deviceSerial:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰垹闄ゅ綋鍓嶈处鍙风殑璁惧鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ * @see 璇ユ帴鍙d笌缁堢缁戝畾鍔熻兘鐩稿叧锛屼細閬囧埌鍒犻櫎鏃舵姤106002鐨勯敊璇紝璇峰叧闂粓绔粦瀹氫互鍚庡啀璇�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteDevice:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧瓨鍌ㄤ粙璐ㄧ姸鎬�(濡傛槸鍚﹀垵濮嬪寲锛屾牸寮忓寲杩涘害绛�)
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZStorageInfo鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getStorageStatus:(NSString *)deviceSerial
+ completion:(void (^)(NSArray *storageStatus, NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰鍒嗗尯缂栧彿鏍煎紡鍖栧垎鍖猴紙SD鍗★級
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param storageIndex 鏌ヨ杩斿洖鐨勫垎鍖哄彿锛�0琛ㄧず鍏ㄩ儴鏍煎紡鍖栵紝鍙兘浼氭湁鍑犲潡纭洏鐨勬儏鍐�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)formatStorage:(NSString *)deviceSerial
+ storageIndex:(NSInteger)storageIndex
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囧崌绾ф椂鐨勮繘搴︾姸鎬�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceUpgradeStatus瀵硅薄锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceUpgradeStatus:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;
+
+/**
+ * 閫氳繃璁惧搴忓垪鍙峰璁惧杩涜鍗囩骇鎿嶄綔锛屽墠鎻愭槸璇ヨ澶囨湁鏇存柊杞欢鐨勬彁绀�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鎿嶄綔鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)upgradeDevice:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇鎶撳彇鎽勫儚澶村浘鐗囩殑url鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖url鍦板潃淇℃伅锛岄敊璇椂杩斿洖閿欒鐮�
+ * @see 璇ユ帴鍙f瘮杈冭�楁椂锛屼笉寤鸿杩涜鎵归噺璁惧鎶撳浘锛孲DK鍐呴儴鍙敮鎸�6涓猦ttp璇锋眰骞跺彂锛岃鎺ュ彛浼氭寔缁崰鐢╤ttp璇锋眰璧勬簮锛屽鏋滈亣鍒癶ttp璇锋眰寤舵椂宸ㄥぇ闂锛屼紭鍏堣�冭檻鎶撳浘鎺ュ彛骞跺彂閫犳垚鐨勯棶棰�,
+ * 鎶撳浘灏嗗湪鏈嶅姟鍣ㄧ淇濈暀2涓皬鏃�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)captureCamera:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ completion:(void (^)(NSString *url, NSError *error))completion;
+
+/**
+ * 璁剧疆璁惧閫氶亾鐨勬竻鏅板害
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param videoLevel 閫氶亾娓呮櫚搴︼紝0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+ * @param completion 鍥炶皟block锛屾棤error琛ㄧず璁剧疆鎴愬姛
+ * @see 濡傛灉鏄鍦ㄦ挱鏀炬椂璋冪敤璇ユ帴鍙o紝璁剧疆娓呮櫚搴︽垚鍔熶互鍚庡繀椤昏EZPlayer璋冪敤stopRealPlay鍐嶈皟鐢╯tartRealPlay閲嶆柊鍙栨祦鎵嶆垚瀹屾垚鐢婚潰娓呮櫚搴︾殑鍒囨崲銆�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setVideoLevel:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ videoLevel:(EZVideoLevelType)videoLevel
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 璁惧璁剧疆甯冮槻鐘舵�侊紝鍏煎A1鍜孖PC璁惧鐨勫竷闃�
+ *
+ * @param defence 甯冮槻鐘舵��, IPC甯冮槻鐘舵�佸彧鏈�0鍜�1锛孉1鏈�0:鐫$湢 8:鍦ㄥ 16:澶栧嚭
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDefence:(EZDefenceStatus)defence
+ deviceSerial:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+#pragma mark - 浜戝彴鎺у埗Api
+
+/**
+ * PTZ 鎺у埗鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param command ptz鎺у埗鍛戒护
+ * @param action 鎺у埗鍚姩/鍋滄
+ * @param speed 浜戝彴閫熷害锛�0-鎱紝1-閫備腑锛�2-蹇�
+ * @param resultBlock 鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)controlPTZ:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ command:(EZPTZCommand)command
+ action:(EZPTZAction)action
+ speed:(NSInteger)speed
+ result:(void (^)(NSError *error))resultBlock;
+
+/**
+ * 鎽勫儚澶存樉绀烘帶鍒舵帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param command 鏄剧ず鎺у埗鍛戒护
+ * @param resultBlock 鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ */
++ (void)controlVideoFlip:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ command:(EZDisplayCommand)command
+ result:(void (^)(NSError *error))resultBlock;
+
+#pragma mark - 浜戝瓨鍌ㄧ浉鍏矨pi
+
+/**
+ * 妫�鏌ュ浗瀹舵槸鍚︽敮鎸佷簯瀛樺偍鏈嶅姟
+ *
+ * @param completion 鍥炶皟
+ * @return operation
+ */
++ (NSURLSessionDataTask *)isSupportCloundService:(void (^)(BOOL isSupport, NSError *error))completion;
+
+/**
+ * 鏌ヨ浜戝瓨鍌ㄨ澶囬�氶亾濂楅淇℃伅
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getCloundDevicePackageInfo:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ completion:(void (^)(EZDeviceCloudServiceInfo *serviceInfo, NSError *error))completion;
+
+/**
+ * 浜戝瓨鍌ㄥ姛鑳芥殏鍋滄仮澶�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param enable NO-绂佺敤锛孻ES-鍚敤
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setCloundServiceActive:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ enable:(BOOL)enable
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏌ヨ鏌愭湀涓湁瑙嗛鏂囦欢鐨勫ぉ(鏃ユ湡)
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param month 鏌ヨ鏌愭湀鍏锋湁浜戝瓨鍌ㄧ殑鏃ユ湡锛屾牸寮忎负yyyyMM
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getCloudVideoDays:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ month:(NSString *)month
+ completion:(void (^)(NSArray<NSString *> *dayArray, NSError *error))completion;
+
+/**
+ * 鎸夎澶囬�氶亾鍒犻櫎鎵�鏈変簯瀛樺偍褰曞儚鐗囨
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteAllCloudVideo:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鍒犻櫎浜戝瓨鍌ㄥ綍鍍忕墖娈�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param videos 瑙嗛鏁扮粍锛堥檺鍒�30涓互鍐咃級
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteCloudVideoFragment:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ videos:(NSArray *)videos
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鎸夊ぉ澧為噺鏌ヨ浜戝瓨鍌ㄥ綍鍍忓垪琛ㄦ帴鍙�(姒傝淇℃伅)
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param videoType 褰曞儚绫诲瀷videoType
+ * @param searchDate 鏌ユ壘鏂囦欢鏃ユ湡yyyy-MM-dd
+ * @param maxCreateTime 鏌ユ壘鏂囦欢鐨勮捣濮嬫椂闂磞yyy-MM-dd HH:mm:ss锛岃淇濊瘉鍜宻earchDate鏄悓涓�澶╋紝鍚﹀垯鎶ラ敊銆傞粯璁や粠 yyyy-MM-dd 00:00:00寮�濮嬶紝闈炲繀濉紝鍙紶nil
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getIncrCloudVideos:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ videoType:(EZCloudVideoType)videoType
+ searchDate:(NSString *)searchDate
+ maxCreateTime:(NSString *)maxCreateTime
+ completion:(void (^)(NSArray *abstractvideos, NSError *error))completion;
+
+/**
+ * 鏍规嵁鏂囦欢id鎵归噺鏌ヨ璇︽儏淇℃伅鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param videos 褰曞儚姒傝淇℃伅鏁扮粍
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getCloudVideoDetails:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ videos:(NSArray *)videos
+ completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
+
+#pragma mark - 鍛婅鐩稿叧Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧憡璀︿俊鎭垪琛紝璁惧搴忓垪鍙蜂负nil鏃舵煡璇㈡暣涓处鎴蜂笅鐨勫憡璀︿俊鎭垪琛�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param beginTime 鎼滅储鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鎼滅储鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZAlarmInfo鐨勫璞℃暟鎹拰鏌ヨ鏃堕棿鑼冨洿鍐呯殑鍛婅涓暟鐨勬�绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getAlarmList:(NSString *)deviceSerial
+ pageIndex:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *alarmList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ * @param data 闇�瑕佽В瀵嗙殑鏁版嵁
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ *
+ * @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
+
+/**
+ * 鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ * @param data 闇�瑕佽В瀵嗙殑鏁版嵁
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param type 1:璁惧鍔犲瘑锛�2锛氬钩鍙板姞瀵�
+ *
+ * @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
+
+/**
+ * 璁剧疆鍛婅淇℃伅涓哄凡璇绘帴鍙�
+ *
+ * @param alarmIds 鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓猧d,鍚﹀垯浼氭姤閿�
+ * @param status 鍛婅娑堟伅鐘舵��
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿缃垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setAlarmStatus:(NSArray *)alarmIds
+ alarmStatus:(EZMessageStatus)status
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁alarmId鍒犻櫎鍛婅淇℃伅鎺ュ彛
+ *
+ * @param alarmIds 鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓狪d锛屽惁鍒欎細鎶ラ敊
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteAlarm:(NSArray *)alarmIds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栨湭璇绘秷鎭暟锛岃澶囧簭鍒楀彿涓虹┖鏃惰幏鍙栨墍鏈夎澶囩殑鏈娑堟伅鏁�
+ *
+ * @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙凤紝涓虹┖鏃惰繑鍥炶处鎴蜂笅鎵�鏈夎澶囩殑鏈娑堟伅鏁�
+ * @param type 娑堟伅绫诲瀷锛欵ZMessageTypeAlarm 鍛婅娑堟伅锛�1锛夛紝EZMessageTypeLeave 鐣欒█娑堟伅锛�2锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖鏈鏁伴噺锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getUnreadMessageCount:(NSString *)deviceSerial
+ messageType:(EZMessageType)type
+ completion:(void (^)(NSInteger count, NSError *error))completion;
+
+#pragma mark - 璇煶鐣欒█娑堟伅鏁版嵁Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囩殑鐣欒█娑堟伅鍒楄〃
+ *
+ * @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙�
+ * @param beginTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿
+ * @param pageIndex 鍒嗛〉椤电爜
+ * @param pageSize 鍒嗛〉鍗曢〉鏁伴噺
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZLeaveMessage鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getLeaveMessageList:(NSString *)deviceSerial
+ pageIndex:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鏍规嵁leaveId璁剧疆鐣欒█娑堟伅鐘舵��
+ *
+ * @param leaveIds 鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ * @param status 闇�瑕佽缃殑鐣欒█鐘舵�侊紝鐩墠鍙敮鎸� EZMessageStatusRead(宸茶)
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setLeaveMessageStatus:(NSArray *)leaveIds
+ messageStatus:(EZMessageStatus)status
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁leaveId鍒犻櫎鐣欒█娑堟伅
+ *
+ * @param leaveIds 鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鍒犻櫎鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteLeaveMessage:(NSArray *)leaveIds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁EZLeaveMessage瀵硅薄淇℃伅鑾峰彇璇煶鐣欒█娑堟伅鏁版嵁鎺ュ彛
+ * @param message 鐣欒█娑堟伅瀵硅薄
+ * @param completion 鍥炶皟block 锛坮esultCode = 1 琛ㄧず璇煶涓嬭浇鎴愬姛锛�-1琛ㄧず涓嬭浇澶辫触锛�
+ *
+ * @return operation
+ */
++ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
+ completion:(void (^)(NSData *data, NSInteger resultCode))completion;
+
+#pragma mark - VideoTalk瑙嗛閫氳瘽鐩稿叧Api
+
+/**
+ * 鑾峰彇鎵嬭〃鏈嶅姟鐩稿叧淇℃伅
+ * @param deviceId 璁惧搴忓垪鍙�
+ * @param completion operation
+ */
++ (void)requestGetWatchServerInfo:(NSString *)deviceId
+ completion:(void (^)(id watchServerInfo, NSError *error))completion;
+
+#pragma mark - WiFi閰嶇綉鐩稿叧Api
+
+/**
+ * 灏濊瘯鏌ヨ璁惧淇℃伅锛岃澶嘩ifi閰嶇疆鍓嶆煡璇竴娆¤澶囩殑淇℃伅
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param deviceType 璁惧鍨嬪彿锛屾棤娉曡幏鍙栧埌璁惧鍨嬪彿鍒欏彲浼爊il
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ * @see 鍏ㄦ柊鐨勮澶囨槸娌℃湁娉ㄥ唽鍒板钩鍙扮殑锛屾墍浠ヤ細鍑虹幇璁惧涓嶅瓨鍦ㄧ殑鎯呭喌锛岃澶噖ifi閰嶇疆鎴愬姛浠ュ悗浼氫笂鎶ユ暟鎹埌钀ょ煶浜戝钩鍙帮紝浠ュ悗姣忔鏌ヨ灏变笉浼氬嚭鐜拌澶囦笉瀛樺湪鐨勬儏鍐典簡銆�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)probeDeviceInfo:(NSString *)deviceSerial
+ deviceType:(NSString *)deviceType
+ completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�
+ * @param statusBlock 杩斿洖杩炴帴璁惧鐨刉iFi閰嶇疆鐘舵��
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
+ * @param mode 閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
+ * @param statusBlock 杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ mode:(NSInteger)mode
+ deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * @since 3.0.0
+ * Wifi閰嶇疆鍋滄鎺ュ彛
+ *
+ * @return YES/NO
+ */
++ (BOOL)stopConfigWifi;
+
+#pragma mark - AP閰嶇綉鐩稿叧Api
+
+/**
+ * AP閰嶇綉鎺ュ彛
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param callback 缁撴灉鍥炶皟锛屾敞鎰忥細杩斿洖YES浠呬粎浠h〃鎴愬姛灏哤iFi淇℃伅鍙戦�佺粰璁惧锛屼笉浠h〃璁惧閰嶇綉鎴愬姛
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ result:(void (^)(BOOL ret))callback;
+
+/**
+ * AP閰嶇綉鎺ュ彛锛堟帹鑽愶紝v5.0鏂板锛屽皝瑁呬簡璁惧鐘舵�佽疆璇㈡楠わ級
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param statusBlock 缁撴灉鍥炶皟锛岃繑鍥為厤缃戣繃绋嬩腑鐨勫悇绉嶇姸鎬�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * 鍋滄AP閰嶇綉
+ */
++ (void)stopAPConfigWifi;
+
+#pragma mark - 鎺ヨЕ寮忛厤缃� New AP Config
+
+/**
+ * 鑾峰彇鎺ヨЕ寮廇P閰嶇綉token
+ *
+ * @param completion 鍥炶皟
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getNewApConfigToken:(void(^)(EZConfigTokenInfo *tokenInfo, NSError *error))completion;
+
+/**
+ * 寮�濮婲ewAP閰嶇綉锛堥渶杩炴帴璁惧鐑偣锛�
+ * @param token 閰嶇綉token
+ * @param ssid WiFi ssid
+ * @param password WiFi 瀵嗙爜
+ * @param lbsDomain lbs 鍩熷悕
+ * @param handler 鍥炶皟
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startNewApConfigWithToken:(NSString *)token
+ ssid:(NSString *)ssid
+ password:(NSString *)password
+ lbsDomain:(NSString *)lbsDomain
+ completionHandler:(void(^)(EZNewAPConfigStatus status, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧鐘舵�侊紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceInfo:(void(^)(EZAPDevInfo *devInfo, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧褰撳墠鍛ㄨ竟WiFi鍒楄〃锛屼笂闄�20涓紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceWifiList:(void(^)(NSArray<EZWiFiItemInfo*> *wifiList, NSError *error))handler;
+
+/**
+ * 鏌ヨ璁惧缁戝畾鐘舵��
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (NSURLSessionDataTask *)queryPlatformBindStatus:(NSString *)deviceSerial
+ completion:(void(^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 璁剧疆閰嶇綉璁惧缃戝叧鍦板潃 鍙��
+ * @param devRouteDomain 璁惧缃戝叧鍦板潃
+ */
++ (void)setDevRouteDomain:(NSString *)devRouteDomain;
+
+#pragma mark - 鐢ㄦ埛鐩稿叧Api
+
+/**
+ * 鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅鐨勬帴鍙�
+ *
+ * @param completion 鍥炶皟block锛� 姝e父鏃惰繑鍥濫ZUserInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getUserInfo:(void (^)(EZUserInfo *userInfo, NSError *error))completion;
+
+#pragma mark - 鍏朵粬Api
+
+/**
+ * 鑾峰彇鍖哄煙鍒楄〃鎺ュ彛
+ *
+ * @param completion 鍥炶皟block锛宎reaList涓殑鍏冪礌涓篍ZAreaInfo瀵硅薄
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getAreaList:(void (^)(NSArray *areaList, NSError *error))completion;
+
+/**
+ * 鑾峰彇缁堢锛堟墜鏈虹瓑锛夊敮涓�璇嗗埆鐮�
+ *
+ * @return 缁堢鍞竴璇嗗埆鐮�
+ */
++ (NSString *)getTerminalId;
+
+/**
+ 鏍规嵁搴旂敤绫诲瀷鍒ゆ柇鏄惁瀹夎浜嗗搴旂殑搴旂敤
+
+ @param appType 搴旂敤绫诲瀷
+ @return YES:宸插畨瑁咃紝NO:娌℃湁瀹夎鎴栧畨瑁呯殑钀ょ煶APP鐗堟湰杩囦綆
+ */
+//+ (BOOL)isEzvizAppInstalledWithType:(EZAppType)appType;
+
+
+/**
+ 璺宠浆鍒版寚瀹氳悿鐭矨PP杩涜鎺堟潈鐧诲綍
+
+ @param appType 钀ょ煶APP绫诲瀷
+ @return 璺宠浆缁撴灉
+ */
+//+ (BOOL)ezvizLoginWithAppType:(EZAppType)appType;
+
+/**
+ 璺宠浆鍒版寚瀹欰PP鐨勬寚瀹氱晫闈�
+
+ @param pageType 鐣岄潰绫诲瀷
+ @param appType APP绫诲瀷
+ @return 璺宠浆缁撴灉
+ */
+//+ (BOOL)gotoEzvizAppPage:(EZAppPageType)pageType appType:(EZAppType)appType;
+
+#pragma mark - DDNS鐩稿叧
+
+/**
+ * 閫氳繃璁惧搴忓垪鍙峰拰璁惧鍩熷悕鑾峰彇璁惧ddns淇℃伅
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param domain 璁惧鍩熷悕
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getHiddnsDeviceInfo:(NSString *)deviceSerial
+ domain:(NSString *)domain
+ completion:(void (^)(EZHiddnsDeviceInfo *ddnsDeviceInfo, NSError *error))completion;
+
+/**
+ * 璇ユ帴鍙g敤浜庤缃澶嘾dns鍩熷悕锛屽寘鎷缃垎浜幏寰楃殑璁惧鐨刣dns鍩熷悕
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param domain 璁惧鍩熷悕,璁惧鍩熷悕瑙勫垯淇敼锛屼笉鑳戒负绌猴紝6-32浣嶏紝鍙互涓烘湰韬簭鍒楀彿锛屽寘鍚皬鍐欏瓧姣嶃�佹暟瀛椼��-锛岄浣嶅繀椤诲瓧姣嶏紝鏈綅涓嶈兘涓�-
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setHiddnsDomain:(NSString *)deviceSerial
+ domain:(NSString *)domain
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 璁剧疆璁惧鐨凞DNS鏄犲皠鏂瑰紡涓鸿嚜鍔ㄦ槧灏�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setHiddnsModeAuto:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 璁剧疆璁惧鐨凞DNS鏄犲皠鏂瑰紡涓烘墜鍔ㄦ槧灏�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param httpPort http绔彛鍙�
+ * @param cmdPort 鏈嶅姟绔彛鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setHiddnsModeManual:(NSString *)deviceSerial
+ httpPort:(NSInteger)httpPort
+ cmdPort:(NSInteger)cmdPort
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇褰撳墠璐﹀彿涓嬬殑鎵�鏈夎澶囩殑DDNS淇℃伅
+ *
+ * @param pageIndex 鍒嗛〉璧峰椤碉紝浠�0寮�濮嬶紝榛樿涓�0
+ * @param pageSize 鍒嗛〉澶у皬锛岄粯璁や负10锛屾渶澶т负50
+ * @param completion 鍥炶皟block ddnsDeviceList涓璞′负EZHiddnsDeviceInfo
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getHiddnsDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *ddnsDeviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鎶婂崟涓澶囩殑DDNS淇℃伅鍒嗕韩缁欏叾浠栬处鎴�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param account 琚垎浜处鎴凤紝鍙互鏄偖绠卞湴鍧�鎴栨墜鏈哄彿鐮侊紙鍖呭惈鍥藉浠g爜锛夋垨涓嶆槸鍏ㄦ暟瀛楃殑鐢ㄦ埛鍚�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)shareHiddnsDevice:(NSString *)deviceSerial
+ account:(NSString *)account
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇褰撳墠璐﹀彿涓嬬殑鎵�鏈夌殑鍏跺畠璐︽埛鍒嗕韩缁欒嚜宸辩殑璁惧DDNS淇℃伅
+ *
+ * @param pageIndex 鍒嗛〉璧峰椤碉紝浠�0寮�濮嬶紝榛樿涓�0
+ * @param pageSize 鍒嗛〉澶у皬锛岄粯璁や负10锛屾渶澶т负50
+ * @param completion 鍥炶皟block ddnsDeviceList涓璞′负EZHiddnsDeviceInfo
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getShareHiddnsDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *ddnsDeviceList, NSInteger totalCount, NSError *error))completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZHCNetDeviceSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZHCNetDeviceSDK.h
new file mode 100644
index 0000000..fa3a71f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZHCNetDeviceSDK.h
@@ -0,0 +1,146 @@
+//
+// EZHCNetDeviceSDK.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/8/15.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class EZHCNetDeviceInfo, EZSADPDeviceInfo;
+
+typedef NS_ENUM(int, EZPTZCommandType) {
+ EZPTZCommandType_ZOOM_IN = 11, /* 鐒﹁窛鍙樺ぇ(鍊嶇巼鍙樺ぇ) */
+ EZPTZCommandType_ZOOM_OUT = 12, /* 鐒﹁窛鍙樺皬(鍊嶇巼鍙樺皬) */
+ EZPTZCommandType_UP = 21, /* 浜戝彴涓婁话 */
+ EZPTZCommandType_DOWN, /* 浜戝彴涓嬩刊 */
+ EZPTZCommandType_LEFT, /* 浜戝彴宸﹁浆 */
+ EZPTZCommandType_RIGHT, /* 浜戝彴鍙宠浆 */
+ EZPTZCommandType_UP_LEFT, /* 浜戝彴涓婁话鍜屽乏杞� */
+ EZPTZCommandType_UP_RIGHT, /* 浜戝彴涓婁话鍜屽彸杞� */
+ EZPTZCommandType_DOWN_LEFT, /* 浜戝彴涓嬩刊鍜屽乏杞� */
+ EZPTZCommandType_DOWN_RIGHT, /* 浜戝彴涓嬩刊鍜屽彸杞� */
+ EZPTZCommandType_PAN_AUTO, /* 浜戝彴宸﹀彸鑷姩鎵弿 */
+ EZPTZCommandType_MAX /* 瓒婄晫鏍囪瘑 */
+};
+
+typedef NS_ENUM(int, EZPTZActionType) {
+ EZPTZActionType_START = 0, /* 寮�濮� */
+ EZPTZActionType_STOP, /* 鍋滄 */
+ EZPTZActionType_MAX /* 瓒婄晫鏍囪瘑 */
+};
+
+typedef NS_ENUM(int, EZEncryptType) {
+ EZEncryptType_OEMBlue = 0, //钃濈簿鐏靛姞瀵�
+ EZEncryptType_OEMGreen, //缁垮法浜哄姞瀵�
+ EZEncryptType_normal //娌℃湁鍔犲瘑
+};
+
+@interface EZHCNetDeviceSDK : NSObject
+
+/**
+ 鍒濆鍖朣DK
+ */
++ (void)initSDK;
+
+/**
+ 寮�濮嬫悳绱㈠眬鍩熺綉璁惧
+
+ @param searchCallback 鎼滅储缁撴灉鍥炶皟锛屾瘡鎼滃埌涓�涓澶囬兘浼氬洖璋冧竴娆★紝璁惧淇℃伅EZSADPDeviceInfo
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startLocalSearch:(void(^)(EZSADPDeviceInfo *device,NSError *error))searchCallback;
+
+/**
+ 鍋滄鎼滅储
+
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)stopLocalSearch;
+
+/**
+ 娓呴櫎缁撴灉锛岄噸鏂版悳绱紝鍓嶆彁鏄箣鍓嶅紑鍚繃鎼滅储
+ */
++ (void)research;
+
+/**
+ 鑾峰彇SADP鐗堟湰鍙�
+ */
++ (int)getSadpVersion;
+
+/**
+ 婵�娲昏澶囷紝璋冪敤stopLocalSearch鍚庡皢鏃犳硶婵�娲昏澶�
+
+ @param serial 璁惧搴忓垪鍙�
+ @param pwd 婵�娲诲瘑鐮�
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)activeDeviceWithSerial:(NSString *)serial pwd:(NSString *)pwd;
+
+/**
+ 鐧诲綍灞�鍩熺綉璁惧
+
+ @param userName 鐢ㄦ埛鍚�
+ @param pwd 鐢ㄦ埛瀵嗙爜
+ @param ipAddr 璁惧ip鍦板潃
+ @param port 璁惧绔彛鍙�
+ @return 鐧诲綍閿欒鏃惰繑鍥瀗il
+ */
++ (EZHCNetDeviceInfo *)loginDeviceWithUerName:(NSString *)userName
+ pwd:(NSString *)pwd
+ ipAddr:(NSString *)ipAddr
+ port:(NSInteger)port;
+
+/**
+ 鐧诲嚭灞�鍩熺綉璁惧
+
+ @param userId 鐢ㄦ埛id
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)logoutDeviceWithUserId:(NSInteger)userId;
+
+/**
+ 灞�鍩熺綉璁惧浜戝彴鎺у埗鎺ュ彛
+
+ @param userId 鐢ㄦ埛id
+ @param channelNo 閫氶亾鍙�
+ @param command 鍛戒护绫诲瀷 EZPTZCommandType
+ @param action 鍔ㄤ綔绫诲瀷 EZPTZActionType
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)ptzControlWithUserId:(NSInteger)userId
+ channelNo:(NSInteger)channelNo
+ command:(EZPTZCommandType)command
+ action:(EZPTZActionType)action;
+
+/**
+ 璁剧疆鍔犲瘑鏂瑰紡
+
+ @param encryptType 鍔犲瘑鏂瑰紡
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)setEncryptType:(EZEncryptType)encryptType;
+
+/**
+ AP閰嶇綉鎺ュ彛
+
+ @param ssid WiFi鐨剆sid
+ @param password WiFi鐨勫瘑鐮�
+ @param deviceSerial 璁惧搴忓垪鍙�
+ @param verifyCode 璁惧楠岃瘉鐮�
+ @param callback 缁撴灉鍥炶皟
+ @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ result:(void (^)(BOOL ret))callback;
+
+/**
+ 鍋滄AP閰嶇綉
+ */
++ (void)stopAPConfigWifi;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZOpenSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZOpenSDK.h
new file mode 100644
index 0000000..47fc8e3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZOpenSDK.h
@@ -0,0 +1,946 @@
+//
+// EZOpenSDK.h
+// EZOpenSDK
+//
+// Created by JuneCheng on 2022/7/18.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZConstants.h"
+#import "EZConstants_Auth.h"
+#import "EZConstants_WifiConfig.h"
+
+@class EZPlayer;
+@class EZDeviceInfo;
+@class EZAccessToken;
+@class EZCameraInfo;
+@class EZDeviceVersion;
+@class EZUserInfo;
+@class EZProbeDeviceInfo;
+@class EZDeviceUpgradeStatus;
+@class EZLeaveMessage;
+@class EZWiFiItemInfo, EZAPDevInfo, EZConfigTokenInfo;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZOpenSDK : NSObject
+
+#pragma mark - Auth璁よ瘉鐩稿叧Api
+
+/**
+ * 瀹炰緥EZOpenSDK鎺ュ彛
+ *
+ * @param appKey 浼犲叆鐢宠鐨刟ppKey
+ *
+ * @return YES/NO
+ */
++ (BOOL)initLibWithAppKey:(NSString *)appKey;
+
+/**
+ * 鍒濆鍖栨帴鍙o紝鍙缃湇鍔″櫒锛屾捣澶栫敤鎴蜂娇鐢ㄨ鍒濆鍖栨柟娉�
+ *
+ * @param appKey 浼犲叆鐢宠鐨刟ppKey
+ * @param apiUrl apiUrl鍦板潃
+ * @param authUrl auth鍦板潃
+ *
+ * @return YES/NO
+ */
++ (BOOL)initLibWithAppKey:(NSString *)appKey
+ url:(NSString *)apiUrl
+ authUrl:(NSString *)authUrl;
+
+/**
+ * 閿�姣丒ZOpenSDK鎺ュ彛
+ *
+ * @return YES/NO
+ */
++ (BOOL)destoryLib;
+
+/**
+ * 璁剧疆鏄惁鎵撳嵃debug鏃ュ織,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ * @param enable 鏄惁鎵撳嵃鏃ュ織锛岄粯璁ゅ叧闂�
+ *
+ * @return YES/NO
+ */
++ (BOOL)setDebugLogEnable:(BOOL)enable;
+
+/**
+ * 璁剧疆debug鏃ュ織鍥炶皟,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ * @param logCallback 鏃ュ織鍥炶皟
+ */
++ (void)setDebugLogCallBack:(void(^)(NSString *logStr))logCallback;
+
+/**
+ * 鎵撳紑鎺堟潈鐧诲綍涓棿椤甸潰鎺ュ彛
+ *
+ * @param block 鍥炶皟block
+*/
++ (void)openLoginPage:(void (^)(EZAccessToken *accessToken))block;
+
+/**
+ * 鎺堟潈鐧诲綍浠ュ悗缁橢ZOpenSDK璁剧疆accessToken鎺ュ彛
+ *
+ * @param accessToken 鎺堟潈鐧诲綍鑾峰彇鐨刟ccessToken
+ */
++ (void)setAccessToken:(NSString *)accessToken;
+
+/**
+ * 璐︽埛娉ㄩ攢鎺ュ彛
+ *
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鐧诲嚭鎴愬姛
+ */
++ (void)logout:(void (^)(NSError *error))completion;
+
+
+/**
+ 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS9浠ヤ笂锛屽寘鎷琲OS9
+
+ @param url 璺宠浆杩囨潵鐨剈rl
+ @param options 鍙傛暟锛岄粯璁や负绌猴紝鐩墠鏈繘琛屽鐞嗭紝棰勭暀
+ @param delegate 濮旀墭
+ @return 缁撴灉
+ */
++ (BOOL)handleOpenUrl:(NSURL *)url options:(NSDictionary *)options delegate:(id<EZOpenSDKDelegate>)delegate;
+
+/**
+ * 鑾峰彇SDK鐗堟湰鍙锋帴鍙�
+ *
+ * @return 鐗堟湰鍙�
+ */
++ (NSString *)getVersion;
+
+/**
+ * 鎵撳紑浜戝瓨鍌ㄤ腑闂撮〉
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 璁惧閫氶亾鍙�
+ */
++ (void)openCloudPage:(NSString *)deviceSerial channelNo:(NSInteger)channelNo;
+
+/**
+ * 鎵撳紑淇敼瀵嗙爜涓棿椤�
+ *
+ * @param completion 鍥炶皟block resultCode涓�0鏃惰〃绀轰慨鏀瑰瘑鐮佹垚鍔�
+ */
++ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;
+
+/**
+ 鏄惁宸茬粡鐧诲綍
+
+ @return YES锛氬凡缁忕櫥褰曪紱NO锛氭湭鐧诲綍
+ */
++ (BOOL)isLogin;
+
+/**
+ 鑾峰彇褰撳墠accessToken
+
+ @return accessToken
+ */
++ (NSString *)getAccesstoken;
+
+#pragma mark - 鎾斁鍣ㄥ垱寤篈pi
+
+/**
+ * 鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo;
+
+/**
+ * 鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄锛坒or 鍥芥爣锛�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param strCameraNo 閫氶亾鍙�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ strCameraNo:(NSString *)strCameraNo DEPRECATED_MSG_ATTRIBUTE("use createPlayerWithDeviceSerial:cameraNo: instead");
+
+/**
+ * 涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 铏氭嫙閫氶亾
+ * @param useSubStream 鏄惁浣跨敤瀛愮爜娴�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ useSubStream:(BOOL)useSubStream;
+
+/**
+ * 鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
+ *
+ * @param url 鎾斁url锛岀洰鍓嶅彧鏀寔璇ュ崗璁細ysproto://vtm.ys7.com:8554/live?dev=531993276&chn=1&stream=1&cln=1&isp=0&biz=3
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithUrl:(NSString *)url;
+
+
+/**
+ * 閲婃斁EZPlayer瀵硅薄
+ *
+ * @param player EZPlayer瀵硅薄
+ *
+ * @return YES/NO
+ */
++ (BOOL)releasePlayer:(EZPlayer *)player;
+
+#pragma mark - 鍙栨祦鐩稿叧Api
+
+/**
+ * 璁剧疆p2p鍔熻兘鏄惁寮�鍚帴鍙o紝榛樿涓嶅紑鍚痯2p锛岀敤鎴疯嚜宸遍�夋嫨鏄惁寮�鍚�
+ *
+ * @param enable p2p鏄惁寮�鍚�
+ */
++ (void)enableP2P:(BOOL)enable;
+
+/**
+ * 娓呴櫎鍙栨祦鏃剁殑缂撳瓨鏁版嵁
+ */
++ (void)clearStreamInfoCache;
+
+/**
+ * 鏄惁鏀寔鍥芥爣
+ * @param enable YES or NO
+ */
++ (void)enableNationalStandard:(BOOL)enable;
+
+/**
+ * 鑾峰彇鎵�鏈夌殑p2p棰勮繛鎺ヨ澶囧簭鍒楀彿锛堝寘鎷鍦ㄨ繘琛岄鎿嶄綔鐨勪互鍙婇鎿嶄綔瀹屾垚鐨勶級
+ *
+ * @return 璁惧搴忓垪鍙锋暟缁�
+ */
++ (NSArray<NSString *> *)getAllProcessedPreconnectSerials;
+
+/**
+ * 鑾峰彇鎵�鏈夋鍦ㄦ帓闃熺殑p2p棰勮繛鎺ヨ澶囧簭鍒楀彿锛堟寚杩樻病鏈夎繘琛岄鎿嶄綔鐨勶級
+ *
+ * @return 璁惧搴忓垪鍙锋暟缁�
+ */
++ (NSArray<NSString *> *)getAllToDoPreconnectSerials;
+
+/**
+ * 瀵规煇涓�璁惧杩涜p2p棰勮繛鎺ユ搷浣�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ */
++ (void)startP2PPreconnect:(NSString *)deviceSerial;
+
+/**
+ * 瀵规煇涓�璁惧杩涜p2p棰勮繛鎺ユ竻闄ゆ搷浣�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ */
++ (void)clearP2PPreconnect:(NSString *)deviceSerial;
+
+#pragma mark - 褰曞儚鏌ヨApi
+
+/**
+ * 鏌ヨ浜戝瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZCloudRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromCloud:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
+
+/**
+ * 鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
+
+/**
+ * 鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙o紝鍚屼竴涓綍鍍忓彲浠ュ悓鏃舵槸瀹氭椂褰曞儚鍜屼簨浠跺綍鍍�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param beginTime 鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param videoRecordType 褰曞儚绫诲瀷
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ videoRecordType:(EZVideoRecordType)videoRecordType
+ completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
+
+/**
+ * 鑾峰彇鎸囧畾鏃堕棿鍐呯殑鎵�鏈夊綍鍍忔枃浠�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙凤紝浼犲叆<=0鐨勫�煎垯涓洪粯璁ゅ��
+ * @param beginTime 寮�濮嬫椂闂达紝浼犲叆nil鍒欎负褰撳ぉ00:00:00
+ * @param endTime 缁撴潫鏃堕棿锛屼紶鍏il鍒欎负褰撳ぉ23:59:59
+ * @param rectype 鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚銆傞潪蹇呴�夛紝榛樿涓�0锛屼紶鍏ヨ礋鍊煎垯涓洪粯璁ゅ��
+ * @param bizType 璁惧褰掑睘涓氬姟鏉ユ簮
+ * @param platFormId 骞冲彴ID
+ * @param completion 鍥炶皟block records:EzvizRecordFileInfo鐨勬暟缁�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFile:(NSString *)deviceSerial
+ cameraNo:(NSString *)cameraNo
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ recType:(NSInteger)rectype
+ bizType:(NSString *)bizType
+ platFormId:(NSString *)platFormId
+ completion:(void (^)(id records, NSError *error))completion;
+
+#pragma mark - 璁惧鐩稿叧Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)addDevice:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鍒楄〃
+ *
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鑾峰彇鍒嗕韩缁欑敤鎴风殑璁惧鍒楄〃鎺ュ彛
+ *
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getSharedDeviceList:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鏍规嵁搴忓垪鍙疯幏鍙栬澶囦俊鎭�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceInfo:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 鑾峰彇璁惧鐨勭増鏈俊鎭帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceVersion鐨勫璞′俊鎭紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceVersion:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;
+
+/**
+ * 閫氳繃璁惧楠岃瘉鐮佸紑鍏宠棰戝浘鐗囧姞瀵嗘帴鍙�
+ *
+ * @param isEncrypt 鏄惁鍔犲瘑锛屽彧鏈塏O(鍏抽棴)鐨勬椂鍊欓渶瑕佽澶囬獙璇佺爜鐨勭浉鍏冲弬鏁�(vaildateCode)
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceEncryptStatus:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ encrypt:(BOOL)isEncrypt
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙蜂慨鏀硅澶囧悕绉版帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param deviceName 璁惧鍚嶇О
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀轰慨鏀规垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceName:(NSString *)deviceName
+ deviceSerial:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰垹闄ゅ綋鍓嶈处鍙风殑璁惧鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ * @see 璇ユ帴鍙d笌缁堢缁戝畾鍔熻兘鐩稿叧锛屼細閬囧埌鍒犻櫎鏃舵姤106002鐨勯敊璇紝璇峰叧闂粓绔粦瀹氫互鍚庡啀璇�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteDevice:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧瓨鍌ㄤ粙璐ㄧ姸鎬�(濡傛槸鍚﹀垵濮嬪寲锛屾牸寮忓寲杩涘害绛�)
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZStorageInfo鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getStorageStatus:(NSString *)deviceSerial
+ completion:(void (^)(NSArray *storageStatus, NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰鍒嗗尯缂栧彿鏍煎紡鍖栧垎鍖猴紙SD鍗★級
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param storageIndex 鏌ヨ杩斿洖鐨勫垎鍖哄彿锛�0琛ㄧず鍏ㄩ儴鏍煎紡鍖栵紝鍙兘浼氭湁鍑犲潡纭洏鐨勬儏鍐�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)formatStorage:(NSString *)deviceSerial
+ storageIndex:(NSInteger)storageIndex
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囧崌绾ф椂鐨勮繘搴︾姸鎬�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceUpgradeStatus瀵硅薄锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceUpgradeStatus:(NSString *)deviceSerial
+ completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;
+
+/**
+ * 閫氳繃璁惧搴忓垪鍙峰璁惧杩涜鍗囩骇鎿嶄綔锛屽墠鎻愭槸璇ヨ澶囨湁鏇存柊杞欢鐨勬彁绀�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鎿嶄綔鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)upgradeDevice:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鑾峰彇鎶撳彇鎽勫儚澶村浘鐗囩殑url鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖url鍦板潃淇℃伅锛岄敊璇椂杩斿洖閿欒鐮�
+ * @see 璇ユ帴鍙f瘮杈冭�楁椂锛屼笉寤鸿杩涜鎵归噺璁惧鎶撳浘锛孲DK鍐呴儴鍙敮鎸�6涓猦ttp璇锋眰骞跺彂锛岃鎺ュ彛浼氭寔缁崰鐢╤ttp璇锋眰璧勬簮锛屽鏋滈亣鍒癶ttp璇锋眰寤舵椂宸ㄥぇ闂锛屼紭鍏堣�冭檻鎶撳浘鎺ュ彛骞跺彂閫犳垚鐨勯棶棰�,
+ * 鎶撳浘灏嗗湪鏈嶅姟鍣ㄧ淇濈暀2涓皬鏃�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)captureCamera:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ completion:(void (^)(NSString *url, NSError *error))completion;
+
+/**
+ * 璁剧疆璁惧閫氶亾鐨勬竻鏅板害
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param videoLevel 閫氶亾娓呮櫚搴︼紝0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+ * @param completion 鍥炶皟block锛屾棤error琛ㄧず璁剧疆鎴愬姛
+ * @see 濡傛灉鏄鍦ㄦ挱鏀炬椂璋冪敤璇ユ帴鍙o紝璁剧疆娓呮櫚搴︽垚鍔熶互鍚庡繀椤昏EZPlayer璋冪敤stopRealPlay鍐嶈皟鐢╯tartRealPlay閲嶆柊鍙栨祦鎵嶆垚瀹屾垚鐢婚潰娓呮櫚搴︾殑鍒囨崲銆�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setVideoLevel:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ videoLevel:(EZVideoLevelType)videoLevel
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 璁惧璁剧疆甯冮槻鐘舵�侊紝鍏煎A1鍜孖PC璁惧鐨勫竷闃�
+ *
+ * @param defence 甯冮槻鐘舵��, IPC甯冮槻鐘舵�佸彧鏈�0鍜�1锛孉1鏈�0:鐫$湢 8:鍦ㄥ 16:澶栧嚭
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setDefence:(EZDefenceStatus)defence
+ deviceSerial:(NSString *)deviceSerial
+ completion:(void (^)(NSError *error))completion;
+
+#pragma mark - 浜戝彴鎺у埗Api
+
+/**
+ * PTZ 鎺у埗鎺ュ彛
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param command ptz鎺у埗鍛戒护
+ * @param action 鎺у埗鍚姩/鍋滄
+ * @param speed 浜戝彴閫熷害锛�0-鎱紝1-閫備腑锛�2-蹇�
+ * @param resultBlock 鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)controlPTZ:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ command:(EZPTZCommand)command
+ action:(EZPTZAction)action
+ speed:(NSInteger)speed
+ result:(void (^)(NSError *error))resultBlock;
+
+/**
+ * 鎽勫儚澶存樉绀烘帶鍒舵帴鍙�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ * @param command 鏄剧ず鎺у埗鍛戒护
+ * @param resultBlock 鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ */
++ (void)controlVideoFlip:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ command:(EZDisplayCommand)command
+ result:(void (^)(NSError *error))resultBlock;
+
+#pragma mark - 鍛婅鐩稿叧Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栧憡璀︿俊鎭垪琛紝璁惧搴忓垪鍙蜂负nil鏃舵煡璇㈡暣涓处鎴蜂笅鐨勫憡璀︿俊鎭垪琛�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param pageIndex 鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ * @param pageSize 鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ * @param beginTime 鎼滅储鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ * @param endTime 鎼滅储鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZAlarmInfo鐨勫璞℃暟鎹拰鏌ヨ鏃堕棿鑼冨洿鍐呯殑鍛婅涓暟鐨勬�绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getAlarmList:(NSString *)deviceSerial
+ pageIndex:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *alarmList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ * @param data 闇�瑕佽В瀵嗙殑鏁版嵁
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ *
+ * @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
+
+/**
+ * 鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ * @param data 闇�瑕佽В瀵嗙殑鏁版嵁
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param type 1:璁惧鍔犲瘑锛�2锛氬钩鍙板姞瀵�
+ *
+ * @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
+
+/**
+ * 璁剧疆鍛婅淇℃伅涓哄凡璇绘帴鍙�
+ *
+ * @param alarmIds 鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓猧d,鍚﹀垯浼氭姤閿�
+ * @param status 鍛婅娑堟伅鐘舵��
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿缃垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setAlarmStatus:(NSArray *)alarmIds
+ alarmStatus:(EZMessageStatus)status
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁alarmId鍒犻櫎鍛婅淇℃伅鎺ュ彛
+ *
+ * @param alarmIds 鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓狪d锛屽惁鍒欎細鎶ラ敊
+ * @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteAlarm:(NSArray *)alarmIds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栨湭璇绘秷鎭暟锛岃澶囧簭鍒楀彿涓虹┖鏃惰幏鍙栨墍鏈夎澶囩殑鏈娑堟伅鏁�
+ *
+ * @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙凤紝涓虹┖鏃惰繑鍥炶处鎴蜂笅鎵�鏈夎澶囩殑鏈娑堟伅鏁�
+ * @param type 娑堟伅绫诲瀷锛欵ZMessageTypeAlarm 鍛婅娑堟伅锛�1锛夛紝EZMessageTypeLeave 鐣欒█娑堟伅锛�2锛�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖鏈鏁伴噺锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getUnreadMessageCount:(NSString *)deviceSerial
+ messageType:(EZMessageType)type
+ completion:(void (^)(NSInteger count, NSError *error))completion;
+
+#pragma mark - 璇煶鐣欒█娑堟伅鏁版嵁Api
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囩殑鐣欒█娑堟伅鍒楄〃
+ *
+ * @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙�
+ * @param beginTime 寮�濮嬫椂闂�
+ * @param endTime 缁撴潫鏃堕棿
+ * @param pageIndex 鍒嗛〉椤电爜
+ * @param pageSize 鍒嗛〉鍗曢〉鏁伴噺
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZLeaveMessage鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getLeaveMessageList:(NSString *)deviceSerial
+ pageIndex:(NSInteger)pageIndex
+ pageSize:(NSInteger)pageSize
+ beginTime:(NSDate *)beginTime
+ endTime:(NSDate *)endTime
+ completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ * 鏍规嵁leaveId璁剧疆鐣欒█娑堟伅鐘舵��
+ *
+ * @param leaveIds 鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ * @param status 闇�瑕佽缃殑鐣欒█鐘舵�侊紝鐩墠鍙敮鎸� EZMessageStatusRead(宸茶)
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)setLeaveMessageStatus:(NSArray *)leaveIds
+ messageStatus:(EZMessageStatus)status
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁leaveId鍒犻櫎鐣欒█娑堟伅
+ *
+ * @param leaveIds 鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ * @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鍒犻櫎鎴愬姛
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)deleteLeaveMessage:(NSArray *)leaveIds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 鏍规嵁EZLeaveMessage瀵硅薄淇℃伅鑾峰彇璇煶鐣欒█娑堟伅鏁版嵁鎺ュ彛
+ * @param message 鐣欒█娑堟伅瀵硅薄
+ * @param completion 鍥炶皟block 锛坮esultCode = 1 琛ㄧず璇煶涓嬭浇鎴愬姛锛�-1琛ㄧず涓嬭浇澶辫触锛�
+ *
+ * @return operation
+ */
++ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
+ completion:(void (^)(NSData *data, NSInteger resultCode))completion;
+
+#pragma mark - VideoTalk瑙嗛閫氳瘽鐩稿叧Api
+
+/**
+ * 鑾峰彇鎵嬭〃鏈嶅姟鐩稿叧淇℃伅
+ * @param deviceId 璁惧搴忓垪鍙�
+ * @param completion operation
+ */
++ (void)requestGetWatchServerInfo:(NSString *)deviceId
+ completion:(void (^)(id watchServerInfo, NSError *error))completion;
+
+/**
+ * 鍒涘缓浼氳淇℃伅
+ * @param password 鑷畾涔夊瘑鐮�
+ * @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+ * @param limit 闄愬埗鏈�澶т汉鏁� 鏈�澶�100
+ * @param completion operation
+ */
++ (void)requestCallingMeetingInfo:(NSString *)password
+ customId:(NSInteger)customId
+ limit:(NSInteger)limit
+ completion:(void (^)(int32_t roomId, NSString *vtmAddress, NSString *clientid, NSInteger customId, NSString *controlServerAddress, NSError *error))completion;
+
+/**
+ * 鍔犲叆鏂硅幏鍙栦細璁俊鎭�
+ * @param roomId 鎴块棿鍙�
+ * @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+ * @param completion operation
+ */
++ (void)requestCalledMeetingInfo:(NSString *)roomId
+ customId:(NSInteger)customId
+ completion:(void (^)(int32_t roomId, NSString *vtmAddress,NSString *clientid, NSInteger customId, NSString *controlServerAddress, NSError *error))completion;
+
+/**
+ * 閭�璇疯澶囪繘鍏ユ埧闂�
+ * @param roomId 鎴块棿鍙�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param streamType 涓诲瓙鐮佹祦 1-涓荤爜娴侊紝2-瀛愮爜娴侊紝mode涓�2鏃跺彲涓嶄紶
+ * @param mode 鍔犲叆妯″紡 1-鍙屽悜闊宠棰戞ā寮忥紙榛樿锛夛紝2-瀵硅妯″紡
+ * @param maxActiveSeconds 鍏ヤ細鏈�闀挎椂闂达紙绉掞級
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)inviteDeviceEnterMeeting:(NSString *)roomId
+ deviceSerial:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ streamType:(NSInteger)streamType
+ mode:(NSInteger)mode
+ maxActiveSeconds:(NSInteger)maxActiveSeconds
+ completion:(void (^)(NSError *error))completion;
+
+/**
+ * 寮哄埗璁惧閫�鍑烘埧闂�
+ * @param roomId 鎴块棿鍙�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param channelNo 閫氶亾鍙�
+ * @param completion 鍥炶皟block
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)kickoutDeviceMoveOutRoom:(NSString *)roomId
+ deviceSerial:(NSString *)deviceSerial
+ channelNo:(NSInteger)channelNo
+ completion:(void (^)(NSError *error))completion;
+
+#pragma mark - WiFi閰嶇綉鐩稿叧Api
+
+/**
+ * 灏濊瘯鏌ヨ璁惧淇℃伅锛岃澶嘩ifi閰嶇疆鍓嶆煡璇竴娆¤澶囩殑淇℃伅
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param deviceType 璁惧鍨嬪彿锛屾棤娉曡幏鍙栧埌璁惧鍨嬪彿鍒欏彲浼爊il
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ * @see 鍏ㄦ柊鐨勮澶囨槸娌℃湁娉ㄥ唽鍒板钩鍙扮殑锛屾墍浠ヤ細鍑虹幇璁惧涓嶅瓨鍦ㄧ殑鎯呭喌锛岃澶噖ifi閰嶇疆鎴愬姛浠ュ悗浼氫笂鎶ユ暟鎹埌钀ょ煶浜戝钩鍙帮紝浠ュ悗姣忔鏌ヨ灏变笉浼氬嚭鐜拌澶囦笉瀛樺湪鐨勬儏鍐典簡銆�
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)probeDeviceInfo:(NSString *)deviceSerial
+ deviceType:(NSString *)deviceType
+ completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�
+ * @param statusBlock 杩斿洖杩炴帴璁惧鐨刉iFi閰嶇疆鐘舵��
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
+ * @param mode 閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
+ * @param statusBlock 杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ mode:(NSInteger)mode
+ deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ * @param ssid 杩炴帴WiFi SSID
+ * @param password 杩炴帴WiFi 瀵嗙爜
+ * @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
+ * @param mode 閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
+ * @param apiUrl 鎸囧畾鍘诲摢涓钩鍙版煡璇�
+ * @param statusBlock 杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
+ *
+ * @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ mode:(NSInteger)mode
+ apiUrl:(NSString *)apiUrl
+ deviceStatus:(void (^)(EZWifiConfigStatus status,NSString *deviceSerial))statusBlock;
+
+/**
+ * @since 3.0.0
+ * Wifi閰嶇疆鍋滄鎺ュ彛
+ *
+ * @return YES/NO
+ */
++ (BOOL)stopConfigWifi;
+
+#pragma mark - AP閰嶇綉鐩稿叧Api
+
+/**
+ * AP閰嶇綉鎺ュ彛
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param callback 缁撴灉鍥炶皟锛屾敞鎰忥細杩斿洖YES浠呬粎浠h〃鎴愬姛灏哤iFi淇℃伅鍙戦�佺粰璁惧锛屼笉浠h〃璁惧閰嶇綉鎴愬姛
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ result:(void (^)(BOOL ret))callback;
+
+/**
+ * AP閰嶇綉鎺ュ彛锛堟帹鑽愶紝v5.0鏂板锛屽皝瑁呬簡璁惧鐘舵�佽疆璇㈡楠わ級
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param statusBlock 缁撴灉鍥炶皟锛岃繑鍥為厤缃戣繃绋嬩腑鐨勫悇绉嶇姸鎬�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+ password:(NSString *)password
+ deviceSerial:(NSString *)deviceSerial
+ verifyCode:(NSString *)verifyCode
+ deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * 鍋滄AP閰嶇綉
+ */
++ (void)stopAPConfigWifi;
+
+#pragma mark - 鎺ヨЕ寮忛厤缃� New AP Config
+
+/**
+ * 鑾峰彇鎺ヨЕ寮廇P閰嶇綉token
+ *
+ * @param completion 鍥炶皟
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getNewApConfigToken:(void(^)(EZConfigTokenInfo *tokenInfo, NSError *error))completion;
+
+/**
+ * 寮�濮婲ewAP閰嶇綉锛堥渶杩炴帴璁惧鐑偣锛�
+ * @param token 閰嶇綉token
+ * @param ssid WiFi ssid
+ * @param password WiFi 瀵嗙爜
+ * @param lbsDomain lbs 鍩熷悕
+ * @param handler 鍥炶皟
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startNewApConfigWithToken:(NSString *)token
+ ssid:(NSString *)ssid
+ password:(NSString *)password
+ lbsDomain:(NSString *)lbsDomain
+ completionHandler:(void(^)(EZNewAPConfigStatus status, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧鐘舵�侊紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceInfo:(void(^)(EZAPDevInfo *devInfo, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧褰撳墠鍛ㄨ竟WiFi鍒楄〃锛屼笂闄�20涓紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceWifiList:(void(^)(NSArray<EZWiFiItemInfo*> *wifiList, NSError *error))handler;
+
+/**
+ * 鏌ヨ璁惧缁戝畾鐘舵��
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (NSURLSessionDataTask *)queryPlatformBindStatus:(NSString *)deviceSerial
+ completion:(void(^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 璁剧疆閰嶇綉璁惧缃戝叧鍦板潃 鍙��
+ * @param devRouteDomain 璁惧缃戝叧鍦板潃
+ */
++ (void)setDevRouteDomain:(NSString *)devRouteDomain;
+
+#pragma mark - 鐢ㄦ埛鐩稿叧Api
+
+/**
+ * 鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅鐨勬帴鍙�
+ *
+ * @param completion 鍥炶皟block锛� 姝e父鏃惰繑鍥濫ZUserInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getUserInfo:(void (^)(EZUserInfo *userInfo, NSError *error))completion;
+
+#pragma mark - 鍏朵粬Api
+
+/**
+ * 鑾峰彇缁堢锛堟墜鏈虹瓑锛夊敮涓�璇嗗埆鐮�
+ *
+ * @return 缁堢鍞竴璇嗗埆鐮�
+ */
++ (NSString *)getTerminalId;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZPlayer.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZPlayer.h
new file mode 100644
index 0000000..baea2e2
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZPlayer.h
@@ -0,0 +1,446 @@
+//
+// EZPlayer.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/16.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class EZDeviceRecordFile;
+@class EZCloudRecordFile;
+@class EZPlayer;
+@class EZPlayerExParamInfo;
+@class EZDevicePtzAngleInfo;
+@class EZPMPlayPrivateTokenInfo;
+
+/**
+ * 棰勮娓呮櫚搴�
+ */
+typedef NS_ENUM(NSInteger, EZVideoQuality) {
+ EZVideoQualityLow = 0, //娴佺晠
+ EZVideoQualityMiddle = 1, //鍧囪
+ EZVideoQualityHigh = 2 //楂樻竻
+};
+
+/* 鎾斁鍣‥ZPlayer鐨勭姸鎬佹秷鎭畾涔� */
+typedef NS_ENUM(NSInteger, EZMessageCode) {
+ PLAYER_REALPLAY_START = 1, //鐩存挱寮�濮�
+ PLAYER_VIDEOLEVEL_CHANGE = 2, //鐩存挱娴佹竻鏅板害鍒囨崲涓�
+ PLAYER_STREAM_RECONNECT = 3, //鐩存挱娴佸彇娴佹鍦ㄩ噸杩�
+ PLAYER_VOICE_TALK_START = 4, //瀵硅寮�濮�
+ PLAYER_VOICE_TALK_END = 5, //瀵硅缁撴潫
+ PLAYER_STREAM_START = 10, //褰曞儚鍙栨祦寮�濮�
+ PLAYER_PLAYBACK_START = 11, //褰曞儚鍥炴斁寮�濮嬫挱鏀�
+ PLAYER_PLAYBACK_STOP = 12, //褰曞儚鍥炴斁缁撴潫鎾斁
+ PLAYER_PLAYBACK_FINISHED = 13, //褰曞儚鍥炴斁琚敤鎴峰己鍒朵腑鏂�
+ PLAYER_PLAYBACK_PAUSE = 14, //褰曞儚鍥炴斁鏆傚仠
+ PLAYER_NET_CHANGED = 21, //鎾斁鍣ㄦ娴嬪埌wifi鍙樻崲杩�
+ PLAYER_NO_NETWORK = 22, //鎾斁鍣ㄦ娴嬪埌鏃犵綉缁�
+ PLAYER_CLOUD_IFRAME_CHANGED = 23, //浜戝瓨鍌ㄥ揩鏀炬椂锛岀敱鍏ㄥ抚蹇斁鍒囨崲鍒版娊甯у揩鏀剧殑鎻愮ず鍥炶皟
+ PLAYER_PLAYSPEED_LOWER = 24, //浜戝瓨鍌ㄥ揩鏀炬椂鐨勯檷閫熼�氱煡(瀛樺湪涓ゆ闄嶉�燂細褰撳墠鍊嶉�熷ぇ浜�4鍊嶉�熸椂锛岄檷鍒�4鍊嶉�燂紱褰撳墠涓�4鍊嶉�熸椂锛岄檷涓�1鍊嶉��)
+};
+
+
+/**
+ * 鍥炴斁閫熺巼
+ */
+typedef NS_ENUM(NSInteger, EZPlaybackRate) {
+ EZOPENSDK_PLAY_RATE_1_16 = 9, //浠�1/16鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_1_8 = 7, //浠�1/8鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_1_4 = 5, //浠�1/4鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_1_2 = 3, //浠�1/2鍊嶉�熸挱鏀�
+ EZOPENSDK_PLAY_RATE_1 = 1, //浠ユ甯搁�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_2 = 2, //浠�2鍊嶉�熸挱鏀�
+ EZOPENSDK_PLAY_RATE_4 = 4, //浠�4鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_8 = 6, //浠�8鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_16 = 8, //浠�16鍊嶉�熷害鎾斁
+ EZOPENSDK_PLAY_RATE_32 = 10, //浠�32鍊嶉�熷害鎾斁
+};
+
+/// 钀ょ煶鎾斁鍣╠elegate鏂规硶
+@protocol EZPlayerDelegate <NSObject>
+
+@optional
+/**
+ * 鎾斁鍣ㄦ挱鏀惧け璐ラ敊璇洖璋�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param error 鎾斁鍣ㄩ敊璇�
+ */
+- (void)player:(EZPlayer *)player didPlayFailed:(NSError *)error;
+
+/**
+ * 鎾斁鍣ㄦ秷鎭洖璋�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param messageCode 鎾斁鍣ㄦ秷鎭爜锛岃瀵圭収EZOpenSDK澶存枃浠朵腑鐨凟ZMessageCode浣跨敤
+ */
+- (void)player:(EZPlayer *)player didReceivedMessage:(NSInteger)messageCode;
+
+/**
+ * 璇ユ柟娉曞簾寮冧簬v4.8.8鐗堟湰锛屽簳灞傚簱涓嶅啀鏀寔銆傝浣跨敤getStreamFlow鏂规硶
+ * 鏀跺埌鐨勬暟鎹暱搴︼紙姣忕璋冪敤涓�娆★級
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param dataLength 鎾斁鍣ㄦ祦濯掍綋鏁版嵁鐨勯暱搴︼紙姣忕瀛楄妭鏁帮級
+ */
+- (void)player:(EZPlayer *)player didReceivedDataLength:(NSInteger)dataLength DEPRECATED_MSG_ATTRIBUTE("use getStreamFlow instead");
+
+/**
+ * 鏀跺埌鐨勭敾闈㈤暱瀹藉��
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param height 楂樺害
+ * @param width 瀹藉害
+ */
+- (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width;
+
+/**
+ * 璁惧浜戝彴瑙掑害鏁版嵁鍥炶皟
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param info 绉佹湁鏁版嵁
+ */
+- (void)player:(EZPlayer *)player didReceivedDevicePtzAngleInfo:(EZDevicePtzAngleInfo *)info;
+
+/**
+ * 鎾斁杩囩▼涓� 鍥炶皟瑙g爜鏁版嵁
+ * 閲嶈锛氳鍥炶皟浼氭瘮杈冮绻�(涓�绉掕嫢骞叉)锛屽悓鏃剁洿鎺ョ敱鎾斁搴撶嚎绋嬪洖璋冧笂鏉ワ紝璇峰嬁鍦ㄦ柟娉曚腑鍋氳�楁椂鎿嶄綔
+ * 閲嶈锛氬洖璋冪殑鏁版嵁鐨勫唴瀛樻槸鐢辨挱鏀惧簱鍐呴儴鍒嗛厤骞剁鐞嗙殑锛屽湪浣跨敤鏃讹紝璇峰悓姝ュ鐞嗗洖璋冪殑data锛涘闇�寮傛澶勭悊锛岃鎷疯礉璇ユ暟鎹�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param data 鎾斁搴撹В鐮佸嚭鐨勬暟鎹�
+ * @param width 瑙嗛瀹藉害
+ * @param height 瑙嗛楂樺害
+ */
+- (void)player:(EZPlayer *)player didDecodedData:(NSData *)data width:(NSInteger)width height:(NSInteger)height;
+
+/**
+ * 鍙栨祦鏁版嵁涓幏鍙栧紑闂╰oken鍥炶皟
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param tokenInfo token瀵硅薄
+ */
+- (void)player:(EZPlayer *)player playPrivateTokenInfo:(EZPMPlayPrivateTokenInfo *)tokenInfo;
+
+@end
+
+/// 姝ょ被涓鸿悿鐭虫挱鏀惧櫒绫�
+@interface EZPlayer : NSObject
+
+/// EZPlayer鍏宠仈鐨刣elegate
+@property (nonatomic, weak) id<EZPlayerDelegate> delegate;
+
+/// 鏄惁璁╂挱鏀惧櫒澶勭悊杩涘叆鍚庡彴,YES:鑷姩澶勭悊;NO:涓嶅鐞�,榛樿涓篩ES
+@property (nonatomic, assign) BOOL backgroundModeByPlayer;
+
+/**
+ * 鏍规嵁璁惧搴忓垪鍙峰拰閫氶亾鍙峰垱寤篍ZPlayer瀵硅薄
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 閫氶亾鍙�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo;
+//for 鍥芥爣
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial strCameraNo:(NSString *)strCameraNo;
+/**
+ * 鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
+ *
+ * @param url 鎾斁url
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithUrl:(NSString *)url;
+
+
+/**
+ 灞�鍩熺綉璁惧鍒涘缓鎾斁鍣ㄦ帴鍙�
+
+ @param userId 鐢ㄦ埛id锛岀櫥褰曞眬鍩熺綉璁惧鍚庤幏鍙�
+ @param cameraNo 閫氶亾鍙�
+ @param streamType 鐮佹祦绫诲瀷 1:涓荤爜娴� 2:瀛愮爜娴�
+ @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithUserId:(NSInteger)userId cameraNo:(NSInteger)cameraNo streamType:(NSInteger)streamType;
+
+/**
+ * @since 4.19.2
+ * 涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 铏氭嫙閫氶亾
+ * @param useSubStream 鏄惁浣跨敤瀛愮爜娴�
+ *
+ * @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo useSubStream:(BOOL)useSubStream;
+
+/**
+ * 閿�姣丒ZPlayer
+ *
+ * @return YES/NO;
+ */
+- (BOOL)destoryPlayer;
+
+/**
+ * 璁剧疆浣跨敤纭欢瑙g爜鍣ㄤ紭鍏堬紝闇�鍦╯tartRealPlay涔嬪墠璋冪敤
+ *
+ * @param HDPriority 鏄惁纭В浼樺厛
+ */
+- (void)setHDPriority:(BOOL)HDPriority;
+
+/**
+ 鑾峰彇褰撳墠鐨勮蒋纭В鎯呭喌锛屽湪鐮佹祦姝e父鎾斁鍚庤皟鐢�
+
+ @return 1锛氳蒋瑙� 2锛氱‖瑙� 0锛氬嚭閿�
+ */
+- (int)getHDPriorityStatus;
+
+/**
+ * 璁剧疆璁惧褰掑睘涓氬姟鏉ユ簮锛岄渶瑕佸湪棰勮鍥炴斁鍓嶈皟鐢� 鍥芥爣璁惧浣跨敤
+ *
+ * @param bizType 绫诲瀷 鍥芥爣涓� bizType='GB28181'
+ */
+- (void)setBizType:(NSString *)bizType;
+
+/**
+ * 骞冲彴id 鍥芥爣璁惧浣跨敤
+ *
+ * @param platformId 绫诲瀷
+*/
+-(void)setPlatformId:(NSString *)platformId;
+
+/**
+ * 璁剧疆鎾斁鍣ㄧ殑view
+ *
+ * @param playerView 鎾斁鍣╲iew
+ */
+- (void)setPlayerView:(UIView *)playerView;
+
+/**
+ * 鏄惁闈欓煶鎾斁锛宻tartRealPlay涔嬪墠璋冪敤
+ *
+ * @param isSilencePlay 鏄惁闈欓煶鎾斁
+ */
+- (void)setSilencePlay:(BOOL)isSilencePlay;
+
+/**
+ * 寮�濮嬫挱鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startRealPlay;
+
+/**
+ * 鍋滄鎾斁锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)stopRealPlay;
+
+/**
+ * 璁剧疆鎾斁鍣ㄨВ鐮佸瘑鐮�
+ *
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ */
+- (void)setPlayVerifyCode:(NSString *)verifyCode;
+
+/**
+ * 寮�鍚0闊�
+ *
+ * @return YES/NO
+ */
+- (BOOL)openSound;
+
+/**
+ * 鍏抽棴澹伴煶
+ *
+ * @return YES/NO
+ */
+- (BOOL)closeSound;
+
+/**
+ 鑾峰彇鎾斁缁勪欢鍐呴儴鐨勬挱鏀惧簱鐨刾ort
+
+ @return 鎾斁搴撶殑port,鍙兘涓�-1锛堟棤鏁堝�硷級
+ */
+- (int)getInnerPlayerPort;
+
+/**
+ 鑾峰彇褰撳墠宸叉挱鏀剧殑鎬绘祦閲忥紝鍗曚綅瀛楄妭
+ eg.璁$畻姣忕鐨勬祦閲忥細
+ NSInteger a = [self getStreamFlow];
+ //1s鍚庤皟鐢�
+ NSInteger b = [self getStreamFlow];
+ NSInteger perSecondFlow = b - a;
+
+ @return 娴侀噺鍊�
+ */
+- (NSInteger)getStreamFlow;
+
+/**
+ * 寮�濮婽TS瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startVoiceTalk;
+
+/**
+ * 寮�濮婽TS瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ * 閽堝浜嶯VR瀵硅浣跨敤
+ * @return YES/NO
+ */
+- (BOOL)startVoiceTalkNeedVoiceChannel:(BOOL)needVoiceChannel;
+
+/**
+ * 寮�濮婹os瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startVoiceTalkByQos;
+
+/**
+ * 鍋滄瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)stopVoiceTalk;
+
+/**
+ 棰勮鏃跺紑濮嬫湰鍦板綍鍍忛褰曞埗鍔熻兘锛屽紓姝ユ柟娉�
+
+ @param path 鏂囦欢瀛樺偍璺緞
+ @return YES/NO
+ */
+- (BOOL)startLocalRecordWithPathExt:(NSString *)path;
+
+
+/**
+ 缁撴潫鏈湴褰曞儚棰勫綍鍒讹紝骞剁敓鎴恗p4褰曞埗鏂囦欢锛屽紓姝ユ柟娉�
+
+ @param complete 鎿嶄綔鏄惁鎴愬姛 YES/NO
+ */
+- (void)stopLocalRecordExt:(void (^)(BOOL ret))complete;
+
+
+/**
+ * 鍗婂弻宸ュ璁蹭笓鐢ㄦ帴鍙o紝鏄惁鍒囨崲鍒板惉璇寸姸鎬�
+ *
+ * @param isPressed 鏄惁鍙鐘舵��
+ *
+ * @return YES/NO
+ */
+- (BOOL)audioTalkPressed:(BOOL)isPressed;
+
+/**
+ * 寮�濮嬩簯瀛樺偍杩滅▼鍥炴斁锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ * @param cloudFile 浜戝瓨鍌ㄦ枃浠朵俊鎭�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startPlaybackFromCloud:(EZCloudRecordFile *)cloudFile;
+
+/**
+ * 寮�濮嬭繙绋婼D鍗″洖鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @param deviceFile SD鍗℃枃浠朵俊鎭�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startPlaybackFromDevice:(EZDeviceRecordFile *)deviceFile;
+
+/**
+ * 鏆傚仠杩滅▼鍥炴斁鎾斁
+ */
+- (BOOL)pausePlayback;
+
+/**
+ * 缁х画杩滅▼鍥炴斁鎾斁
+ */
+- (BOOL)resumePlayback;
+
+/**
+ * 鏍规嵁鍋忕Щ鏃堕棿鎾斁
+ *
+ * @param offsetTime 褰曞儚鍋忕Щ鏃堕棿
+ */
+- (void)seekPlayback:(NSDate *)offsetTime;
+
+/**
+ * 鑾峰彇褰撳墠鎾斁鏃堕棿杩涘害
+ *
+ * @return 鎾斁杩涘害鐨凬SDate鏁版嵁
+ */
+- (NSDate *)getOSDTime;
+
+/**
+ * 鍋滄杩滅▼鍥炴斁
+ */
+- (BOOL)stopPlayback;
+
+/**
+ * 鐩存挱鐢婚潰鎶撳浘
+ *
+ * @param quality 鎶撳浘璐ㄩ噺锛�0锝�100锛�,鏁板�艰秺澶у浘鐗囪川閲忚秺濂斤紝鍥剧墖澶у皬瓒婂ぇ
+ *
+ * @return image
+ */
+- (UIImage *)capturePicture:(NSInteger)quality;
+
+/**
+ 鑾峰彇鍐呴儴鎾斁鍣ㄥ彞鏌勩�傚缓璁瘡娆′娇鐢ㄦ挱鏀惧櫒鍙ユ焺鏃跺潎璋冪敤姝ゆ柟娉曡幏鍙栵紝骞惰繘琛屾湁鏁堟�у垽鏂��
+
+ @return 灏忎簬0涓烘棤鏁堝�硷紝澶т簬绛変簬0涓烘湁鏁堝��
+ */
+- (int)getPlayPort;
+
+/**
+ 鑾峰彇褰撳墠鍙栨祦鏂瑰紡锛�
+
+ @return 褰撳墠鍙栨祦绫诲瀷
+ */
+- (int)getStreamFetchType;
+
+/**
+sd鍗″強浜戝瓨鍌ㄥ�嶉�熷洖鏀炬帴鍙�
+1.鏀寔鎶藉抚蹇斁鐨勮澶囨渶楂樻敮鎸�16鍊嶉�熷揩鏀撅紙鎵�鏈夊彇娴佹柟寮忥紝鍖呮嫭P2P锛�
+2.涓嶆敮鎸佹娊甯у揩鏀剧殑璁惧锛屼粎鏀寔鍐呭缃戠洿杩炲揩鏀撅紝鏈�楂樻敮鎸�8鍊�
+3.HCNetSDK鍙栨祦娌℃湁蹇斁姒傚康锛屽叏閫熸帹娴侊紝鍙敼鍙樻挱鏀惧簱閫熺巼
+4.娉ㄦ剰鍖哄埆锛�
+ 鑰丼D鍗″洖鏀句互鍙奌CNetSDK鍥炴斁锛岃缃畬閫氳繃杩斿洖鍊艰繑鍥炴垚鍔熻繕鏄け璐ワ紝娌℃湁鍏朵粬娑堟伅
+ 鏂板崗璁殑浜戝瓨鍌ㄥ洖鏀句互鍙婃敮鎸乻eek銆乧ontinue鐨勮澶嘾鏂癝D鍗″洖鏀撅紝璁剧疆瀹岄�氳繃杩斿洖鍊艰繑鍥炴垚鍔熻繕鏄け璐ワ紝濡傛灉鎴愬姛锛�
+ 鍒欏悗缁繕鏈変竴鏉ZVideoPlayerMessageStart寮傛娑堟伅琛ㄧず鎴愬姛鍐嶆鍙栨祦
+ 杩斿洖鍏朵粬閿欒鐮佽〃绀哄け璐� (鏂板崗璁簯瀛樺偍鍜屾柊SD鍗″洖鏀捐繑鍥濫Z_ERROR_NEED_RETRY 琛ㄧず闇�瑕侀噸璇曪級
+
+@param rate 鍥炴斁閫熷害锛屽叿浣撳弬鑰� EZ_PLAY_BACK_RATE
+@param mode 鍥炴斁鏃剁殑鎶藉抚鎺у埗锛屽綋鍓嶄粎浜戝瓨鍌ㄦ敮鎸併��0锛� 4鍊嶉�熷叏甯э紝8鍊嶉�熶互涓婃娊甯� 1锛氭娊甯� 2锛氬叏甯� 锛堝璁惧鍥炴斁褰撳墠涓嶆敮鎸侊紝浼犲叆0鍗冲彲锛�
+@return YES/NO
+ */
+- (BOOL)setPlaybackRate:(EZPlaybackRate) rate mode:(NSUInteger)mode;
+
+/**
+ 璁剧疆鍏ㄥ弻宸ュ璁叉椂鐨勬ā寮�,瀵硅鎴愬姛鍚庤皟鐢�
+
+ @param routeToSpeaker YES:浣跨敤鎵0鍣� NO:浣跨敤鍚瓛
+ */
+- (void)changeTalkingRouteMode:(BOOL)routeToSpeaker;
+
+/// //鎵╁睍鍙傛暟 UIKit涓撶敤
+/// @param exParamInfo EZPlayerExParamInfo
+- (void)setExParamInfo:(EZPlayerExParamInfo *)exParamInfo;
+
+/**
+ * 璁剧疆鎵撳紑鎾斁搴撶殑鏅鸿兘鍒嗘瀽锛屽綋鍓嶆俯鎰熺浉鏈虹殑妗嗘浣跨敤浜嗚鏅鸿兘鍒嗘瀽鏁版嵁锛岄瑙堟垚鍔熷悗璋冪敤锛屽湪鎾斁杩囩▼涓殢鏃跺紑鍏�
+ *
+ * @param enable YES锛氬紑 NO锛氬叧
+ *
+ * @return 杩斿洖鐘舵��
+ */
+- (BOOL)setIntelAnalysis:(BOOL)enable;
+
+@end
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZStreamPlayer.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZStreamPlayer.h
new file mode 100644
index 0000000..408ba05
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/EZStreamPlayer.h
@@ -0,0 +1,118 @@
+//
+// EZStreamPlayer.h
+// EZOpenSDKFramework
+//
+// Created by yuqian on 2020/4/3.
+// Copyright 漏 2020 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZDeviceRecordFile.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class EZStreamPlayer;
+
+typedef enum : NSUInteger {
+ EZStreamPlayerMsgTypeUnknown, //鏃犳晥绫诲瀷
+ EZStreamPlayerMsgTypeRealPlayStart, //寮�鍚瑙堟垚鍔�
+ EZStreamPlayerMsgTypeRealPlayClose, //鍏抽棴棰勮鎴愬姛
+ EZStreamPlayerMsgTypePlayBackStart, //寮�鍚澶囧洖鏀炬垚鍔�
+ EZStreamPlayerMsgTypePlayBackClose, //鍏抽棴璁惧鍥炴斁鎴愬姛
+} EZStreamPlayerMsgType;
+
+typedef enum : NSUInteger {
+ EZStreamDataTypeUnknown, // 鏃犳晥绫诲瀷
+ EZStreamDataTypeHeader, // 鎺ユ敹娴佸ご
+ EZStreamDataTypeData, // 鎺ユ敹鏁版嵁
+ EZStreamDataTypeStreamEnd, // 娴佺粨鏉�
+}EZStreamDataType;
+
+
+@protocol EZStreamPlayerDelegate <NSObject>
+
+/**
+ * 鎾斁鍣ㄦ挱鏀惧け璐ラ敊璇洖璋�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param error 鎾斁鍣ㄩ敊璇�
+ */
+- (void)streamPlayer:(EZStreamPlayer *)player didPlayFailed:(NSError *)error;
+
+/**
+ * 鎾斁鍣ㄦ秷鎭洖璋�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param msgType 鎾斁鍣ㄦ秷鎭爜
+ */
+- (void)streamPlayer:(EZStreamPlayer *)player didReceivedMessage:(EZStreamPlayerMsgType)msgType;
+
+/**
+ * 鐮佹祦鍥炶皟
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param dataType 鏁版嵁绫诲瀷
+ * @param data 鐮佹祦鏁版嵁
+ * @param dataLength 闀垮害
+ */
+- (void)streamPlayer:(EZStreamPlayer *)player didReceivedData:(EZStreamDataType)dataType data:(int8_t *)data length:(int)dataLength;
+
+@end
+
+@interface EZStreamPlayer : NSObject
+
+@property (nonatomic, weak) id<EZStreamPlayerDelegate>delegate;
+
+/// 鏄惁璁╂挱鏀惧櫒澶勭悊杩涘叆鍚庡彴,YES:鑷姩澶勭悊;NO:涓嶅鐞�,榛樿涓篩ES
+@property (nonatomic) BOOL backgroundModeByPlayer;
+
+
+/**
+* 鏍规嵁璁惧搴忓垪鍙峰拰閫氶亾鍙峰垱寤篍ZPlayer瀵硅薄
+*
+* @param deviceSerial 璁惧搴忓垪鍙�
+* @param cameraNo 閫氶亾鍙�
+*
+* @return EZStreamPlayer瀵硅薄
+*/
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo;
+
+/**
+ * 閿�姣丒ZPlayer
+ *
+ * @return YES/NO;
+ */
+- (BOOL)destoryPlayer;
+
+/**
+ * 寮�濮嬫挱鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startRealPlay;
+
+/**
+ * 鍋滄鎾斁锛屽紓姝ユ帴鍙�
+ *
+ */
+- (void)stopRealPlay;
+
+/**
+ * 寮�濮嬭澶囧洖鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
+ *
+ * @param deviceFile SD鍗℃枃浠朵俊鎭�
+ *
+ * @return YES/NO
+ */
+- (BOOL)startDevicePlayback:(EZDeviceRecordFile *)deviceFile;
+
+/// 缁撴潫璁惧鍥炴斁
+- (void)stopDevicePlayback;
+
+/// 璁剧疆璁惧楠岃瘉鐮侊紝鎾斁鍓嶈缃�
+/// @param verifyCode 璁惧楠岃瘉鐮�
+- (void)setVerifyCode:(NSString *)verifyCode;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAPDevInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAPDevInfo.h
new file mode 100644
index 0000000..d1b5e38
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAPDevInfo.h
@@ -0,0 +1,23 @@
+//
+// EZAPDevInfo.h
+// EZWiFiConfigSDK
+//
+// Created by yuqian on 2020/7/28.
+// Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZAPDevInfo : NSObject
+
+@property (nonatomic, copy) NSString *apVersion;//鐗堟湰锛屽綋鍓峚p鐗堟湰1.0
+@property (nonatomic, copy) NSString *devSubserial;//璁惧搴忓垪鍙凤紝鏈�澶�64
+@property (nonatomic, copy) NSString *devType;//璁惧鍨嬪彿锛屾渶澶�64
+@property (nonatomic, copy) NSString *devFirmwareversion;//璁惧鍥轰欢鐗堟湰鍙凤紝鏈�澶�64
+@property (nonatomic, copy) NSString *macAddr;//璁惧mac鍦板潃
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAccessToken.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAccessToken.h
new file mode 100644
index 0000000..21379c3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAccessToken.h
@@ -0,0 +1,19 @@
+//
+// EZAccessToken.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/10/19.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿悿鐭冲紑鏀惧钩鍙版巿鏉冪櫥褰曚互鍚庣殑鍑瘉淇℃伅
+@interface EZAccessToken : NSObject
+
+/// accessToken 鐧诲綍鍑瘉
+@property (nonatomic, copy) NSString *accessToken;
+/// accessToken杩囨湡鐨勬椂闂寸偣,鐩稿浜�1970骞寸殑姣鏁�
+@property (nonatomic, assign) NSInteger expire;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAlarmInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAlarmInfo.h
new file mode 100644
index 0000000..9e763ef
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAlarmInfo.h
@@ -0,0 +1,60 @@
+//
+// EZAlarmInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/16.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓哄憡璀︿俊鎭璞�
+@interface EZAlarmInfo : NSObject
+
+/// 鍛婅ID
+@property (nonatomic, copy) NSString *alarmId;
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 閫氶亾鍙�
+@property (nonatomic) NSInteger cameraNo;
+/// 鍛婅鍚嶇О
+@property (nonatomic, copy) NSString *alarmName;
+/// 鍛婅鍥剧墖
+@property (nonatomic, copy) NSString *alarmPicUrl;
+/// 鍛婅寮�濮嬫椂闂�
+@property (nonatomic, strong) NSDate *alarmStartTime;
+/// 鍛婅绫诲瀷
+@property (nonatomic) NSInteger alarmType;
+/// 鏄惁鍔犲瘑
+//@property (nonatomic) BOOL isEncrypt;
+
+
+/// 鍛婅鍥剧墖鍔犲瘑淇℃伅 crypt 0-涓嶇‘瀹� 1-璁惧鍔犲瘑 2-骞冲彴鍔犲瘑
+/// 濡傛灉鏄�2锛岃〃鏄庢槸骞冲彴鍔犲瘑鐨勫浘鐗囷紝璇蜂娇鐢ㄤ笅闈㈢殑checksum浣滀负瑙e瘑绉橀挜瑙e瘑鍥剧墖
+/// 濡傛灉鏄�1锛岃〃鏄庢槸璁惧鍔犲瘑鐨勫浘鐗囷紝璇蜂娇鐢ㄨ澶囩殑楠岃瘉鐮佷綔涓鸿В瀵嗙閽ヨВ瀵嗗浘鐗�
+/// 濡傛灉鏄�0锛岃〃鏄庢湭鐭ョ殑鍔犲瘑淇℃伅锛岃閫氳繃涓婇潰鎶ヨ鍥剧墖URL锛坅larmPicUrl锛変腑鐨� isEncrypted 瀛楁锛屽垽鏂浘鐗囨槸 0锛氭湭鍔犲瘑 1锛氳澶囧姞瀵�
+/// 鎶ヨ鍥剧墖鐨刄RL绀轰緥锛�
+/// https://whpic.ys7.com:8009/HIK_1447836214_458BEBDAE4AB6a6f_525400286893421023815?isEncrypted=1&isCloudStored=0
+/// https://www.ys7.com:9090/api/cloud?method=download&fid=5ed92258-8e0f-11e5-8000-c19249a52dcf&deviceSerialNo=504242549&isEncrypted=0&isCloudStored=1
+@property (nonatomic) NSInteger crypt;
+/// 鍛婅鍥剧墖骞冲彴鍔犲瘑鏃剁殑瀵嗛挜
+@property (nonatomic, copy) NSString *checksum;
+/// 鏄惁宸茶
+@property (nonatomic) BOOL isRead;
+/// 瀛樺偍绫诲瀷锛�0-鏃犲瓨鍌紝1-钀ょ煶锛�2-鐧惧害锛�4-sd鍗″瓨鍌紝5-钀ょ煶鍜宻d鍗★紝6-鐧惧害鍜宻d鍗�
+@property (nonatomic) NSInteger recState;
+/// 鍛婅褰曞儚缁撴潫鏃堕棿鏃堕棿寤跺悗鍋忕Щ閲忥紝閫氳繃alarmStartTime鍔犱笂寤跺悗鍋忕Щ閲忚幏寰楀憡璀﹀綍鍍忕殑鍏蜂綋缁撴潫鏃堕棿
+@property (nonatomic) NSInteger delayTime;
+/// 鍛婅褰曞儚寮�濮嬫椂闂存彁鍓嶅亸绉婚噺锛岄�氳繃alarmStartTime鍑忓幓鎻愬墠鍋忕Щ閲忚幏寰楀憡璀﹀綍鍍忕殑鍏蜂綋寮�濮嬫椂闂�
+@property (nonatomic) NSInteger preTime;
+/// 璁惧鍚嶇О
+@property (nonatomic, copy) NSString *deviceName;
+/// 璁惧澶х被
+@property (nonatomic, copy) NSString *category;
+
+/// 4530 鎵╁睍瀛楁
+@property (nonatomic, copy) NSString *customerType;
+/// 4530 鎵╁睍瀛楁
+@property (nonatomic, copy) NSString *customerInfo;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAreaInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAreaInfo.h
new file mode 100644
index 0000000..ebbd210
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZAreaInfo.h
@@ -0,0 +1,19 @@
+//
+// EZAreaInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 16/7/19.
+// Copyright 漏 2016骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ゅ璞′负鍖哄煙瀵硅薄锛屾捣澶栧紑鏀惧钩鍙颁笓鐢ㄥ璞�
+@interface EZAreaInfo : NSObject
+
+@property (nonatomic) NSInteger id; ///鍖哄煙ID
+@property (nonatomic, copy) NSString *name; ///鍖哄煙鍚嶇О
+@property (nonatomic, copy) NSString *region; ///鍖哄煙鏍囪瘑
+@property (nonatomic) NSInteger telephoneCode; ///鍖哄煙鎵嬫満鍥介檯鍙�
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCameraInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCameraInfo.h
new file mode 100644
index 0000000..9054b1e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCameraInfo.h
@@ -0,0 +1,35 @@
+//
+// EZCameraInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/15.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓洪�氶亾淇℃伅瀵硅薄
+@interface EZCameraInfo : NSObject
+
+/// 鎽勫儚澶村悕绉�
+@property (nonatomic, copy) NSString *cameraName;
+/// 閫氶亾鍙�
+@property (nonatomic) NSInteger cameraNo;
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 鍒嗕韩鐘舵�侊細0銆佹湭鍒嗕韩锛�1銆佸垎浜墍鏈夎�咃紝2銆佸垎浜帴鍙楄�咃紙琛ㄧず姝ゆ憚鍍忓ご鏄埆浜哄垎浜粰鎴戠殑锛�
+@property (nonatomic) NSInteger isShared;
+/// 閫氶亾灏侀潰
+@property (nonatomic, copy) NSString *cameraCover;
+/// 瑙嗛璐ㄩ噺锛�0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+@property (nonatomic) NSInteger videoLevel;
+//鏉冮檺
+@property (nonatomic) NSInteger permission;
+/// 閫氶亾鏀寔鐨勬竻鏅板害淇℃伅鍒楄〃锛孍ZVideoQualityInfo瀵硅薄鍒楄〃銆�(/api/device/list 杩斿洖鐨�"videoQualityInfos" 鏈夎锛屼互/api/device/detail 鎺ュ彛杩斿洖涓哄噯)
+@property (nonatomic, strong) NSArray *videoQualityInfos;
+
+/// 璁惧鏄惁寮�鍚姞瀵�
+@property (nonatomic) BOOL isEncrypt;
+/// 璁惧鐘舵�侊紝1-鍦ㄧ嚎锛�2-涓嶅湪绾�
+@property (nonatomic) NSInteger status;
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCloudRecordDownloadTask.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCloudRecordDownloadTask.h
new file mode 100644
index 0000000..174ee40
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCloudRecordDownloadTask.h
@@ -0,0 +1,34 @@
+//
+// EZCloudRecordDownloadTask.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/7/2.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import "EZRecordDownloadTask.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class EZCloudRecordFile;
+
+@interface EZCloudRecordDownloadTask : EZRecordDownloadTask
+
+/**
+ 浜戝瓨鍌ㄥ綍鍍忎笅杞戒换鍔″垵濮嬪寲銆�
+ 涓嬭浇鐨勫綍鍍忎负PS鏂囦欢锛屽闇�杞崲MP4锛岃鑷璋冪敤EZVideoTransformer绫荤殑杞皝瑁呮柟娉�
+
+ @param taskID 涓嬭浇浠诲姟鍞竴鏍囪瘑ID
+ @param recordFile 浜戝瓨鍌ㄥ綍鍍忔枃浠�
+ @param verifyCode 璁惧楠岃瘉鐮�
+ @param savePath 涓嬭浇瀛樺偍璺緞
+ @return 鍒濆鍖栨垚鍔熻繑鍥炲疄渚嬶紝澶辫触杩斿洖nil
+ */
+- (instancetype) initTaskWithID:(NSUInteger)taskID
+ cloudRecordFile:(EZCloudRecordFile *)recordFile
+ verifyCode:(NSString *)verifyCode
+ savePath:(NSString *)savePath;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCloudRecordFile.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCloudRecordFile.h
new file mode 100644
index 0000000..f8c693f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZCloudRecordFile.h
@@ -0,0 +1,36 @@
+//
+// EZCloudFile.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/17.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓轰簯瀛樺偍褰曞儚鏂囦欢瀵硅薄
+@interface EZCloudRecordFile : NSObject
+
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 璁惧閫氶亾鍙�
+@property (nonatomic, assign) NSInteger cameraNo;
+/// 浜戝瓨鍌ㄥ綍鍍忔枃浠禝d
+@property (nonatomic, copy) NSString *fileId;
+/// 浜戝瓨鍌ㄥ綍鍍忔枃浠跺紑濮嬫椂闂�
+@property (nonatomic, strong) NSDate *startTime;
+/// 浜戝瓨鍌ㄥ綍鍍忔枃浠剁粨鏉熸椂闂�
+@property (nonatomic, strong) NSDate *stopTime;
+/// 浜戝瓨鍌ㄥ綍鍍忔埅鍥惧湴鍧�
+@property (nonatomic, copy) NSString *coverPic;
+/// 浜戝瓨鍌ㄥ綍鍍忎笅杞藉湴鍧�
+@property (nonatomic, copy) NSString *downloadPath;
+/// 浜戝瓨鍌ㄥ浘鐗囧姞瀵嗗瘑鐮侊紝濡傛灉鏄痆NSNull null]鎴栬�卬il鎸囬拡鍒欏浘鐗囦笉鍔犲瘑
+@property (nonatomic, copy) NSString *encryption;
+/// 鏂囦欢澶у皬
+@property (nonatomic, assign) NSUInteger fileSize;
+
+@property (nonatomic, assign) int32_t istorageVersion; //浜戝瓨鍌ㄧ被鍒�:1 鍗曟枃浠跺瓨鍌ㄦā寮忥紱2 杩炵画瀛樺偍妯″紡锛�3 寰呭畾
+@property (nonatomic, assign) int32_t videoType;//浜戝瓨鍌ㄥ綍鍍忕被鍨嬶紝榛樿涓�0锛岃〃绀轰笉灞炰簬浜戝瓨鍌ㄥ綍鍍�
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZConfigTokenInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZConfigTokenInfo.h
new file mode 100644
index 0000000..9b9a949
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZConfigTokenInfo.h
@@ -0,0 +1,21 @@
+//
+// EZConfigTokenInfo.h
+// EZWiFiConfigSDK
+//
+// Created by yuqian on 2020/7/30.
+// Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZConfigTokenInfo : NSObject
+
+@property (nonatomic, copy) NSString *userId;
+@property (nonatomic, copy) NSString *token;
+@property (nonatomic, copy) NSString *lbsDomain;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDetectorInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDetectorInfo.h
new file mode 100644
index 0000000..9dd71bc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDetectorInfo.h
@@ -0,0 +1,41 @@
+//
+// EZDetectorInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 16/1/12.
+// Copyright 漏 2016骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓烘帰娴嬪櫒淇℃伅瀵硅薄
+@interface EZDetectorInfo : NSObject
+
+/// 鎺㈡祴鍣ㄥ簭鍒楀彿
+@property (nonatomic, copy) NSString *detectorSerial;
+/// 鎺㈡祴鍣ㄧ姸鎬侊紝鎺㈡祴鍣ㄤ笌A1鏄惁杩為�氾細0-闈炶仈閫氾紝1-鑱旈��
+@property (nonatomic) NSInteger state;
+/// 鎺㈡祴鍣ㄧ被鍨�
+@property (nonatomic, copy) NSString *type;
+/// 鎺㈡祴鍣ㄥ悕绉�
+/* V("V", "瑙嗛璁惧"), I("I", "鍛婅杈撳叆璁惧"), O("O", "鍛婅杈撳嚭璁惧"), PIR("PIR", "绾㈠鎺㈡祴鍣�"), FIRE("FIRE", "鐑熸劅鎺㈡祴鍣�"),MAGNETOMETER("MAGNETOMETER", "闂ㄧ浼犳劅鍣�"), GAS("GAS", "鍙噧姘斾綋"), WATERLOGGING("WATERLOGGING", "姘存蹈"),CALLHELP("CALLHELP", "绱ф�ユ寜閽�"), TELECONTROL("TELECONTROL", "閬ユ帶鍣�"), ALERTOR("ALERTOR", "鍛婅鍣�"),KEYBOARD("KEYBOARD", "閿洏"),CURTAIN("CURTAIN","骞曞笜"), MOVE_MAGNETOMETER("MOVE_MAGNETOMETER","鍗曚綋闂ㄧ")
+ */
+@property (nonatomic, copy) NSString *typeName;
+/// 鏂逛綅淇℃伅锛屽彲鐢ㄤ簬瀹㈡埛鑷畾涔夊悕绉�
+@property (nonatomic, copy) NSString *location;
+/// 闃插尯鏁呴殰鐘舵�侊紝0鎭㈠锛�1浜х敓
+@property (nonatomic) NSInteger faultZoneStatus;
+/// 鐢垫睜娆犲帇鐘舵�侊紝0鎭㈠锛�1浜х敓
+@property (nonatomic) NSInteger underVoltageStatus;
+/// 鏃犵嚎骞叉壈鐘舵�侊紝0鎭㈠锛�1浜х敓
+@property (nonatomic) NSInteger wirelessInterferenceStatus;
+/// 璁惧绂荤嚎鐘舵�侊紝0鎭㈠锛�1浜х敓
+@property (nonatomic) NSInteger offlineStatus;
+/// 鍦ㄥ妯″紡鏄惁寮�鍚�
+@property (nonatomic) BOOL atHomeEnable;
+/// 澶栧嚭妯″紡鏄惁寮�鍚�
+@property (nonatomic) BOOL outerEnable;
+/// 鐫$湢妯″紡鏄惁寮�鍚�
+@property (nonatomic) BOOL sleepEnable;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceCloudServiceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceCloudServiceInfo.h
new file mode 100644
index 0000000..fffd93e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceCloudServiceInfo.h
@@ -0,0 +1,65 @@
+//
+// EZDeviceCloudServiceInfo.h
+// EzvizOpenSDK
+//
+// Created by JuneCheng on 2022/1/4.
+// Copyright 漏 2022 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+@class EZCloudServicePackageInfo;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// 浜戝瓨鍌ㄨ澶囬�氶亾濂楅淇℃伅
+@interface EZDeviceCloudServiceInfo : NSObject
+
+@property (nonatomic, copy) NSString *ownerId;///< 璁惧鎵�灞炵敤鎴风敤鎴峰悕
+@property (nonatomic, copy) NSString *serial;///< 璁惧搴忓垪鍙�
+@property (nonatomic, assign) NSInteger channelNo;///< 閫氶亾鍙�
+@property (nonatomic, copy) NSString *devicePicUrl;///< 璁惧鍥剧墖url
+@property (nonatomic, assign) NSInteger storageTime;///< 瀛樺偍鏃堕暱
+@property (nonatomic, assign) NSInteger storageTimeUnit;///< 瀛樺偍鏃堕暱鍗曚綅锛�1-澶╋紝2-鍛紝3-鏈堬紝4-骞�
+@property (nonatomic, copy) NSString *expireTime;///< 浜戝瓨鍌ㄦ湇鍔¤繃鏈熸椂闂�
+@property (nonatomic, copy) NSString *expireDate;///< 鍒版湡鏃堕棿锛� yyyy骞碝M鏈坉d鏃� 鏍煎紡
+@property (nonatomic, copy) NSString *devModel;///< 璁惧鍨嬪彿
+@property (nonatomic, copy) NSString *devName;///< 璁惧鍚嶇О
+@property (nonatomic, assign) NSInteger onlineStatus;///< 璁惧鍦ㄧ嚎鐘舵��
+@property (nonatomic, assign) NSInteger status;///< 浜戝瓨鍌ㄧ姸鎬� -2涓嶆敮鎸� -1鏈紑鍚� 0鏆傚仠 1寮�鍚� 2杩囨湡 4鎸囧畾鐢熸晥浜戝瓨鍌ㄥ緟鐢熸晥鐘舵��
+@property (nonatomic, assign) NSInteger expireDay;///< 褰撳墠璺濈杩囨湡鐨勬湁鏁堝ぉ鏁�
+@property (nonatomic, assign) NSInteger validDay;///< 鏈嶅姟鍙娇鐢ㄧ殑澶╂暟
+@property (nonatomic, copy) NSString *createTime;///< 鍒涘缓鏃堕棿
+@property (nonatomic, assign) BOOL designateDevice;///< 鏄惁鏄寚瀹氳澶�
+@property (nonatomic, assign) BOOL subscribe;///< 鏄惁鐢卞綋鍓嶈闃呭紑閫�
+@property (nonatomic, assign) BOOL supportSubscribe;///< 鏄惁鏀寔璁㈤槄浜戝瓨鍌�
+@property (nonatomic, assign) BOOL supportCard;///< 鏄惁鏀寔鐐瑰崱
+@property (nonatomic, assign) NSInteger openTryCloudShield;///< 鏄惁灞忚斀浜戝瓨鍌ㄨ瘯鐢� 1涓哄睆钄斤紝鍏朵粬涓烘湭灞忚斀
+@property (nonatomic, strong) NSArray<EZCloudServicePackageInfo *> *serviceList;///<
+
+@end
+
+
+@interface EZCloudServicePackageInfo : NSObject
+
+@property (nonatomic, assign) long serviceId;///<
+@property (nonatomic, assign) NSInteger productPayType;///< 浜у搧浠樿垂绫诲瀷锛�1浠樿垂 2 璇曠敤 3鍏嶈垂
+@property (nonatomic, assign) NSInteger storageTimeUnit;///< 瀛樺偍鏃堕暱鍗曚綅锛�1-澶� 2-鍛� 3-鏈� 4-骞� 5-灏忔椂
+@property (nonatomic, copy) NSString *expireTime;///< 杩囨湡鏃堕棿
+@property (nonatomic, assign) NSInteger forceBinding;///< 寮哄埗缁戝畾鐘舵�� 1-寮哄埗缁戝畾 2-鍙浆绉�
+@property (nonatomic, assign) NSInteger effectImmediately;///< 鏈嶅姟鏄惁绔嬪嵆鐢熸晥 1-绔嬪嵆鐢熸晥 2-寤惰繜鐢熸晥 3-鎸囧畾鏃ユ湡鐢熸晥
+@property (nonatomic, assign) NSInteger canFamilyDeviceNum;///< 鍙姞鍏ュ椁愯澶囨暟
+@property (nonatomic, assign) long familyServiceId;///< 瀹跺涵濂楅鏈嶅姟ID
+@property (nonatomic, assign) NSInteger serviceTime;///< 浜戝瓨鍌ㄤ娇鐢ㄦ椂闀�
+@property (nonatomic, assign) NSInteger addFamilyDeviceNum;///< 宸插姞鍏ュ椁愯澶囨暟
+@property (nonatomic, assign) NSInteger productCode;///< 浜у搧缂栧彿
+@property (nonatomic, assign) NSInteger buyNum;///< 璐拱鏁伴噺
+@property (nonatomic, copy) NSString *businessOrderNo;///< 璁㈠崟鍙凤細褰撳墠寮�閫氭湇鍔′笌璁㈠崟鍏宠仈
+@property (nonatomic, assign) NSInteger serviceTimeUnit;///< 浜戝瓨鍌ㄤ娇鐢ㄦ椂闀垮崟浣嶏細1-澶� 2-鍛� 3-鏈� 4-骞�
+@property (nonatomic, assign) NSInteger storageTime;///< 瀛樺偍鏃堕暱
+@property (nonatomic, assign) NSInteger serviceType;///< 濂楅绫诲瀷锛�2銆佸搴椁愶紝 1 or null涓烘櫘閫氬椁�
+@property (nonatomic, copy) NSString *effectTime;///< 鐢熸晥鏃堕棿
+@property (nonatomic, assign) NSInteger status;///< 鐘舵�侊細1 寰呬娇鐢� 2浣跨敤涓� 3宸蹭娇鐢�
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceInfo.h
new file mode 100644
index 0000000..da60bb4
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceInfo.h
@@ -0,0 +1,59 @@
+//
+// EZDeviceInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/16.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囦俊鎭璞�
+@interface EZDeviceInfo : NSObject
+
+/// 璁惧鍏宠仈鐨勯�氶亾淇℃伅
+@property (nonatomic, strong) NSArray *cameraInfo;
+/// 璁惧鍏宠仈鐨勯�氶亾鏁伴噺
+@property (nonatomic) NSInteger cameraNum;
+/// 鍏锋湁闃叉姢鑳藉姏鐨勮澶囧竷鎾ら槻鐘舵�侊細0-鐫$湢锛�8-鍦ㄥ锛�16-澶栧嚭锛屾櫘閫欼PC甯冩挙闃茬姸鎬侊細0-鎾ら槻锛�1-甯冮槻
+@property (nonatomic) NSInteger defence;
+/// 璁惧鍏宠仈鐨勬帰娴嬪櫒鏁伴噺
+@property (nonatomic) NSInteger detectorNum;
+/// 璁惧鍏宠仈鐨勬帰娴嬪櫒淇℃伅
+@property (nonatomic, strong) NSArray *detectorInfo;
+/// 璁惧鍥剧墖
+@property (nonatomic, copy) NSString *deviceCover;
+/// 璁惧鍚嶇О
+@property (nonatomic, copy) NSString *deviceName;
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 璁惧绫诲瀷
+@property (nonatomic, copy) NSString *deviceType;
+/// 璁惧鐗堟湰鍙�
+@property (nonatomic, copy) NSString *deviceVersion;
+/// 璁惧鍗忚鐗堟湰鍙风被鍨� 0:闈炲浗鏍� 6:鍥芥爣
+@property (nonatomic) NSInteger devProtoEnum;
+/// 璁惧鏄惁寮�鍚姞瀵�
+@property (nonatomic) BOOL isEncrypt;
+/// 璁惧鐘舵�侊紝1-鍦ㄧ嚎锛�2-涓嶅湪绾�
+@property (nonatomic) NSInteger status;
+/// 鏄惁鏀寔瀵硅 0-涓嶆敮鎸佸璁诧紝1-鏀寔鍏ㄥ弻宸ュ璁诧紝3-鏀寔鍗婂弻宸ュ璁诧紝4-鍚屾椂鏀寔鍏ㄥ弻宸ュ拰鍗婂弻宸�
+@property (nonatomic) NSInteger isSupportTalk;
+/// 鏄惁鏀寔浜戝彴鎺у埗
+@property (nonatomic) BOOL isSupportPTZ;
+/// 鏄惁鏀寔鏀惧ぇ
+@property (nonatomic) BOOL isSupportZoom;
+///鏄惁鏀寔鎻愮ず闊冲紑鍏�
+@property (nonatomic) BOOL isSupportAudioOnOff;
+/// 鏄惁鏀寔涓績闀滃儚缈昏浆
+@property (nonatomic) BOOL isSupportMirrorCenter;
+/// 鏄惁鏀寔澹版尝閰嶇綉
+@property (nonatomic) BOOL isSupportSoundWave;
+/// 鏄惁鏀寔鍊嶆暟鍥炴斁
+@property (nonatomic) BOOL isSupportPlaybackRate;
+/// 璁惧澶х被
+@property (nonatomic,copy) NSString *category;
+/// 娣诲姞鏃堕棿
+@property (nonatomic,strong) NSDate *addTime;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDevicePtzAngleInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDevicePtzAngleInfo.h
new file mode 100644
index 0000000..4437921
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDevicePtzAngleInfo.h
@@ -0,0 +1,47 @@
+//
+// EZDevicePtzAngleInfo.h
+// EzvizOpenSDK
+//
+// Created by JuneCheng on 2022/4/27.
+// Copyright 漏 2022 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZDevicePtzAngleInfo : NSObject
+
+/** 姘村钩鏂瑰悜璧风偣瑙掑害 */
+@property (readonly) NSInteger horizontalStartAngle;
+
+/** 姘村钩鏂瑰悜缁堢偣瑙掑害 */
+@property (readonly) NSInteger horizontalEndAngle;
+
+/** 姘村钩鏂瑰悜褰撳墠瑙掑害 */
+@property (readonly) NSInteger horizontalCurrentAngle;
+
+/** 鍨傜洿鏂瑰悜璧风偣瑙掑害 */
+@property (readonly) NSInteger verticalStartAngle;
+
+/** 鍨傜洿鏂瑰悜缁堢偣瑙掑害 */
+@property (readonly) NSInteger verticalEndAngle;
+
+/** 鍨傜洿鏂瑰悜褰撳墠瑙掑害 */
+@property (readonly) NSInteger verticalCurrentAngle;
+
+/** 鏂瑰悜 */
+@property (readonly) NSInteger orientation;
+
+/** 鐗堟湰鍙� */
+@property (readonly) NSInteger ptzCfgVersion;
+
+/** 鍒濆鍖� */
+- (instancetype)initWithType:(NSInteger)type data:(NSData *)data;
+
+- (float)horCurAngPercent;
+- (float)verCurAngPercent;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceRecordDownloadTask.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceRecordDownloadTask.h
new file mode 100644
index 0000000..adb8679
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceRecordDownloadTask.h
@@ -0,0 +1,39 @@
+//
+// EZDeviceRecordDownloadTask.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/7/2.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import "EZRecordDownloadTask.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class EZDeviceRecordFile;
+
+@interface EZDeviceRecordDownloadTask : EZRecordDownloadTask
+
+/**
+ sd鍗″綍鍍忎笅杞戒换鍔″垵濮嬪寲锛屽紓姝ユ柟娉�
+ 涓嬭浇鐨勫綍鍍忎负PS鏂囦欢锛屽闇�杞崲MP4锛岃鑷璋冪敤EZVideoTransformer绫荤殑杞皝瑁呮柟娉�
+
+ @param taskID 涓嬭浇浠诲姟鍞竴鏍囪瘑ID
+ @param recordFile 璁惧褰曞儚鏂囦欢
+ @param deviceSerial 璁惧搴忓垪鍙�
+ @param cameraNo 閫氶亾鍙�
+ @param verifyCode 璁惧楠岃瘉鐮�
+ @param savePath 涓嬭浇瀛樺偍璺緞
+ @param completion 瀹屾垚鍥炶皟锛屾垚鍔熻繑鍥瀟ask锛屽け璐ヨ繑鍥瀗il
+ */
+- (void) initTaskWithID:(NSUInteger)taskID
+ DeviceRecordFileInfo:(EZDeviceRecordFile *)recordFile
+ deviceSerial:(NSString *)deviceSerial
+ cameraNo:(NSInteger)cameraNo
+ verifyCode:(NSString *)verifyCode
+ savePath:(NSString *)savePath
+ completion:(void (^)(EZDeviceRecordDownloadTask *task))completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceRecordFile.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceRecordFile.h
new file mode 100644
index 0000000..b7a2867
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceRecordFile.h
@@ -0,0 +1,26 @@
+//
+// EZDeviceRecordFile.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/9/17.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囧綍鍍忔枃浠朵俊鎭紙鍖呭惈SD鍗°�佸悗绔叧鑱旇澶囩殑褰曞儚锛�
+@interface EZDeviceRecordFile : NSObject
+
+/// 璁惧褰曞儚鏂囦欢鐨勫紑濮嬫椂闂�
+@property (nonatomic, strong) NSDate *startTime;
+/// 璁惧褰曞儚鏂囦欢鐨勭粨鏉熸椂闂�
+@property (nonatomic, strong) NSDate *stopTime;
+/// 鏂囦欢绫诲瀷 -2:UNKNOW -1:ALLEVENT 0:ALARM 1:TIMING 2:IO 3:CMR 4:event 5:all
+@property (nonatomic, assign) int type;
+@property (nonatomic, copy) NSString *channelType;
+
+
+@property (nonatomic, assign) int seq;
+@property (nonatomic, strong) NSData *imageData;///<
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceUpgradeStatus.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceUpgradeStatus.h
new file mode 100644
index 0000000..06c173b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceUpgradeStatus.h
@@ -0,0 +1,19 @@
+//
+// EZDeviceUpgradeStatus.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/21.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囧崌绾х姸鎬佸璞�
+@interface EZDeviceUpgradeStatus : NSObject
+
+/// 鍗囩骇杩涘害锛屼粎status_type涓哄崌绾х姸鎬佹椂鏈夋晥锛屽彇鍊艰寖鍥翠负1-100
+@property (nonatomic) NSInteger upgradeProgress;
+/// 鍗囩骇鐘舵�侊細 0锛氭鍦ㄥ崌绾� 1锛氳澶囬噸鍚� 2锛氬崌绾ф垚鍔� 3锛氬崌绾уけ璐�
+@property (nonatomic) NSInteger upgradeStatus;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceVersion.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceVersion.h
new file mode 100644
index 0000000..a49a31a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZDeviceVersion.h
@@ -0,0 +1,27 @@
+//
+// EZDeviceVersion.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/10.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囩増鏈俊鎭璞�
+@interface EZDeviceVersion : NSObject
+
+/// 褰撳墠鐗堟湰
+@property (nonatomic, copy) NSString *currentVersion;
+/// 鏈�鏂扮増鏈�
+@property (nonatomic, copy) NSString *latestVersion;
+/// 鏄惁鍙互鏇存柊,娉細0-涓嶉渶瑕佸崌绾� 1-闇�瑕佸崌绾� 3-闇�瑕佸崌绾�1.7鐗堟湰浠ヤ笂
+@property (nonatomic) NSInteger isNeedUpgrade;
+/// 鏄惁姝e湪鍗囩骇,娉細0-涓嶅湪鍗囩骇 1-姝e湪鍗囩骇
+@property (nonatomic) NSInteger isUpgrading;
+/// 鍥轰欢涓嬭浇鍦板潃锛屽彧鏈夊彲浠ユ洿鏂版椂鎵嶄細鏈夊��
+@property (nonatomic, copy) NSString *downloadUrl;
+/// 鏇存柊鍐呭鎻忚堪
+@property (nonatomic, copy) NSString *upgradeDesc;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZHCNetDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZHCNetDeviceInfo.h
new file mode 100644
index 0000000..23946a9
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZHCNetDeviceInfo.h
@@ -0,0 +1,36 @@
+//
+// EZHCNetDeviceInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/9/15.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EZHCNetDeviceInfo : NSObject
+
+///鐧诲綍鍚巙ser id
+@property (nonatomic,assign) NSInteger userId;
+///妯℃嫙閫氶亾鏁�
+@property (nonatomic,assign) NSInteger channelCount;
+///妯℃嫙閫氶亾璧峰閫氶亾鍙�,0涓烘棤鏁堟灉
+@property (nonatomic,assign) NSInteger startChannelNo;
+///鏁板瓧閫氶亾鏁�
+@property (nonatomic,assign) NSInteger dChannelCount;
+///璧峰鏁板瓧閫氶亾鍙凤紝0涓烘棤鏁堟灉
+@property (nonatomic,assign) NSInteger dStartChannelNo;
+///鍛婅杈撳叆涓暟
+@property (nonatomic,assign) NSInteger byAlarmInPortNum;
+///鍛婅杈撳嚭涓暟
+@property (nonatomic,assign) NSInteger byAlarmOutPortNum;
+///纭洏涓暟
+@property (nonatomic,assign) NSInteger byDiskNum;
+///璁惧绫诲瀷
+@property (nonatomic,assign) NSInteger byDVRType;
+///闆堕�氶亾涓暟
+@property (nonatomic,assign) NSInteger byZeroChanNum;
+///璁惧璇煶閫氶亾鏁�
+@property (nonatomic,assign) NSInteger byAudioChanNum;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZHiddnsDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZHiddnsDeviceInfo.h
new file mode 100644
index 0000000..4627fa0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZHiddnsDeviceInfo.h
@@ -0,0 +1,84 @@
+//
+// EZHiddnsDeviceInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/9/9.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EZHiddnsDeviceInfo : NSObject
+
+///璁惧鍩熷悕
+@property (nonatomic,copy) NSString *domain;
+
+///璁惧澶栫綉鍦板潃
+@property (nonatomic,copy) NSString *deviceIp;
+
+///璁惧鐭簭鍒楀彿
+@property (nonatomic,copy) NSString *subSerial;
+
+///璁惧闀垮簭鍒楀彿
+@property (nonatomic,copy) NSString *serial;
+
+///璁惧鍚嶇О
+@property (nonatomic,copy) NSString *deviceName;
+
+///鏄犲皠妯″紡锛�1-鎵嬪姩锛�0-鑷姩
+@property (nonatomic,assign) NSInteger upnpMappingMode;
+
+///鎵嬪姩鏄犲皠http绔彛锛寀pnpMappingMode=1鏃朵娇鐢�
+@property (nonatomic,assign) NSInteger mappingHiddnsHttpPort;
+
+///鏄犲皠http绔彛
+@property (nonatomic,assign) NSInteger hiddnsHttpPort;
+
+///鏄犲皠https绔彛
+@property (nonatomic,assign) NSInteger hiddnsHttpsPort;
+
+///鎵嬪姩鏄犲皠鏈嶅姟绔彛锛寀pnpMappingMode=1鏃朵娇鐢�
+@property (nonatomic,assign) NSInteger mappingHiddnsCmdPort;
+
+///鏄犲皠鏈嶅姟绔彛
+@property (nonatomic,assign) NSInteger hiddnsCmdPort;
+
+///鏄犲皠鍙栨祦绔彛
+@property (nonatomic,assign) NSInteger hiddnsRtspPort;
+
+/////璁惧灞�鍩熺綉IP鍦板潃
+//@property (nonatomic,copy) NSString *localIp;
+//
+/////鏈湴http绔彛
+//@property (nonatomic,assign) NSInteger localHiddnsHttpPort;
+//
+/////鏈湴https绔彛
+//@property (nonatomic,assign) NSInteger localHiddnsHttpsPort;
+//
+/////鏈湴鏈嶅姟绔彛
+//@property (nonatomic,assign) NSInteger localHiddnsCmdPort;
+//
+/////鏈湴鍙栨祦绔彛
+//@property (nonatomic,assign) NSInteger localHiddnsRtspPort;
+//
+/////澶栫綉Telenet绔彛
+//@property (nonatomic,assign) NSInteger cmdPort;
+//
+/////澶栫綉Http鐩戝惉鐨勭鍙PNP妫�娴嬩娇鐢�
+//@property (nonatomic,assign) NSInteger httpPort;
+//
+/////澶栫綉鎺ㄦ祦浣跨敤鐨勭洃鍚鍙�
+//@property (nonatomic,assign) NSInteger streamPort;
+//
+/////鍐呯綉Telent绔彛
+//@property (nonatomic,assign) NSInteger localCmdPort;
+//
+/////鍐呯綉Http鐩戝惉鐨勭鍙PNP妫�娴嬩娇鐢�
+//@property (nonatomic,assign) NSInteger localHttpPort;
+//
+/////鍐呯綉鎺ㄦ祦浣跨敤鐨勭洃鍚鍙�
+//@property (nonatomic,assign) NSInteger localStreamPort;
+
+
+@end
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZLeaveMessage.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZLeaveMessage.h
new file mode 100644
index 0000000..dbf5c62
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZLeaveMessage.h
@@ -0,0 +1,41 @@
+//
+// EZLeaveMessage.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/11.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓虹暀瑷�娑堟伅瀵硅薄
+@interface EZLeaveMessage : NSObject
+
+/// 娑堟伅Id
+@property (nonatomic, copy) NSString *id;
+/// 璁惧搴忓垪鍙�
+@property (nonatomic, copy) NSString *deviceSerial;
+/// 璁惧鍚嶇О
+@property (nonatomic, copy) NSString *deviceName;
+/// 鐣欒█鏃堕暱锛堝崟浣嶏細绉掞級
+@property (nonatomic) NSInteger duration;
+/// 鐣欒█娑堟伅绫诲瀷锛�1-璇煶鐣欒█ 2-瑙嗛鐣欒█
+@property (nonatomic) NSInteger contentType;
+/// 鎺ユ敹or鍥炲锛�1-鐢ㄦ埛鎺ユ敹锛堣澶囧彂閫侊級2-鐢ㄦ埛鍥炲锛堝鎴风鍙戦�侊級
+@property (nonatomic) NSInteger messageDirection;
+/// 鍙戦�佺绫诲瀷锛�1鈥揊1璁惧 2鈥揥eb瀹㈡埛绔� 3鈥搃Phone瀹㈡埛绔� 4鈥搃Pad瀹㈡埛绔� 5鈥揳ndroid瀹㈡埛绔� 6鈥揳ndroidPad瀹㈡埛绔�
+@property (nonatomic) NSInteger senderType;
+/// 鍙戦�佺鍒悕
+@property (nonatomic, copy) NSString *senderName;
+/// 鐣欒█灏侀潰鎴浘鍦板潃
+@property (nonatomic, copy) NSString *messagePicUrl;
+/// 娑堟伅鐘舵�侊細0-鏈 1-宸茶 2-鍒犻櫎
+@property (nonatomic) NSInteger status;
+/// 浜戝瓨鍌ㄦ湇鍔″櫒鍦板潃锛岀洰鍓嶉粯璁や负姝︽眽浜戝瓨鍌紝鏍煎紡涓�:{鍩熷悕:绔彛}
+@property (nonatomic, copy) NSString *cloudServerUrl;
+/// 鍒涘缓鏃堕棿
+@property (nonatomic, strong) NSDate *createTime;
+/// 淇敼鏃堕棿
+@property (nonatomic, strong) NSDate *updateTIme;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZPMPlayPrivateTokenInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZPMPlayPrivateTokenInfo.h
new file mode 100644
index 0000000..7d69b75
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZPMPlayPrivateTokenInfo.h
@@ -0,0 +1,22 @@
+//
+// EZPMPlayPrivateTokenInfo.h
+// EZPlay
+//
+// Created by JuneCheng on 2022/11/24.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZPMPlayPrivateTokenInfo : NSObject
+
+@property (nonatomic, assign) BOOL enable;///<
+@property (nonatomic, copy) NSString *token;///<
+
+
+- (instancetype)initWithType:(NSInteger)type data:(NSData *)data;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZPlayerExParamInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZPlayerExParamInfo.h
new file mode 100644
index 0000000..1fe1a86
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZPlayerExParamInfo.h
@@ -0,0 +1,34 @@
+//
+// EZPlayerExParamInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2018/4/2.
+// Copyright 漏 2018骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+typedef enum
+{
+ EZPLAYER_STREAM_DEFAULT = 0,//榛樿
+ EZPLAYER_STREAM_MAIN,//涓荤爜娴�
+ EZPLAYER_STREAM_SUB,//瀛愮爜娴�
+ EZPLAYER_STREAM_MAX
+}EZPlayerStreamType;
+
+typedef enum
+{
+ EZPLAYER_TRANS_DEFAULT = 0, //榛樿
+ EZPLAYER_TRANS_EZVIZ,//钀ょ煶绉佹湁娴佸獟浣�
+ EZPLAYER_TRANS_RTMP,//RTMP
+ EZPLAYER_TRANS_MAX
+}EZPlayerTransportType;
+
+@interface EZPlayerExParamInfo : NSObject
+
+@property (nonatomic,copy) NSString *vtduIp; ///vtdu鏈嶅姟鍣╥p
+@property (nonatomic,assign) NSInteger vtduPort; //vtdu绔彛鍙�
+@property (nonatomic) EZPlayerStreamType streamMode; ///榛樿涓�0锛屼富鐮佹祦涓�1锛屽瓙鐮佹祦涓�2
+@property (nonatomic,assign) EZPlayerTransportType protocolType; ///浼犺緭鍗忚锛岄粯璁や负0
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZProbeDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZProbeDeviceInfo.h
new file mode 100644
index 0000000..18e7369
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZProbeDeviceInfo.h
@@ -0,0 +1,47 @@
+//
+// EZProbeDeviceInfo.h
+// EZWiFiConfigSDK
+//
+// Created by DeJohn Dong on 15/12/11.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓烘煡璇㈣澶囦俊鎭璞★紙璁惧娣诲姞鍓嶄娇鐢級
+@interface EZProbeDeviceInfo : NSObject
+
+/// 灞曠ず鍚嶇О
+@property (nonatomic, copy) NSString *displayName;
+/// 璁惧澶х被鍚�
+@property (nonatomic, copy) NSString *category;
+/// 璁惧鍨嬪彿鍚�
+@property (nonatomic, copy) NSString *model;
+/// 璁惧鐭簭鍒楀彿
+@property (nonatomic, copy) NSString *subSerial;
+/// 璁惧闀垮簭鍒楀彿
+@property (nonatomic, copy) NSString *fullSerial;
+/// 璁惧鍦ㄧ嚎鐘舵�侊紝1-鍦ㄧ嚎锛屽叾浠�-涓嶅湪绾�
+@property (nonatomic) NSInteger status;
+/// 璁惧鍥剧墖
+@property (nonatomic, copy) NSString *defaultPicPath;
+/// 鏄惁鏀寔wifi锛�0-涓嶆敮鎸侊紝1-鏀寔锛�2-鏀寔甯serId鐨勬柊鐨剋ifi閰嶇疆鏂瑰紡锛�3-鏀寔smartwifi
+@property (nonatomic) NSInteger supportWifi;
+/// 鏄惁鏀寔AP閰嶇綉锛�2-鏀寔AP锛屽叾浠栧�间负涓嶆敮鎸丄P閰嶇綉
+@property (nonatomic) NSInteger supportAP;
+/// 鏄惁鏀寔澹版尝閰嶇疆,0-涓嶆敮鎸侊紝1-鏀寔
+@property (nonatomic) NSInteger supportSoundWave;
+/// 鏄惁鏀寔浜戝瓨鍌紝0-涓嶆敮鎸侊紝1-鏀寔
+@property (nonatomic) NSInteger supportCloud;
+/// 璁惧鍗忚鐗堟湰
+@property (nonatomic, copy) NSString *releaseVersion;
+/// 璁惧鐗堟湰
+@property (nonatomic, copy) NSString *version;
+/// 鍙敤浜庢坊鍔犵殑閫氶亾鏁�
+@property (nonatomic) NSInteger availiableChannelCount;
+/// N1锛孯1锛孉1绛夎澶囧叧鑱旂殑璁惧鏁�
+@property (nonatomic) NSInteger relatedDeviceCount;
+/// 鑳藉姏闆�
+@property (nonatomic, copy) NSString *supportExt;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordCoverFetcherManager.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordCoverFetcherManager.h
new file mode 100644
index 0000000..8c9e365
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordCoverFetcherManager.h
@@ -0,0 +1,69 @@
+//
+// EZRecordCoverFetcherManager.h
+// EZPlay
+//
+// Created by JuneCheng on 2022/12/19.
+//
+
+#import <Foundation/Foundation.h>
+@class EZDeviceRecordFile;
+
+// Fetcher鍒濆鍖栦唬鐞�
+@protocol RecordCoverFetcherDelegate<NSObject>
+
+@optional
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧櫒鍒濆鍖栨垚鍔熷洖璋�
+ */
+- (void)onFetcherInitSuccess;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧櫒鍒濆鍖栧け璐ュ洖璋�
+ */
+- (void)onFetcherInitFailed;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧皝闈㈡垚鍔熷洖璋�
+ */
+- (void)onGetCoverSuccess:(int)seq data:(NSData *_Nonnull)data;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧皝闈㈠け璐ュ洖璋�
+ */
+- (void)onGetCoverFailed:(int)errorCode;
+
+@end
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZRecordCoverFetcherManager : NSObject
+
+
+@property (nonatomic, weak) id <RecordCoverFetcherDelegate> fetcherDelegate;
+
++ (instancetype)sharedInstance;
+
+/**
+ * 涓庤澶囧缓绔嬮摼鎺�
+ *
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param cameraNo 璁惧閫氶亾鍙�
+ */
+- (void)initFetcherWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo;
+
+
+/**
+ * 鏂紑涓庤澶囩殑閾炬帴
+ */
+- (void)stopFetcher;
+
+
+/**
+ * 璺熻澶囪姹係D鍗″綍鍍忓皝闈�
+ */
+- (void)requestRecordCover:(NSArray<EZDeviceRecordFile *> *)recordFiles;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordDownloadTask.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordDownloadTask.h
new file mode 100644
index 0000000..ba50a2a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordDownloadTask.h
@@ -0,0 +1,86 @@
+//
+// EZRecordDownloadTask.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/7/2.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSInteger, EZRecordDownloaderStatus)
+{
+ EZRecordDownloaderStatusStart = 1, //寮�濮嬩笅杞�
+ EZRecordDownloaderStatusFinish = 2, //褰曞儚涓嬭浇缁撴潫
+ EZRecordDownloaderStatusMoreToken = 3,
+};
+
+typedef enum : NSUInteger {
+ EZRecordDownloadTaskWaitting,
+ EZRecordDownloadTaskDownloading,
+ EZRecordDownloadTaskCompleting,
+} EZRecordDownloadTaskStatus;
+
+@interface EZRecordDownloadTask : NSObject
+
+/**
+ 姣忎釜涓嬭浇浠诲姟鐨勫敮涓�鏍囪瘑
+ */
+@property (nonatomic, assign) NSUInteger taskID;
+
+
+@property (nonatomic, assign) EZRecordDownloadTaskStatus taskStatus;
+
+/**
+ 鏈湴瀛樻斁璺緞
+ */
+@property (nonatomic, strong) NSString *saveFilePath;
+
+/**
+ 缁撴潫鍥炶皟
+ */
+@property (nonatomic, copy) void(^finshed)(EZRecordDownloaderStatus statusCode);
+
+/**
+ 澶辫触鍥炶皟
+ */
+@property (nonatomic, copy) void(^failed)(NSError *error);
+
+/**
+ 宸蹭笅杞芥枃浠跺ぇ灏忓洖璋�
+ */
+@property (nonatomic, copy) void(^downloading)(NSUInteger downloadSize);
+
+/**
+ 寮�濮嬩笅杞�
+
+ @return 鎴愬姛0锛屽け璐�-1
+ */
+- (int)startRecordDownload;
+
+/**
+ 缁撴潫涓嬭浇锛屾竻鐞嗚祫婧�
+ */
+- (void)stopRecordDownload;
+
+/**
+ 璁剧疆涓嬭浇鍥炶皟
+
+ @param finshed 缁撴潫鍥炶皟
+ @param failed 澶辫触鍥炶皟
+ */
+- (void)setDownloadCallBackWithFinshed:(void(^)(EZRecordDownloaderStatus statusCode))finshed
+ failed:(void(^)(NSError *error))failed;
+
+/**
+ 璁剧疆涓嬭浇杩涘害鍥炶皟
+
+ @param downloading 涓嬭浇鏂囦欢澶у皬鍥炶皟
+ */
+- (void)setDownloadCallBackWithDownloadSize:(void(^)(NSUInteger downloadSize))downloading;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordDownloader.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordDownloader.h
new file mode 100644
index 0000000..d815790
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZRecordDownloader.h
@@ -0,0 +1,49 @@
+//
+// EZRecordDownloader.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/7/2.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class EZRecordDownloadTask;
+
+@interface EZRecordDownloader : NSObject
+
+
+/// 涓嬭浇浠诲姟闃熷垪
+@property (nonatomic, strong, readonly) NSMutableArray *tasks;
+
+/**
+ 鍒濆鍖栧崟渚�
+
+ @return 鍗曚緥
+ */
++ (instancetype) shareInstane;
+
+/**
+ 娣诲姞涓嬭浇浠诲姟锛屽苟寮�濮嬩笅杞�
+ 浠诲姟涓嬭浇骞跺彂鏁伴噺闄愬埗锛屾渶楂樻敮鎸� 10 涓换鍔″苟琛屼笅杞�
+ 璁惧褰曞儚涓嬭浇锛氫緷璧栬澶囨墍鏀寔鐨勬渶楂樿矾鏁伴檺鍒�
+
+
+ @param task 涓嬭浇浠诲姟
+ @return 鏄惁鍔犲叆闃熷垪鎴愬姛 0 寮�濮嬩笅杞� -1 浠诲姟涓虹┖ -2 浠诲姟宸插湪涓嬭浇
+ */
+- (int) addDownloadTask:(EZRecordDownloadTask *)task;
+
+/**
+ 鍋滄涓嬭浇浠诲姟锛屽苟娓呴櫎涓嬭浇鍒楄〃涓殑浠诲姟銆備笅杞界粨鏉熸垨澶辫触鍧囪鎵ц锛屾竻鐞嗚祫婧�
+
+ @param task 涓嬭浇浠诲姟
+ @return 鏄惁绉婚櫎闃熷垪鎴愬姛
+ */
+- (int) stopDownloadTask:(EZRecordDownloadTask *)task;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZSADPDeviceInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZSADPDeviceInfo.h
new file mode 100644
index 0000000..7abbece
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZSADPDeviceInfo.h
@@ -0,0 +1,40 @@
+//
+// EZSADPDeviceInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/8/15.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EZSADPDeviceInfo : NSObject
+
+///闀胯澶囧簭鍒楀彿
+@property (nonatomic,copy) NSString *deviceSerial;
+///璁惧mac鍦板潃
+@property (nonatomic,copy) NSString *deviceMac;
+///璁惧鏄惁婵�娲�
+@property (nonatomic,assign) BOOL actived;
+///璁惧鏈湴鍦板潃 IPV4
+@property (nonatomic,copy) NSString *localIp;
+///璁惧绔彛鍙�
+@property (nonatomic,assign) NSInteger localPort;
+///璁惧鏈湴鍦板潃 IPV6
+@property (nonatomic,copy) NSString *localIpV6;
+///http绔彛鍙�
+@property (nonatomic,assign) NSInteger httpPort;
+///璁惧绫诲瀷
+@property (nonatomic,assign) NSInteger deviceType;
+///璁惧绫诲瀷鎻忚堪
+@property (nonatomic,copy) NSString *deviceTypeDes;
+///璁惧鍥轰欢鐗堟湰鍙�
+@property (nonatomic,copy) NSString *firmwareVersion;
+///鎸変綅琛ㄧず,瀵瑰簲涓轰负1琛ㄧず鏀寔,0x01:鏄惁鏀寔Ipv6,0x02:鏄惁鏀寔淇敼Ipv6鍙傛暟,0x04:鏄惁鏀寔Dhcp,0x08:鏄惁鏀寔udp澶氭挱,0x10:鏄惁鍚姞瀵嗚妭鐐�,0x20:鏄惁鏀寔鎭㈠瀵嗙爜,0x40:鏄惁鏀寔閲嶇疆瀵嗙爜,0x80:鏄惁鏀寔鍚屾IPC瀵嗙爜
+@property (nonatomic,assign) NSInteger abilitySupport;
+///鏄惁鍚敤DHCP
+@property (nonatomic,assign) BOOL DHCPOn;
+///鏄惁鏄悿鐭宠澶�
+@property (nonatomic,assign) BOOL isEzvizDevice;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZStorageInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZStorageInfo.h
new file mode 100644
index 0000000..2393d5a
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZStorageInfo.h
@@ -0,0 +1,23 @@
+//
+// EZStorageInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/15.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓鸿澶囧瓨鍌ㄤ俊鎭璞�
+@interface EZStorageInfo : NSObject
+
+/// 瀛樺偍浠嬭川绱㈠紩
+@property (nonatomic) NSInteger index;
+/// 瀛樺偍浠嬭川鍚嶇О
+@property (nonatomic, copy) NSString *name;
+/// 瀛樺偍浠嬭川鐘舵�侊紝0姝e父銆�1瀛樺偍浠嬭川閿欍��2鏈牸寮忓寲銆�3姝e湪鏍煎紡鍖�
+@property (nonatomic) NSInteger status;
+/// 瀛樺偍浠嬭川鏍煎紡鍖栬繘搴�
+@property (nonatomic) NSInteger formatRate;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZTokenKit.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZTokenKit.h
new file mode 100644
index 0000000..03f143f
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZTokenKit.h
@@ -0,0 +1,40 @@
+//
+// EzvizTokenKit.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/8/31.
+// Copyright (c) 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface EZTokenKit : NSObject
+
+@property (nonatomic, readonly) NSString *token; //鑾峰彇绗竴涓猼oken
+@property (nonatomic, readonly) NSInteger tokenCount; //褰撳墠tokenKit閲岃繕鏈夊灏憈oken鐨勬暟閲�
+
+/**
+ * 鍗曚緥鏂规硶
+ *
+ * @return EZTokenKit瀵硅薄
+ */
++ (instancetype)sharedKit;
+
+/**
+ * 璁剧疆TokenList鏁扮粍
+ *
+ * @param tokenList token鏁扮粍
+ */
+- (void)setTokens:(NSArray *)tokenList;
+
+/**
+ * 娓呯┖鏁扮粍
+ */
+- (void)clearTokens;
+
+/**
+ * 棰勫姞杞藉彇娴乼oken
+ */
+- (void)prepareToken:(void (^)(NSError *error))block;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZUserInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZUserInfo.h
new file mode 100644
index 0000000..dbfafe6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZUserInfo.h
@@ -0,0 +1,23 @@
+//
+// EZUserInfo.h
+// EzvizOpenSDK
+//
+// Created by DeJohn Dong on 15/12/11.
+// Copyright 漏 2015骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓虹敤鎴蜂俊鎭璞�
+@interface EZUserInfo : NSObject
+
+/// 鐢ㄦ埛鍚�
+@property (nonatomic, copy) NSString *username;
+/// 鏄电О锛屾捣澶栫増鏈瀛楁涓虹┖
+@property (nonatomic, copy) NSString *nickname;
+/// 鐢ㄦ埛澶村儚鍦板潃锛屾捣澶栫増鏈瀛楁涓虹┖
+@property (nonatomic, copy) NSString *avatarUrl;
+/// 鐢ㄦ埛鍖哄煙domain
+@property (nonatomic, copy) NSString *areaDomain;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoQualityInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoQualityInfo.h
new file mode 100644
index 0000000..f392af7
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoQualityInfo.h
@@ -0,0 +1,23 @@
+//
+// EZVideoQualityInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/2/28.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+/// 姝ょ被涓洪�氶亾鏀寔鐨勬竻鏅板害淇℃伅
+@interface EZVideoQualityInfo : NSObject
+
+/// 娓呮櫚搴﹀悕绉帮紝濡傝秴娓呫�侀珮娓呫�佸潎琛°�佹祦鐣呯瓑
+@property (nonatomic,copy) NSString *videoQualityName;
+
+/// 瑙嗛璐ㄩ噺锛�0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+@property (nonatomic,assign) NSInteger videoLevel;
+
+/// 璇ユ竻鏅板害鎵�浣跨敤鐨勭爜娴佺被鍨嬶紝1涓轰富鐮佹祦锛�2涓哄瓙鐮佹祦
+@property (nonatomic,assign) NSInteger streamType;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZBAVParam.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZBAVParam.h
new file mode 100644
index 0000000..b3d1e94
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZBAVParam.h
@@ -0,0 +1,196 @@
+//
+// EZBAVParam.h
+// EZBAVClient
+//
+// Created by kanhaiping on 2018/6/27.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+/*
+ typedef struct SBavDevInfo
+ {
+ YS_INT8 m_szDevSerial[STREAM_DEV_SERIAL_LEN + 1]; //蹇呭~ 璁惧搴忓垪鍙�
+ YS_UINT32 m_sChannel; //蹇呭~ 閫氶亾鍙�
+ YS_INT16 m_sDevStreamType; //蹇呭~ 璁惧涓诲瓙鐮佺被鍨�
+ YS_INT8 m_szAuthToken[STREAM_TOKEN_LEN + 1]; //蹇呭~ 璁よ瘉token
+ }SBavDevInfo;
+ */
+
+@interface EZBAVDevInfo : NSObject
+@property (nonatomic, strong) NSString *serial; /**< 蹇呭~ 璁惧搴忓垪鍙� */
+@property (nonatomic, assign) int32_t m_iChannel;//蹇呭~ 閫氶亾鍙�
+@property (nonatomic, assign) int32_t m_iDevStreamType;//蹇呭~ 璁惧涓诲瓙鐮佺被鍨�
+@property (nonatomic, strong) NSString *m_szAuthToken; /**< 蹇呭~ 璁よ瘉token */
+@end
+/*
+ typedef struct
+ {
+ YS_UINT32 m_iRoomId; //蹇呭~ 闇�瑕佸姞鍏ユ埧闂村彿
+ YS_UINT32 m_uClientId; //蹇呭~ 鍔犲叆鏂筩lientId
+ YS_INT8 m_szCustomId[CUSTOMID_LEN + 1]; //閫夋嫨 鍔犲叆鏂硅嚜瀹氫箟Id
+ YS_INT8 m_szPassword[STREAM_TOKEN_LEN + 1]; //蹇呭~ 鎴块棿瀵嗙爜
+ YS_UINT8 m_iCltType; //蹇呭~ 瀹㈡埛绔被鍨�
+ YS_UINT16 m_iStsPort; //蹇呭~ 杞彂鏈嶅姟绔彛
+ YS_INT8 m_szStsAddr[CLIENT_STREAM_SVR_ADDR_LEN + 1]; //蹇呭~ 杞彂鏈嶅姟鍦板潃
+ YS_UINT16 m_iVcPort; //蹇呭~ 浼氭帶鏈嶅姟绔彛
+ YS_INT8 m_szVcAddr[CLIENT_STREAM_SVR_ADDR_LEN + 1]; //蹇呭~ 浼氭帶鏈嶅姟鍦板潃
+ YS_INT8 m_szFilePath[FLIEPATH + 1]; //閫夋嫨 鍐欐枃浠剁殑璺緞
+ YS_INT8 m_szExtensionParas[CLIENT_STREAM_EXTENSION_LEN + 1]; //閫夋嫨 鎵╁睍瀛楁淇℃伅
+ }EZConferenceParam;
+ */
+@interface EZRTCJoinParam : NSObject
+@property (nonatomic, assign) int32_t m_iRoomId; /**<蹇呭~ 闇�瑕佸姞鍏ユ埧闂村彿 */
+@property (nonatomic, assign) int32_t m_uClientId; /**< 蹇呭~ 鍔犲叆鏂筩lientId */
+@property (nonatomic, strong) NSString *m_szCustomId; /**< 閫夋嫨 鍔犲叆鏂硅嚜瀹氫箟Id */
+@property (nonatomic, strong) NSString *m_szPassword; /**< 閫夋嫨 鎴块棿瀵嗙爜 */
+@property (nonatomic, assign) int32_t m_iCltType; /**< 蹇呭~ 瀹㈡埛绔被鍨� */
+@property (nonatomic, strong) NSString *m_szVcAddr;//蹇呭~ 瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟鍦板潃
+@property (nonatomic, assign) int32_t m_iVcPort;//蹇呭~ 瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟绔痥鍙�
+@property (nonatomic, strong) NSString *m_szStsAddr; /**< 蹇呭~ 杞彂鏈嶅姟鍦板潃 */
+@property (nonatomic, assign) int32_t m_iStsPort; /**< 蹇呭~ 杞彂鏈嶅姟绔彛 */
+@property (nonatomic, strong) NSString *m_szExtensionParas; /**< 閫夋嫨 鎵╁睍瀛楁淇℃伅 */
+
+@end
+
+
+@interface EZBAVParam : NSObject
+
+@property (nonatomic, assign) int32_t m_iCltRole; /**< 蹇呭~ 0 鍙戣捣 1 鎺ュ彈 鍙戣捣绔~鍐�0 鎺ュ彈绔~鍐�1 鎷掔粷涓�2 */
+@property (nonatomic, assign) int32_t m_iStreamType;/**< 蹇呴�� 0 闊宠棰� 1 瀵硅 2 浼氳*/
+//@property (nonatomic, assign) int32_t m_szIsNpq;/**< 閫夋嫨 0 涓嶈蛋NPQ锛岃蛋TCP 1 鏄疦PQ锛岃蛋UDP */
+@property (nonatomic, assign) int32_t m_iCltType; /**< 蹇呭~ 瀹㈡埛绔被鍨� */
+
+@property (nonatomic, strong) NSString *m_szVcAddr;//蹇呭~ 瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟鍦板潃
+@property (nonatomic, assign) int32_t m_iVcPort;//蹇呭~ 瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟绔痥鍙�
+@property (nonatomic, strong) NSString *m_szStsAddr; /**< 蹇呭~ 杞彂鏈嶅姟鍦板潃 */
+@property (nonatomic, assign) int32_t m_iStsPort; /**< 蹇呭~ 杞彂鏈嶅姟绔彛 */
+
+@property (nonatomic, assign) int32_t m_iRoomId; /**< 閫夋嫨 闇�瑕佸姞鍏ユ埧闂村彿锛屽彧鏈夋帴鍙楃闇�瑕佸~鍐� */
+@property (nonatomic, assign) int32_t m_iClientId; //閫夊~ 鍙戣捣or鍔犲叆鑰呯殑id
+@property (nonatomic, strong) NSString *m_szSelfId; /**< 蹇呭~ 鏍囪瘑Id */
+@property (nonatomic, assign) int32_t m_iReason; /**< 閫夋嫨 鍘熷洜 鎷掓帴鎺ュ惉101 鏃犱汉鎺ュ惉102 */
+
+//@property (nonatomic, assign) int32_t m_iMaxBitrate;/**< 蹇呭~ 鐮佺巼鍙樺寲鑼冨洿鐨勬渶澶у�� */
+//
+//@property (nonatomic, assign) int32_t m_iMinBitrate;/**< 蹇呭~ 鐮佺巼鍙樺寲鑼冨洿鐨勬渶灏忓�� */
+
+//@property (nonatomic, assign) int32_t m_iType;/**< 閫夋嫨 鍙傝�傿AV_QOS_TYPE */
+//
+//@property (nonatomic, assign) int32_t m_iVideo;/**< 閫夋嫨 鏄惁寮�鍚棰慟os 1 寮�鍚� 0 涓嶅紑鍚� */
+//
+//@property (nonatomic, assign) int32_t m_iAudio;/**< 閫夋嫨 鏄惁寮�鍚煶棰慟os 1 寮�鍚� 0 涓嶅紑鍚� */
+
+@property (nonatomic, assign) int32_t m_iAuthType; /**< 蹇呭~ 璁よ瘉鏂瑰紡 */
+@property (nonatomic, strong) NSString *m_szAuthToken; /**< 蹇呭~ 璁よ瘉token */
+
+
+
+@property (nonatomic, assign) int32_t m_iOtherCltType; /**< 閫夋嫨 鍙湁瀵圭鏄墜琛ㄧ闇�濉啓 */
+@property (nonatomic, strong) NSString *m_szOterId; /**< 閫夋嫨 鍙湁瀵圭鏄墜琛ㄧ闇�濉啓 */
+@property (nonatomic, assign) int32_t m_iChannel;//閫夊~ 涓夋柟闊宠棰戞椂锛孖PC璁惧闇�瑕佸~鍐�
+@property (nonatomic, assign) int32_t m_iDevStreamType;//閫夊~ 璁惧涓诲瓙鐮佹祦
+
+@property (nonatomic, strong) NSString *m_szExtensionParas; /**< 閫夋嫨 鎵╁睍瀛楁淇℃伅 */
+
+
+@end
+
+
+
+/// 涓庝細鑰呬俊鎭�
+@interface EZRTCParticipantsInfo : NSObject
+@property (nonatomic, assign) uint32_t m_uRoomId;
+@property (nonatomic, assign) uint32_t m_uClientId;
+@property (nonatomic, strong) NSString *m_sCustomId;
+@property (nonatomic, strong) NSString *m_szUserName;
+@property (nonatomic, assign) uint8_t m_iCltType; //鐢ㄤ互鍖哄垎鏄惁鏄澶� 111:璁惧
+@property (nonatomic, assign) int8_t audioState;// 澹伴煶鍚敤鐘舵�� 0-鍏抽棴 1-鍚敤
+@property (nonatomic, assign) int8_t videoState;// 瑙嗛鍚敤鐘舵�� 0-鍏抽棴 1-涓绘祦 5-涓诲瓙娴�
+@property (nonatomic, assign) int8_t shareState;// 灞忓箷鍏变韩鍚敤鐘舵�� 0-鍏抽棴 1-鍚敤
+@property (nonatomic, assign) int8_t upNetState;//缃戠粶鐘舵��
+@property (nonatomic, assign) int8_t downNetState;//缃戠粶鐘舵��
+
+@end
+
+
+@interface EZRTCParticipantVolume : NSObject
+@property (nonatomic, assign) uint32_t m_uClientId;
+@property (nonatomic, strong) NSString *m_sCustomId;
+@property (nonatomic, assign) uint8_t m_sVolume; //闊抽噺寮哄害0-10 10涓烘渶寮� 0涓烘渶寮�
+@end
+
+
+@interface EZRTCStatistic : NSObject
+@property (nonatomic, assign) int32_t type;//0锛氬瓙琛� 1锛氫富琛�
+@property (nonatomic, strong) NSDictionary *statisticInfo;
+@end
+
+///鏈湴鐨勯煶瑙嗛缁熻
+@interface EZRTCLocalStatistics : NSObject
+///瑙嗛鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t videoSentBitrate; //瑙嗛浼犺緭鐮佺巼(涓婅)
+@property (nonatomic, assign) uint32_t videoSentFrameRate; //甯х巼澶у皬
+@property (nonatomic, assign) uint16_t videoPacketLossRate; //瑙嗛涓㈠寘鐜�
+@property (nonatomic, assign) uint16_t videoStreamType; //娴佺被鍨�
+///闊抽鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t audioSentBitrate;//闊抽浼犺緭鐮佺巼
+@property (nonatomic, assign) uint16_t audioPacketLossRate;//闊抽涓㈠寘鐜�
+@end
+
+///杩滅鐨勯煶瑙嗛缁熻
+@interface EZRTCRemoteStatistics : NSObject
+///瑙嗛鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t videoClientId; //杩滅瑙嗛clientId
+@property (nonatomic, assign) uint32_t videoReceivedBitrate;//杩滅瑙嗛浼犺緭鐮佺巼锛堜笅琛岋級
+@property (nonatomic, assign) uint32_t videoReceivedFrameRate;//杩滅甯х巼澶у皬
+@property (nonatomic, assign) uint16_t videoPacketLossRate;//杩滅瑙嗛涓㈠寘鐜�(涓嬭)
+@property (nonatomic, assign) uint16_t videoTotalFrozenTime;//杩滅瑙嗛鎬荤殑鍗¢】鏃堕暱
+@property (nonatomic, assign) uint16_t videoFrozenRate; //杩滅瑙嗛鍗¢】姣�
+@property (nonatomic, assign) uint16_t streamType; //杩滅娴佺被鍨�
+///闊抽鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t audioClientId; //杩滅闊抽clientId
+@property (nonatomic, assign) uint32_t audioReceivedBitrate;//杩滅闊抽浼犺緭鐮佺巼锛堜笅琛岋級
+@property (nonatomic, assign) uint16_t audioPacketLossRate;//杩滅闊抽涓㈠寘鐜�(涓嬭)
+@property (nonatomic, assign) uint16_t audioTotalFrozenTime;//杩滅闊抽鎬荤殑鍗¢】鏃堕暱
+@property (nonatomic, assign) uint16_t audioFrozenRate; //杩滅闊抽鍗¢】姣�
+
+@end
+
+@interface EZRTCVideoSize : NSObject
+
+@property (nonatomic, assign) int width;//瀹�
+@property (nonatomic, assign) int height;//楂�
+
+@end
+
+extern int32_t const EZBAVMessageRoomCreated;
+extern int32_t const EZBAVMessagePeerEnteredRoom;
+extern int32_t const EZBAVMessagePeerLeaveRoom;
+extern int32_t const EZBAVMessageStartInputData;
+//extern int32_t const EZBAVMessageOtherDisconnect;
+extern int32_t const EZBAVMessageTransferData;
+//extern int32_t const EZBAVMessageClientInfo;//鍏朵粬涓庝細瀹㈡埛绔俊鎭�
+extern int32_t const EZBAVMessageClientVolume;//鍏朵粬涓庝細瀹㈡埛绔煶閲�
+extern int32_t const EZBAVMessageClientAudioAvailable;
+extern int32_t const EZBAVMessageClientVideoAvailable;
+extern int32_t const EZBAVMessageNetworkQuality;
+extern int32_t const EZBAVMessageClientShareAvailable;
+extern int32_t const EZBAVMessageJoinRoomOK;
+extern int32_t const EZBAVMessageForcedQuit;
+extern int32_t const EZBAVMessageStatistic;
+
+extern int32_t const EZBAVForcedQuitReasonRepeatJoin;//宸插湪鍏朵粬鍦版柟鍔犲叆鎴块棿
+extern int32_t const EZBAVForcedQuitReasonMovedOut;//琚鐞嗗憳绉诲嚭鎴块棿
+extern int32_t const EZBAVForcedQuitReasonRoomDissolved;//鎴块棿瑙f暎
+
+extern int32_t const EZBAVMessageLocalVideoStats;//缁熻鏈湴瑙嗛瀹炴椂鏁版嵁
+extern int32_t const EZBAVMessageLocalAudioStats;//缁熻鏈湴闊抽瀹炴椂鏁版嵁
+extern int32_t const EZBAVMessageRemoteVideoStats;//缁熻杩滅瑙嗛瀹炴椂鏁版嵁
+extern int32_t const EZBAVMessageRemoteAudioStats;//缁熻杩滅闊抽瀹炴椂鏁版嵁
+
+
+
+typedef void(^EZAudioOpenResultBlock)(NSInteger ret);
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZConferenceClient.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZConferenceClient.h
new file mode 100644
index 0000000..43d478e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZConferenceClient.h
@@ -0,0 +1,238 @@
+//
+// EZBAVClient.h
+// EZBAVClient
+//
+// Created by kanhaiping on 2018/6/26.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "EZBAVParam.h"
+#import "EZRTCMediaSessionDefines.h"
+#import "EZVideoTalkView.h"
+
+
+
+@class EZConferenceClient;
+@class EZRTCCameraParam;
+@class EZRTCVideoEncodeParam;
+
+@protocol EZConferenceClientDelegate<NSObject>
+
+
+/// 閿欒鍥炶皟
+/// @param client client
+/// @param errorCode 鍑洪敊鐨勯敊璇爜
+- (void)bavClient:(EZConferenceClient *)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 闄勫姞淇℃伅锛�
+ 濡傛灉鏄疎ZBAVMessagePeerEnteredRoom锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId銆乵_szUserName瀛楁鏈夋晥
+ 濡傛灉鏄疎ZBAVMessagePeerLeaveRoom娑堟伅锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId瀛楁鏈夋晥
+ 濡傛灉鏄疎ZBAVMessageClientVolume娑堟伅锛宮sg鏄疎ZBAVParticipantVolume瀵硅薄
+ 濡傛灉娑堟伅鏄� EZBAVMessageTransferData msg鏄� msg鏄瓧绗︿覆 @"瀹為檯鐨勯�忎紶娑堟伅"
+ 濡傛灉娑堟伅鏄疎ZBAVMessageClientAudioAvailable锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜宎udioState瀛楁鏈夋晥
+ 濡傛灉娑堟伅鏄疎ZBAVMessageClientVideoAvailable 锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜寁ideoState瀛楁鏈夋晥
+ 濡傛灉娑堟伅鏄疎ZBAVMessageNetworkQuality 锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜宯etState瀛楁鏈夋晥
+ 濡傛灉娑堟伅鏄疎ZBAVMessageJoinRoomOK 锛宮sg鏄痭il
+ 濡傛灉娑堟伅鏄疎ZBAVMessageForcedQuit 锛宮sg鏄疦SNumber锛屾瘮濡侤(EZBAVForcedQuitReasonMovedOut)
+ 濡傛灉娑堟伅鏄疎ZBAVMessageStatistic锛宮sg鏄疎ZRTCStatistic
+
+ */
+- (void)bavClient:(EZConferenceClient *)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+@optional
+
+///**
+// 鍥炶皟娑堟伅 bavclient log鍥炶皟
+//
+// @param client client
+// @param msg 閫忎紶娑堟伅
+// */
+//- (void)bavClient:(EZVideoTalk *)client didReceivedBavClientLogMsg:(NSString*)msg;
+
+/**
+ 鏄剧ず鍥炶皟锛岄娆$敾闈㈠嚭鏉ヤ互鍙婂悗缁敾闈㈠昂瀵稿彂鐢熷彉鍖栨椂鍥炶皟
+
+ @param client client
+ @param width 鐢婚潰瀹藉害
+ @param height 鐢婚潰楂樺害
+ */
+- (void)bavClient:(EZConferenceClient *)client didDisplayWidth:(int32_t)width height:(int32_t)height ofRemoteClient:(int)clientID;
+
+/**
+ 鎾斁鍗¢】
+
+ @param client client
+ @param delayTime 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZConferenceClient *)client playDelayTime:(int32_t)delayTime ofRemoteClient:(int)clientID;
+
+/**
+ 鎾斁鍗¢】缁熻
+
+ @param client client
+ @param delayTimeStat 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZConferenceClient *)client playDelayTimeStatistics:(double)delayTimeStat ofRemoteClient:(int)clientID;
+
+/**
+ 鏈湴瑙嗛鏁版嵁鍥炶皟
+
+ @param localVideoStatistics 瑙嗛鐩稿叧鍙傛暟
+ @param width 瀹藉害
+ @param height 楂樺害
+ */
+- (void)onLocalVideoStats:(EZRTCLocalStatistics *)localVideoStatistics width:(int)width height:(int)height;
+
+/**
+ 鏈湴闊抽鏁版嵁鍥炶皟
+
+ @param localAudioStatistics 闊抽鐩稿叧鍙傛暟
+ */
+- (void)onLocalAudioStats:(EZRTCLocalStatistics *)localAudioStatistics;
+
+/**
+ 杩滅瑙嗛鏁版嵁鍥炶皟
+
+ @param remoteVideoStatistics 瑙嗛鐩稿叧鍙傛暟
+ @param width 瀹藉害
+ @param height 楂樺害
+ */
+- (void)onRemoteVideoStats:(EZRTCRemoteStatistics *)remoteVideoStatistics width:(int)width height:(int)height;
+
+/**
+ 杩滅闊抽鏁版嵁鍥炶皟
+
+ @param remoteAudioStatistics 闊抽鐩稿叧鍙傛暟
+ */
+- (void)onRemoteAudioStats:(EZRTCRemoteStatistics *)remoteAudioStatistics;
+
+
+@end
+
+@interface EZConferenceClient : NSObject
+
+@property (nonatomic, weak) id<EZConferenceClientDelegate> delegate;
+@property (nonatomic, assign, readonly) int32_t roomID;
+@property (nonatomic, assign, readonly) int32_t clientID;
+
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+/// 鍔犲叆浼氳锛堟柊鎺ュ彛锛�
+/// @param param 鍙傛暟
+- (NSInteger)enterRoom:(EZRTCJoinParam *)param;
+
+
+/// 閫�鍑轰細璁�
+- (NSInteger)exitRoom;
+
+
+/// 瑙f暎浼氳锛岃В鏁e悗锛屽叾浠栦笌浼氳�呬細鏀跺埌浼氳琚В鏁f秷鎭�
+- (void)dissolveRoom;
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableLocalVideo:(BOOL)enable;
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalView:(nullable EZVideoTalkView *)localWin;
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableLocalAudio:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
+
+/// 鏄惁寮�鍚緟娴侊紝杈呮祦鍒嗚鲸鐜囨洿浣庛�佺爜鐜囨洿灏�
+/// @param enable 鏄惁寮�鍚�
+/// @param encodeParam 缂栫爜鍙傛暟锛屽彲浠ヤ紶鍏il
+- (NSInteger)enableLocalSmallVideo:(BOOL)enable;
+
+
+/// 寮�鍚睆骞曞叡浜�
+/// @param name 鍏变韩鍚嶇О
+/// @param resultBlock 灞忓箷鍏变韩缁撴灉鍥炶皟
+/// @param didFinishBlock 灞忓箷鍏变韩缁撴潫鍥炶皟锛屽湪姝e父鐨勫睆骞曞叡浜粨鏉熺粨鏉熷悗鍥炶皟
+- (void)startScreenShareWithName:(NSString *)name
+ withResultBlock:(EZScreenShareResultBlock)resultBlock
+ andEndedBlock:(dispatch_block_t)didFinishBlock;
+
+
+/// 缁撴潫灞忓箷鍏变韩
+- (void)stopScreenShare;
+
+
+/// 璁剧疆杩滅▼绐楀彛锛�1.蹇呴』鍦ㄦ嬁鍒拌繙绔鎴风鍔犲叆鐨勬秷鎭悗璁剧疆锛�2.蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param window 鎾斁绐楀彛
+/// @param clientID 鍔犲叆鐨勫鎴风鐨処D
+/// @param streamType 1瑙嗛 4灏忔祦
+- (int32_t)setRemoteView:(nullable UIView *)window ofClient:(int32_t)clientID withStream:(NSInteger)streamType;
+
+/// 璁剧疆瑙傜湅灞忓箷鍏变韩鐨勭獥鍙�,蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param view 绐楀彛
+- (int32_t)setScreenShareView:(UIView *_Nullable)view;
+
+
+/// 閭�璇疯澶囧姞鍏ヤ細璁�
+/// @param dev 璁惧淇℃伅
+- (int32_t)inviteDev:(EZBAVDevInfo *_Nonnull)dev;
+
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+- (EZRTCStatistic *_Nullable)getStatistic;
+
+#pragma 闄勫姞鎺ュ彛
+
+/// 寮�鍏充細璁腑鏌愪釜涓庝細鑰呯殑澹伴煶锛岄粯璁ゅ紑
+/// @param open YES:寮�锛孨O:鍏�
+- (int32_t)soundCtrl:(BOOL)open forClient:(int32_t)clientID;
+
+
+
+/// 寮傛鑾峰彇鏈湴鎶撳浘
+/// @param block 鎶撳浘鎴愬姛鍥炶皟锛屽け璐mage涓簄il
+//- (void)localScreenShotWithBlock:(void (^)(UIImage *image))block;
+
+/// 鑾峰彇杩滅鎶撳浘
+/// @param quality 鍘嬬缉璐ㄩ噺 0 ~ 100
+//- (UIImage *)remoteScreenShotWithQuality:(int)quality;
+
+/// 鏈湴褰曞埗
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+- (BOOL)startLocalVideoRecordWithPath:(NSString *)path;
+
+/// 鍋滄鏈湴褰曞埗
+- (BOOL)stopLocalVideoRecord;
+
+/// 寮�濮嬭繙绔綍鍒� mp4
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+- (BOOL)startRemoteVideoRecordWithPath:(NSString *)path forClient:(int32_t)clientID;
+
+
+/// 鍋滄杩滅褰曞埗
+- (BOOL)stopRemoteVideoRecordForClient:(int32_t)clientID;
+
+
+/// 鍙戦�侀�忎紶娑堟伅鎺ュ彛锛屽悓姝ユ帴鍙o紝鍙兘鑰楁椂
+/// @param msg 娑堟伅鍐呭锛屾瘮濡俲son鏁版嵁
+- (int)sendTransferMsg:(NSString *)msg;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCCameraParam.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCCameraParam.h
new file mode 100644
index 0000000..503a5b8
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCCameraParam.h
@@ -0,0 +1,38 @@
+//
+// EZMediaSessionVideoParam.h
+// EZBAVClient
+//
+// Created by kanhaiping on 2018/7/13.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <AVFoundation/AVFoundation.h>
+
+@interface EZRTCCameraParam : NSObject
+
+
+/// 鎽勫儚澶撮噰闆嗛噰闆嗙敾闈㈢殑榛樿璁剧疆锛屾瘮濡侫VCaptureSessionPreset1280x720锛岃浼犲叆AVCaptureSessionPreset640x480 浠ヤ笂鐨勫垎杈ㄧ巼
+//@property (nonatomic, strong) AVCaptureSessionPreset resolutionPreset;
+
+/// 鏈�缁堣緭鍑虹殑鐢婚潰鐨勫
+//@property (nonatomic, assign) NSInteger pixelWidth;
+//
+///// 鏈�缁堣緭鍑虹殑鐢婚潰鐨勯珮
+//@property (nonatomic, assign) NSInteger pixelHeigth;
+
+/// 浼犲叆 AVCaptureVideoOrientation锛岄粯璁ょ珫灞�
+@property (nonatomic, assign) AVCaptureVideoOrientation videoOrientation;
+
+
+/// 鏄惁鏄悗缃憚鍍忓ご锛岄粯璁O
+@property (nonatomic, assign) BOOL isBackCameraSeleced;
+
+///// I甯ч棿闅� 榛樿4绉�
+//@property (nonatomic, assign) NSInteger encodeKeyFrameInterval;
+//
+///// 甯х巼
+//@property (nonatomic, assign) NSInteger fps;
+
++ (AVCaptureSessionPreset)resolutionPresetForWidth:(NSInteger)width andHeigth:(NSInteger)heigth andOri:(AVCaptureVideoOrientation)ori;
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCMediaSessionDefines.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCMediaSessionDefines.h
new file mode 100644
index 0000000..7c1a1bb
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCMediaSessionDefines.h
@@ -0,0 +1,107 @@
+//
+// EZMediaSessionDefines.h
+// H264 Encode and Decode
+//
+// Created by kanhaiping on 2018/6/22.
+// Copyright 漏 2018骞� AJB. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#define EZMediaSessionEncodeResolutionRatioHigh 1 //鍒嗚鲸鐜� 1锛�480*480 0锛�320*320
+#define EZMediaSessionDstVideoFPS (15)
+#define EZMediaSessionDstVideoMaxKeyFrameInterval (300)//鍗曚綅绉�
+
+#define EZMediaSessionSmallStreamWidth (320)
+#define EZMediaSessionSmallStreamHeight (320)
+
+#define EZMediaSessionDefaultStreamWidth (480)
+#define EZMediaSessionDefaultStreamHeight (480)
+
+#define EZMediaSessionDstVideoAverageBitRate480x480 (4 * 128 * 1024)//鍗曚綅 bps //averageBPS
+#define EZMediaSessionDstVideoDataRateLimits480x480 (6 * 128 * 1024)//鍗曚綅 bps //maxBPS
+#define EZMediaSessionDstVideoAverageBitRate320x320 (4 * 128 * 1024 * 5 / 8)//鍗曚綅 bps //averageBPS
+#define EZMediaSessionDstVideoDataRateLimits320x320 (6 * 128 * 1024 * 5 / 8)//鍗曚綅 bps //maxBPS
+
+
+typedef NS_OPTIONS(NSUInteger, EZMediaCaptureSessionType) {
+ EZMediaSessionCaptureNone = 1 << 0,
+ EZMediaSessionCaptureVideoType = 1 << 1,
+ EZMediaSessionCaptureAudioType = 1 << 2,
+ EZMediaSessionCaptureThumbnailType = 1 << 3,
+ EZMediaSessionCaptureShareScreenType = 1 << 4,
+
+};
+
+typedef NS_ENUM(NSUInteger, EZMediaSessionErrorBase) {
+ EZMediaSessionErrorUnknowError = 9000,
+ EZMediaSessionErrorNotReadyToSendData,
+ EZMediaSessionErrorCallSeqError,
+ EZMediaSessionErrorDuplicated,
+ EZMediaSessionErrorBaseAudioCapture = 10000,
+ EZMediaSessionErrorBaseVideoCapture = 20000,
+ EZMediaSessionErrorBaseAudioEncode = 30000,
+ EZMediaSessionErrorBaseVideoEncode = 40000,
+ EZMediaSessionErrorBaseStreamClient = 50000,
+ EZMediaSessionErrorBasePlayer = 60000,
+};
+
+typedef NS_ENUM(NSUInteger, EZAudioRecorderError) {
+ EZAudioRecorderErrorUnknown = EZMediaSessionErrorBaseAudioCapture,
+ EZAudioRecorderErrorInitError = 10100,
+ EZAudioRecorderErrorUnableToCreateSample,
+ EZAudioRecorderErrorStateError,
+ EZAudioRecorderErrorAuthorizeFailed = 10152,
+ EZAudioRecorderErrorStopError = 10200,
+};
+
+typedef NS_ENUM(NSUInteger, EZMediaCaptureError) {
+ EZMediaCaptureErrorUnknown = EZMediaSessionErrorBaseVideoCapture,
+ EZMediaCaptureErrorInitError = 20100,
+ EZMediaCaptureErrorAuthorizeFailed = 20153,
+ EZMediaCaptureErrorSwitchCameraError = 20200,
+ EZMediaCaptureErrorCroppedError = 20300,
+ EZMediaCaptureErrorRenderError = 20400,
+ EZMediaCaptureErrorScreenStartError = 20500,
+ EZMediaCaptureErrorScreenStopError,
+ EZMediaCaptureErrorScreenRecordError,
+ EZMediaCaptureErrorUnsupport,
+};
+
+typedef NS_ENUM(NSUInteger, EZAudioEncoderError) {
+ EZAudioEncoderErrorUnknown = EZMediaSessionErrorBaseAudioEncode,
+ EZAudioEncoderErrorFailToInitConverter = 30100,
+ EZAudioEncoderErrorFailToGetDataBuffer,
+ EZAudioEncoderErrorFailToEncodeBuffer,
+};
+
+typedef NS_ENUM(NSUInteger, EZVideoH264EncoderError) {
+ EZVideoH264EncoderErrorUnknown = EZMediaSessionErrorBaseVideoEncode,
+ EZVideoH264EncoderErrorInitFailed = 40100,
+ EZVideoH264EncoderErrorInvalidSample,
+ EZVideoH264EncoderErrorSampleNotReady,
+ EZVideoH264EncoderErrorNotRunning,
+ EZVideoH264EncoderErrorSetMaxBPSFailed,
+ EZVideoH264EncoderErrorSetAverageBPSFailed,
+ EZVideoH264EncoderErrorParamError,
+ EZVideoH264EncoderErrorEncodeFailed = 40200,
+};
+
+typedef NS_ENUM(NSUInteger, EZBAVStreamClientError) {
+ EZBAVStreamClientErrorUnknow = EZMediaSessionErrorBaseStreamClient,
+ EZBAVStreamClientErrorAudioEnableNotAllowed = EZMediaSessionErrorBaseStreamClient + 9000,
+ EZBAVStreamClientErrorShareEnableNotAllowed,
+
+};
+
+
+typedef NS_ENUM(NSUInteger, EZRTCAudioEncodeType) {
+ EZRTCAudioEncodeType_AAC,
+ EZRTCAudioEncodeType_Opus,
+};
+
+
+@interface EZRTCMediaSessionDefines : NSObject
+@end
+
+typedef void(^EZScreenShareResultBlock)(NSInteger ret);
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCSampleHandleManager.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCSampleHandleManager.h
new file mode 100644
index 0000000..f1d9a21
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCSampleHandleManager.h
@@ -0,0 +1,31 @@
+//
+// FIAgoraSocketManager.h
+// FIAgoraVideo
+//
+// Created by flagadmin on 2020/5/7.
+// Copyright 漏 2020 flagadmin. All rights reserved.
+//
+
+#import <ReplayKit/ReplayKit.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef enum : NSUInteger {
+ EZSampleHandleManagerStateUnconnected,
+ EZSampleHandleManagerStateConnecting,
+ EZSampleHandleManagerStateConnected,
+ EZSampleHandleManagerStateStopped,
+} EZSampleHandleManagerState;
+
+
+@interface EZRTCSampleHandleManager : NSObject
++ (EZRTCSampleHandleManager *)sharedManager;
+@property (nonatomic, assign, readonly) EZSampleHandleManagerState state;
+- (void)setup;
+- (void)finish;
+- (void)sendVideoBuffer:(CMSampleBufferRef)sampleBuffer;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCVideoEncodeParam.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCVideoEncodeParam.h
new file mode 100644
index 0000000..b420fba
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZRTCVideoEncodeParam.h
@@ -0,0 +1,30 @@
+//
+// EZMediaSessionEncodeParam.h
+// EZMediaSession
+//
+// Created by kanhaiping on 2018/8/24.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class EZRTCCameraParam;
+
+@interface EZRTCVideoEncodeParam : NSObject
+
+//濡傛灉缂栫爜鐨勭洰鏍囧楂樹负0锛屽垯缂栫爜杈撳嚭涓鸿緭鍏ョ殑鍘熷瀹介珮
+@property (nonatomic, assign) NSInteger pixelWidth;
+@property (nonatomic, assign) NSInteger pixelHeigth;
+@property (nonatomic, assign) NSInteger fps;
+@property (nonatomic, assign) NSInteger averageBPS;
+@property (nonatomic, assign, readonly) NSInteger maxBPS;
+@property (nonatomic, assign) NSInteger encodeKeyFrameInterval;//I甯ч棿闅旓紝鍗曚綅绉�
+
+//+ (EZRTCVideoEncodeParam *)encodeParamFromVideoParam:(EZRTCCameraParam *)videoParam;
++ (EZRTCVideoEncodeParam *)defaultEncodeParam;
++ (EZRTCVideoEncodeParam *)deviceWatchParam;
++ (EZRTCVideoEncodeParam *)deviceBabyRobotParam;
++ (EZRTCVideoEncodeParam *)encodeParamForScreenShare;
++ (EZRTCVideoEncodeParam *)encodeParamForGlobalScreenShare;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalk.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalk.h
new file mode 100644
index 0000000..98fda05
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalk.h
@@ -0,0 +1,179 @@
+//
+// EZBAVClient.h
+// EZBAVClient
+//
+// Created by kanhaiping on 2018/6/26.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "EZBAVParam.h"
+#import "EZRTCMediaSessionDefines.h"
+#import "EZVideoTalkView.h"
+
+@class EZVideoTalk;
+@class EZRTCCameraParam;
+@class EZRTCVideoEncodeParam;
+
+@protocol EZVideoTalkDelegate<NSObject>
+
+@required
+/// 閿欒鍥炶皟
+/// @param client client
+/// @param errorCode 鍑洪敊鐨勯敊璇爜
+- (void)bavClient:(EZVideoTalk *)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 闄勫姞淇℃伅锛�
+ 濡傛灉鏄疎ZBAVMessagePeerEnteredRoom銆丒ZBAVMessagePeerLeaveRoom娑堟伅锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄
+ 濡傛灉娑堟伅鏄� EZBAVMessageTransferData msg鏄� msg鏄瓧绗︿覆 @"瀹為檯鐨勯�忎紶娑堟伅"
+ */
+- (void)bavClient:(EZVideoTalk *)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+
+@optional
+///**
+// 鍥炶皟娑堟伅 bavclient log鍥炶皟
+//
+// @param client client
+// @param msg 閫忎紶娑堟伅
+// */
+//- (void)bavClient:(EZVideoTalk *)client didReceivedBavClientLogMsg:(NSString*)msg;
+
+/**
+ 鏄剧ず鍥炶皟锛岄娆$敾闈㈠嚭鏉ヤ互鍙婂悗缁敾闈㈠昂瀵稿彂鐢熷彉鍖栨椂鍥炶皟
+
+ @param client client
+ @param width 鐢婚潰瀹藉害
+ @param height 鐢婚潰楂樺害
+ */
+- (void)bavClient:(EZVideoTalk *)client didDisplayWidth:(int32_t)width height:(int32_t)height;
+
+/**
+ 鎾斁鍗¢】
+
+ @param client client
+ @param delayTime 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZVideoTalk *)client playDelayTime:(int32_t)delayTime;
+
+///**
+// 鎾斁鍗¢】缁熻
+//
+// @param client client
+// @param delayTimeStat 鍗¢】鏃堕棿
+// */
+//- (void)bavClient:(EZVideoTalk *)client playDelayTimeStatistics:(double)delayTimeStat;
+
+@end
+
+
+
+/// 鍙屽悜闊宠棰戦�氳瘽绫�
+/// 1.涓诲姩鍛煎彨
+/// A.鍙戣捣
+/// - init
+/// - enableCapture
+/// - start:param role=0 reason=0 roomid=0
+/// B.閫氳瘽缁撴潫 璋冪敤 stop
+/// C.绛夊緟瀵规柟杩囩▼涓寕鏂� 璋冪敤stop
+/// 2.琚姩鏀跺埌鍛煎彨
+/// - init
+/// - enableCapture
+/// 灞曠ず鎺ュ惉鐣岄潰
+/// A.濡傛灉鎺ュ惉 璋冪敤 start锛歱aram role=1 reason=0 roomid=鏀跺埌鐨剅oomid 鎺ュ惉瀹岄�氳瘽涓寕鏂皟鐢╯top
+/// B.濡傛灉涓诲姩鎷掓帴 璋冪敤 start锛歱aram role=2 reason=101 roomid=鏀跺埌鐨剅oomid 鎷掓帴瀹屾垚鍚庣珛椹皟鐢╯top
+/// C.濡傛灉鏃犱汉鎺ュ惉 璋冪敤 start锛歱aram role=2 reason=102 roomid=鏀跺埌鐨剅oomid 瀹屾垚鍚庣珛椹皟鐢╯top
+@interface EZVideoTalk : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkDelegate> delegate;
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalWindow:(EZVideoTalkView *)localWin;
+
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableVideoCapture:(BOOL)enable;
+
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+- (NSInteger)enableAudioCatpure:(BOOL)enable;
+
+
+// 鏄惁寮�鍚睆骞曞叡浜�
+/// @param enable 鏄惁寮�鍚�
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableScreenShare:(BOOL)enable andName:(NSString *)name withResultBlock:(EZScreenShareResultBlock)block;
+
+
+/// 鍙戣捣鍙屽悜闊宠棰戝璁诧紝鑰楁椂鎺ュ彛锛屾垚鍔熻繑鍥� noErr锛屽け璐ヨ繑鍥為敊璇爜
+/// @param param EZBAVParam
+- (int32_t)startWithParam:(EZBAVParam *)param;
+
+/// 璁剧疆杩滅▼绐楀彛锛�.濡傛灉璁剧疆闈炵┖瀵硅薄view锛屽繀椤诲湪涓荤嚎绋嬭皟鐢紙濡傛灉鏄缃垚nil锛屽彲浠ヤ笉鍦ㄤ富绾跨▼璋冪敤锛�
+/// @param window 鎾斁绐楀彛
+- (int32_t)setRemoteWindow:(UIView *)window;
+
+/// 鍋滄鍙屽悜闊宠棰戝璁诧紝鎴愬姛杩斿洖 noErr锛屽け璐ヨ繑鍥為敊璇爜
+- (int32_t)stop;
+
+#pragma 闄勫姞鎺ュ彛
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+/// 寮�鍏宠繙绋嬪0闊筹紝榛樿寮�
+/// @param open 寮�鍚�
+- (int32_t)enableRemoteSound:(BOOL)open;
+/// 寮傛鑾峰彇鏈湴鎶撳浘
+/// @param block 鎶撳浘鎴愬姛鍥炶皟锛屽け璐mage涓簄il
+//- (void)localScreenShotWithBlock:(void (^)(UIImage *image))block;
+
+/// 鑾峰彇杩滅鎶撳浘
+/// @param quality 鍘嬬缉璐ㄩ噺 0 ~ 100
+//- (UIImage *)remoteScreenShotWithQuality:(int)quality;
+
+/// 鏈湴褰曞埗
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+//- (BOOL)startLocalVideoRecordWithPath:(NSString *)path;
+
+/// 鍋滄鏈湴褰曞埗
+//- (BOOL)stopLocalVideoRecord;
+
+/// 寮�濮嬭繙绔綍鍒� mp4
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+//- (BOOL)startRemoteVideoRecordWithPath:(NSString *)path forClient:(int32_t)clientID;
+
+
+/// 鍋滄杩滅褰曞埗
+//- (BOOL)stopRemoteVideoRecordForClient:(int32_t)clientID;
+
+
+/// 鍙戦�侀�忎紶娑堟伅鎺ュ彛锛屽悓姝ユ帴鍙o紝鍙兘鑰楁椂
+/// @param msg 娑堟伅鍐呭锛屾瘮濡俲son鏁版嵁
+- (int)sendTransferMsg:(NSString *)msg;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h
new file mode 100644
index 0000000..5517624
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h
@@ -0,0 +1,63 @@
+//
+// EZVideoTalkGlobal.h
+// EZVideoTalk
+//
+// Created by yuqian on 2018/9/12.
+// Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZRTCMediaSessionDefines.h"
+
+@class EZRTCVideoEncodeParam;
+@class EZRTCCameraParam;
+
+@interface EZVideoTalkGlobal : NSObject
+
+/**
+ 鏃ュ織璁剧疆
+
+ @param enable 鏄惁鎵撳嵃鏃ュ織
+ @param logCallback 鏃ュ織鍥炶皟锛屼笂灞傝嚜瀹氫箟澶勭悊
+ */
++ (void)setDebugLogEnable:(BOOL)enable withLogCallback:(void(^)(NSString *logStr))logCallback;
+
+
+/**
+ 鎵撳紑瀵圭鐮佹祦鎶撳彇
+
+ @param enble 鏄惁鎵撳紑
+ */
++(void)setDebugVideoLog:(BOOL)enble;
+
+
+/**
+ 鑾峰彇sdk鐗堟湰淇℃伅
+
+ @return 鐗堟湰鍙�
+ */
++ (NSString*)getVersion;
+
+
+
+/// 璁剧疆閲囬泦鐨勬憚鍍忓ご鍙傛暟锛屾瘮濡傞噰鐢ㄥ墠缃繕鏄悗缃紝鍦ㄥ彂璧蜂换浣曡棰戞搷浣滃墠璋冪敤鐢熸晥
+/// @param cameraParam 鎽勫儚澶村弬鏁�
++ (void)setCameraParam:(EZRTCCameraParam *)cameraParam;
+
+
+/// 璁剧疆閲囬泦鐨勮棰戠殑缂栫爜鍙傛暟锛屾瘮濡傞噰闆嗘渶缁堣緭鍑虹殑鍒嗚鲸鐜囥�佺爜鐜囩瓑
+/// @param encodeParam 缂栫爜鍙傛暟
++ (void)setVideoEncodeParam:(EZRTCVideoEncodeParam *)encodeParam;
+
+
+/// 璁剧疆閲囬泦鐨勮緟娴佺殑缂栫爜鍙傛暟锛屾瘮濡傞噰闆嗘渶缁堣緭鍑虹殑鍒嗚鲸鐜囥�佺爜鐜囩瓑
+/// @param encodeParam 缂栫爜鍙傛暟
++ (void)setSmallVideoEncodeParam:(EZRTCVideoEncodeParam *)encodeParam;
+
+
++ (EZRTCAudioEncodeType)audioEncodeType;
+
+/// 璁剧疆缂栫爜绫诲瀷锛屽湪瑙嗛閫氳瘽鍙戣捣鍓嶈缃湁鏁�
++ (void)setAudioEncodeType:(EZRTCAudioEncodeType)type;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h
new file mode 100644
index 0000000..353e0c0
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h
@@ -0,0 +1,268 @@
+//
+// EZVideoTalkSDK.h
+// EZOpenSDK
+//
+// Created by yuqian on 2020/3/14.
+// Copyright 漏 2020 Hikvision. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "EZRTCMediaSessionDefines.h"
+#import "EZBAVParam.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+@class EZVideoTalkSDK, EZMediaSessionVideoParam, EZVideoTalkView, EZBAVParam, EZConferenceParam;
+
+@protocol EZVideoTalkSDKDelegate<NSObject>
+
+- (void)videoTalk:(id)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 閫忎紶娑堟伅锛�
+ 濡傛灉鏄疎ZVideoTalkMessagePeerEnteredRoom鍜孍ZVideoTalkMessagePeerLeaveRoom娑堟伅锛宮sg鏄瘂@"clientID":@(9527),@"clientName":@"寮犱笁"}
+ 濡傛灉娑堟伅鏄� EZVideoTalkMessageTransferData msg鏄� msg鏄瘂@"content":@"瀹為檯鐨勯�忎紶娑堟伅"}
+ */
+- (void)videoTalk:(id)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+/// 鐢婚潰鏄剧ず鍥炶皟
+/// @param client client
+/// @param width 鐢婚潰鐨勫 鍍忕礌鍗曚綅
+/// @param height 鐢婚潰鐨勯珮 鍍忕礌鍗曚綅
+/// @param userID 鐢ㄦ埛id
+- (void)videoTalk:(id)client didDisplayWidth:(int32_t)width height:(int32_t)height ofRemoteClient:(NSString *)userID;
+
+@end
+
+@interface EZVideoTalkSDK : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
+
+/// 鍔犲叆鐨勬埧闂村彿
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+- (instancetype)init;
+
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalWindow:(EZVideoTalkView *)localWin;
+
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableVideoCapture:(BOOL)enable;
+
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+- (NSInteger)enableAudioCatpure:(BOOL)enable;
+
+
+/// 鏄惁寮�鍚睆骞曞叡浜�
+/// @param enable 鏄惁寮�鍚�
+- (NSInteger)enableScreenShare:(BOOL)enable withName:(NSString *)name;
+
+
+/// 鍙戣捣鍙屽悜闊宠棰戝璁诧紝鑰楁椂鎺ュ彛锛屾垚鍔熻繑鍥� noErr锛屽け璐ヨ繑鍥為敊璇爜
+/// @param param EZBAVParam
+- (int32_t)startWithParam:(EZBAVParam *)param;
+
+/// 璁剧疆杩滅▼绐楀彛锛�.濡傛灉璁剧疆闈炵┖瀵硅薄view锛屽繀椤诲湪涓荤嚎绋嬭皟鐢紙濡傛灉鏄缃垚nil锛屽彲浠ヤ笉鍦ㄤ富绾跨▼璋冪敤锛�
+/// @param window 鎾斁绐楀彛
+- (int32_t)setRemoteWindow:(UIView *)window;
+
+/// 鍋滄鍙屽悜闊宠棰戝璁诧紝鎴愬姛杩斿洖 noErr锛屽け璐ヨ繑鍥為敊璇爜
+- (int32_t)stop;
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+/// 寮�鍏宠繙绋嬪0闊筹紝榛樿寮�
+/// @param open 寮�鍚�
+- (int32_t)enableRemoteSound:(BOOL)open;
+
+#pragma mark - 鏃ュ織璋冭瘯
+/**
+ 鏃ュ織璁剧疆
+
+ @param enable 鏄惁鎵撳嵃鏃ュ織
+ @param logCallback 鏃ュ織鍥炶皟锛屼笂灞傝嚜瀹氫箟澶勭悊
+ */
++ (void)setDebugLogEnable:(BOOL)enable withLogCallback:(void(^)(NSString *logStr))logCallback;
+
+/**
+ 鎵撳紑瀵圭鐮佹祦鎶撳彇
+
+ @param enble 鏄惁鎵撳紑
+ */
++(void)setDebugVideoLog:(BOOL)enble;
+
+/**
+ 鑾峰彇sdk鐗堟湰淇℃伅
+
+ @return 鐗堟湰鍙�
+ */
++ (NSString*)getVersion;
+
+@end
+
+
+@interface EZRTCClient : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
+
+/// 鍔犲叆鐨勬埧闂村彿
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+
+/// 鍔犲叆浼氳锛堟柊鎺ュ彛锛�
+/// @param roomId 鎴块棿鍙�
+/// @param password 瀵嗙爜
+/// @param userID 鐢ㄦ埛鑷畾涔塈D
+- (void)enterRoom:(int32_t)roomId
+ withPassword:(NSString *)password
+ withUserID:(NSString *)userID
+ withAppId:(NSString *)appId;
+
+
+/// 閫�鍑轰細璁�
+- (NSInteger)exitRoom;
+
+
+/// 瑙f暎浼氳锛岃В鏁e悗锛屽叾浠栦笌浼氳�呬細鏀跺埌浼氳琚В鏁f秷鎭�
+- (void)dissolveRoom;
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛.
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableLocalVideo:(BOOL)enable;
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalView:(EZVideoTalkView *)localWin;
+
+/// 鏄惁寮�鍚緟娴侊紝杈呮祦鍒嗚鲸鐜囨洿浣庛�佺爜鐜囨洿灏�
+/// @param enable 鏄惁寮�鍚�
+- (NSInteger)enableLocalSmallVideo:(BOOL)enable;
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableLocalAudio:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
+
+/// 寮�鍚睆骞曞叡浜�
+/// @param name 鍏变韩鍚嶇О
+/// @param resultBlock 灞忓箷鍏变韩缁撴灉鍥炶皟
+/// @param didFinishBlock 灞忓箷鍏变韩缁撴潫鍥炶皟锛屽湪姝e父鐨勫睆骞曞叡浜粨鏉熺粨鏉熷悗鍥炶皟
+- (void)startScreenShareWithName:(NSString *)name
+ withResultBlock:(EZScreenShareResultBlock)resultBlock
+ andEndedBlock:(dispatch_block_t)didFinishBlock;
+
+
+/// 缁撴潫灞忓箷鍏变韩
+- (void)stopScreenShare;
+
+
+/// 璁剧疆杩滅▼绐楀彛锛�1.蹇呴』鍦ㄦ嬁鍒拌繙绔鎴风鍔犲叆鐨勬秷鎭悗璁剧疆锛�2.蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param window 鎾斁绐楀彛
+/// @param clientID 鍔犲叆鐨勫鎴风鐨処D
+/// @param streamType 1瑙嗛 2闊抽 4灏忔祦
+- (int32_t)setRemoteView:(nullable UIView *)window ofUser:(NSString *)userID withStream:(NSInteger)streamType;
+
+/// 璁剧疆瑙傜湅灞忓箷鍏变韩鐨勭獥鍙�,蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param view 绐楀彛
+- (int32_t)setScreenShareView:(UIView *_Nullable)view;
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+#pragma mark - 褰曞埗鐩稿叧鎺ュ彛
+/// 寮�濮嬫埧闂磋棰戜細璁綍鍒�
+/// @param roomId 鎴块棿鍙�
+/// @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+/// @param recUsers 闇�瑕佸綍鍒剁殑鎴块棿鍙備笌鑰卛d
+/// @param projectId 浜戝瓨鍌ㄩ」鐩甀D
+/// @param fileId 浜戝瓨鍌ㄦ枃浠跺悕
+/// @param completion operation
++ (void)requestStartRecordRoomId:(NSString *)roomId
+ customId:(NSInteger)customId
+ recUsers:(NSArray *)recUsers
+ projectId:(NSString *)projectId
+ fileId:(NSString *)fileId
+ completion:(void (^)(bool success, NSError *error))completion;
+
+/// 鍋滄鎴块棿瑙嗛浼氳褰曞埗
+/// @param roomId 鎴块棿鍙�
+/// @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+/// @param completion operation
++ (void)requestStopRecordRoomId:(NSString *)roomId
+ customId:(NSInteger)customId
+ completion:(void (^)(bool success, NSError *error))completion;
+
+/// 鑾峰彇鏂囦欢涓嬭浇鍦板潃
+/// @param projectId 椤圭洰ID
+/// @param fileId 鏂囦欢ID
+/// @param completion operation
++ (void)requestGetRecordFileProjectId:(NSString *)projectId
+ fileId:(NSString *)fileId
+ completion:(void (^)(id responseObject, NSError *error))completion;
+
+
+/// 鏂板缓椤圭洰鎺ュ彛
+/// @param projectId 椤圭洰ID
+/// @param projectName 椤圭洰鍚嶇О
+/// @param expireDays 椤圭洰瀛樺偍瀵硅薄杩囨湡澶╂暟 榛樿姘镐笉杩囨湡
+/// @param completion operation
++ (void)requestCreateProjectId:(NSString *)projectId
+ projectName:(NSString *)projectName
+ expireDays:(NSInteger )expireDays
+ completion:(void (^)(bool success, NSError *error))completion;
+
+
+
+#pragma mark - 4.16.3 鏂扮殑浼氭帶鎺ュ彛
+/// 棰勮浼氳鎺ュ彛
+/// @param customId 涓绘寔浜虹敤鎴穒d锛堝紑鍙戣�呰嚜瀹氫箟鐨勭敤鎴穒d锛�
+/// @param password 鎴块棿瀵嗙爜锛堣嫢涓嶄紶鎴栦负绌哄垯璁や负鎴块棿鍏紑銆佹棤瀵嗙爜锛�
+/// @param limit 鎴块棿浜烘暟闄愬埗锛�<100锛屼笉浼犲垯榛樿100锛�
+/// @param beginTime 姣鏃堕棿鎴筹紝浼氳棰勮寮�濮嬫椂闂达紙>=褰撳墠鏃堕棿锛�
+/// @param endTime 姣鏃堕棿鎴筹紝浼氳棰勮缁撴潫鏃堕棿锛�>beginTime涓�<涓冨ぉ鍚庣殑鏃堕棿鎴筹級
+/// @param completion completion
++ (NSURLSessionDataTask *)orderMeetingWithCustomId:(NSString *)customId
+ password:(NSString *)password
+ limit:(NSInteger)limit
+ beginTime:(long)beginTime
+ endTime:(long)endTime
+ completion:(void (^)(int32_t roomId, NSInteger limit, NSError *error))completion;
+
+
+
+@end
+
+
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h
new file mode 100644
index 0000000..c3347aa
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h
@@ -0,0 +1,17 @@
+//
+// EZVideoTalkSDKDefines.h
+// EzvizOpenSDK
+//
+// Created by Harper Kan on 2021/7/5.
+// Copyright 漏 2021 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZVideoTalkSDKDefines : NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkView.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkView.h
new file mode 100644
index 0000000..1ab4653
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTalk/EZVideoTalkView.h
@@ -0,0 +1,18 @@
+//
+// EZVideoTalkView.h
+// EZVideoTalk
+//
+// Created by Harper Kan on 2020/12/5.
+// Copyright 漏 2020 hikvision. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import <AVFoundation/AVFoundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZVideoTalkView : UIView
+- (AVSampleBufferDisplayLayer *)videoLayer;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTransformer.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTransformer.h
new file mode 100644
index 0000000..61c9126
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZVideoTransformer.h
@@ -0,0 +1,39 @@
+//
+// EZVideoTransformer.h
+// EZOpenSDK
+//
+// Created by yuqian on 2019/6/17.
+// Copyright 漏 2019 Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef enum {
+
+ EZVideoTransformerTypeMP4,
+
+} EZVideoTransformerType;
+
+@interface EZVideoTransformer : NSObject
+
+/// 鏈湴PS鏂囦欢杞崲涓篗P4鏂囦欢
+/// @param psPath ps鏂囦欢璺緞
+/// @param targetPath mp4鏂囦欢璺緞
+/// @param type 杞崲绫诲瀷
+/// @param key 璁惧楠岃瘉鐮�
+/// @param succBlock 鎴愬姛鍥炶皟
+/// @param processBlock 杩涘害鍥炶皟
+/// @param failBlock 澶辫触鍥炶皟
++ (void)videoTransFormerPSPath:(NSString *)psPath
+ toPath:(NSString *)targetPath
+ type:(EZVideoTransformerType)type
+ withKey:(NSString *)key
+ succBlock:(void (^)())succBlock
+ processBlock:(void(^)(int rate))processBlock
+ failBlock:(void(^)(int errCode))failBlock;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZWiFiItemInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZWiFiItemInfo.h
new file mode 100644
index 0000000..3ea2418
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EZWiFiItemInfo.h
@@ -0,0 +1,21 @@
+//
+// EZWiFiItemInfo.h
+// EZWiFiConfigSDK
+//
+// Created by yuqian on 2020/7/28.
+// Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZWiFiItemInfo : NSObject
+
+@property (nonatomic, copy) NSString *ssid; /*蹇呭~,SSID,string*/
+@property (nonatomic, assign) NSInteger signalStrength; /*蹇呭~,淇″彿寮哄害,"-100-0",int锛屾暟鍊艰秺澶т俊鍙疯秺寮�*/
+@property (nonatomic, copy) NSString *securityMode; /*鍙��,瀹夊叏妯″紡: "open,WEP,WPA-personal,WPA2-personal,WPA-WPA2-personal,WPA2-enterprise",string*/
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EzvizRecordFileInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EzvizRecordFileInfo.h
new file mode 100644
index 0000000..38db6dc
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EzvizRecordFileInfo.h
@@ -0,0 +1,47 @@
+//
+// EzvizRecordFileInfo.h
+// EzvizOpenSDK
+//
+// Created by linyong on 2017/5/5.
+// Copyright 漏 2017骞� Ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+///褰曞儚鏂囦欢淇℃伅
+@interface EzvizRecordFileInfo : NSObject
+
+///璁惧搴忓垪鍙�
+@property (nonatomic,copy) NSString *deviceSerial;
+
+///璁惧閫氶亾鍙�
+@property (nonatomic,assign) NSInteger channelNo;
+
+///鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚
+@property (nonatomic,assign) NSInteger recType;
+
+///鏂囦欢寮�濮嬫椂闂�
+@property (nonatomic,strong) NSDate *startTime;
+
+///鏂囦欢缁撴潫鏃堕棿
+@property (nonatomic,strong) NSDate *endTime;
+
+///鏂囦欢绫诲瀷0锛氱洰褰�1锛氳棰戞枃浠�2锛氬浘鐗囨枃浠�3锛氶煶棰戞枃浠�
+@property (nonatomic,assign) NSInteger fileType;
+
+///鏄惁鍔犲瘑0--涓嶅姞瀵�,1--鍔犲瘑
+@property (nonatomic,assign) NSInteger crypt;
+
+///楠岃瘉鐮丮D5鍊�
+@property (nonatomic,copy) NSString *keyChecksum;
+
+///鏂囦欢ID
+@property (nonatomic,copy) NSString *fileId;
+
+///灏侀潰鍥剧墖鍦板潃
+@property (nonatomic,copy) NSString *coverPic;
+
+///涓嬭浇璺緞
+@property (nonatomic,copy) NSString *downloadPath;
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EzvizWatchServerInfo.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EzvizWatchServerInfo.h
new file mode 100644
index 0000000..acaf6d6
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/EzvizWatchServerInfo.h
@@ -0,0 +1,26 @@
+//
+// EzvizWatchServerInfo.h
+// EzvizOpenSDK
+//
+// Created by yuqian on 2020/3/2.
+// Copyright 漏 2020 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EzvizWatchServerInfo : NSObject
+
+@property (nonatomic, copy) NSString *domain;
+@property (nonatomic, copy) NSString *externalIp;
+@property (nonatomic, assign) int forceStreamType;
+@property (nonatomic, copy) NSString *idcType;
+@property (nonatomic, copy) NSString *internalIp;
+@property (nonatomic, assign) int isBackup;
+@property (nonatomic, copy) NSString *memo;
+@property (nonatomic, assign) int port;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/Sadp.h b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/Sadp.h
new file mode 100644
index 0000000..a6ec76d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/include/modules/Sadp.h
@@ -0,0 +1,557 @@
+#ifndef _SADP_H_
+#define _SADP_H_
+
+
+#if defined _WIN32 || defined _WIN64
+#define CSADP_API extern "C" __declspec(dllimport)
+#elif defined __linux__ || defined __APPLE__
+#define CSADP_API extern "C"
+#endif
+
+#if defined _WIN32 || defined _WIN64
+#define CALLBACK __stdcall
+#elif defined __linux__ || defined __APPLE__
+#define CALLBACK
+#endif
+
+#define BOOL int
+
+//消息操作的类型
+#define SADP_ADD 1 //增加一设备
+#define SADP_UPDATE 2 //更新设备
+#define SADP_DEC 3 //设备下线
+#define SADP_RESTART 4 //设备重新启动
+#define SADP_UPDATEFAIL 5 //设备更新失败
+
+//外部命令码
+#define SADP_GET_DEVICE_CODE 1 //获取设备码,对应结构体SADP_SAFE_CODE
+#define SADP_GET_ENCRYPT_STRING 2 //获取加密串,对应结构体SADP_ENCRYPT_STRING
+#define SADP_GET_DEVICE_TYPE_UNLOCK_CODE 3 //获取设备类型解禁码,对应的结构体SADP_TYPE_UNLOCK_CODE
+#define SADP_SET_DEVICE_CUSTOM_TYPE 4 //设置设备自定义型号,对应的结构体SADP_CUSTOM_DEVICE_TYPE
+#define SADP_GET_GUID 5 //获取GUID
+#define SADP_GET_SECURITY_QUESTION 6 //获取安全问题
+#define SADP_SET_SECURITY_QUESTION 7 //设置安全问题
+#define SADP_SET_HCPLATFORM_STATUS 8 //设置HCPLATFORM状态
+#define SADP_SET_VERIFICATION_CODE 9 //设置验证码(验证码用于萤石接入、预览、控制的唯一密码)
+#define SADP_GET_BIND_LIST 12 //获取绑定设备列表
+#define SADP_SET_BIND_LIST 13 //设置绑定设备列表
+#define SADP_RESTORE_INACTIVE 14 //恢复未激活
+#define SADP_SET_WIFI_REGION 15 //设置wifi区域
+#define SADP_SET_CHANNEL_DEFAULT_PASSWORD 16 //设置通道默认密码
+#define SADP_GET_SELF_CHECK 17 //获取设备自检状态
+#define SADP_DISK_LOCATE 18 //坏盘定位
+#define SADP_EHOME_ENABLE 19 //EHome使能
+#define SADP_SET_USER_MAILBOX 20 //设置用户邮箱
+#define SADP_GET_QR_CODES 21 //获取二维码数据
+#define SADP_GET_PASSWORD_RESET_TYPE 27 //获取重置密码方式参数
+
+
+
+#define SADP_MAX_VERIFICATION_CODE_LEN 12 //最大验证码长度
+#define MAX_PASS_LEN 16 //设备最大密码长度
+#define MAX_QUESTION_LIST_LEN 32 //最多问题列表个数
+#define SADP_MAX_BIND_NUM 32 //最大绑定设备个数
+#define MAX_CPU_LEN 32 //CPU长度
+#define MAX_MEMORY_LEN 32 //内存长度
+#define MAX_USERNAME_LEN 32 //用户名最大长度
+#define SADP_MAX_SERIALNO_LEN 64 //最大设备序列号长度
+#define MAX_DEVICE_CODE 128 //设备返回码长度,暂定最大128
+#define MAX_MAILBOX_LEN 128 //邮箱长度,暂定最大128
+#define MAX_GUID_LEN 128 //GUID长度
+#define MAX_EXCHANGE_CODE 256 //交换码长度
+#define MAX_ENCRYPT_CODE 256 //设备返回码加密后长度
+#define MAX_UNLOCK_CODE_KEY 256 //解禁密钥
+#define MAX_QR_CODES 256 //二维码数据长度,暂定最大256
+#define MAX_ANSWER_LEN 256 //最大答案长度
+#define MAX_UNLOCK_CODE_RANDOM_LEN 256 //解禁码随机串
+#define MAX_FILE_PATH_LEN 260 //文件最大路径长度
+
+
+
+
+// 错误码
+#define SADP_ERROR_BASE 2000
+#define SADP_NOERROR 0 // 没有错误
+#define SADP_ALLOC_RESOURCE_ERROR (SADP_ERROR_BASE+1) // 资源分配错误
+#define SADP_NOT_START_ERROR (SADP_ERROR_BASE+2) // SADP未启动
+#define SADP_NO_ADAPTER_ERROR (SADP_ERROR_BASE+3) // 无网卡
+#define SADP_GET_ADAPTER_FAIL_ERROR (SADP_ERROR_BASE+4) // 获取网卡信息失败
+#define SADP_PARAMETER_ERROR (SADP_ERROR_BASE+5) // 参数错误
+#define SADP_OPEN_ADAPTER_FAIL_ERROR (SADP_ERROR_BASE+6) // 打开网卡失败
+#define SADP_SEND_PACKET_FAIL_ERROR (SADP_ERROR_BASE+7) // 发送数据失败
+#define SADP_SYSTEM_CALL_ERROR (SADP_ERROR_BASE+8) // 系统接口调用失败
+#define SADP_DEVICE_DENY (SADP_ERROR_BASE+9) // 设备拒绝处理
+#define SADP_NPF_INSTALL_ERROR (SADP_ERROR_BASE+10) // 安装NPF服务失败
+#define SADP_TIMEOUT (SADP_ERROR_BASE+11) // 设备超时
+#define SADP_CREATE_SOCKET_ERROR (SADP_ERROR_BASE+12) // 创建socket失败
+#define SADP_BIND_SOCKET_ERROR (SADP_ERROR_BASE+13) // 绑定socket失败
+#define SADP_JOIN_MULTI_CAST_ERROR (SADP_ERROR_BASE+14) // 加入多播组失败
+#define SADP_NETWORK_SEND_ERROR (SADP_ERROR_BASE+15) // 发送出错
+#define SADP_NETWORK_RECV_ERROR (SADP_ERROR_BASE+16) // 接收出错
+#define SADP_XML_PARSE_ERROR (SADP_ERROR_BASE+17) // 多播XML解析出错
+#define SADP_LOCKED (SADP_ERROR_BASE+18) // 设备锁定
+#define SADP_NOT_ACTIVATED (SADP_ERROR_BASE+19) // 设备未激活
+#define SADP_RISK_PASSWORD (SADP_ERROR_BASE+20) // 风险高的密码
+#define SADP_HAS_ACTIVATED (SADP_ERROR_BASE+21) // 设备已激活
+#define SADP_EMPTY_ENCRYPT_STRING (SADP_ERROR_BASE+22) // 加密串为空
+#define SADP_EXPORT_FILE_OVERDUE (SADP_ERROR_BASE+23) // 导出文件超期
+#define SADP_PASSWORD_ERROR (SADP_ERROR_BASE+24) // 密码错误
+#define SADP_LONG_SECURITY_ANSWER (SADP_ERROR_BASE+25) // 安全问题答案太长
+#define SADP_INVALID_GUID (SADP_ERROR_BASE+26) // 无效的GUID
+#define SADP_ANSWER_ERROR (SADP_ERROR_BASE+27) // 答案错误
+#define SADP_QUESTION_NUM_ERR (SADP_ERROR_BASE+28) // 安全问题个数配置错误
+#define SADP_LOAD_WPCAP_FAIL (SADP_ERROR_BASE+30) // 加载Wpcap失败
+#define SADP_ILLEGAL_VERIFICATION_CODE (SADP_ERROR_BASE+33) // 非法验证码
+#define SADP_BIND_ERROR_DEV (SADP_ERROR_BASE+34) // 绑定错误的设备
+#define SADP_EXTED_MAX_BIND_NUM (SADP_ERROR_BASE+35) // 超过最大绑定个数
+#define SADP_MAILBOX_NOT_EXIST (SADP_ERROR_BASE+36) // 邮箱不存在
+#define SADP_MAILBOX_NOT_SET (SADP_ERROR_BASE+38) // [add] <2019/01/08> by yangzheng 邮箱重置密码未设置邮箱
+#define SADP_INVALID_RESET_CODE (SADP_ERROR_BASE+39) // 重置密码 重置口令错误
+
+
+//SADP设备过滤规则类型
+//按位表示,为1表示过滤,0表示不过滤;
+//bit 1:是否过滤萤石;bit 2:是否过滤OEM;
+#define SADP_DISPLAY_ALL 0 //显示所有设备
+#define SADP_FILTER_EZVIZ 0x01 //过滤萤石设备
+#define SADP_FILTER_OEM 0x02 //过滤OEM设备
+#define SADP_FILTER_EZVIZ_OEM 0x03 //同时过滤萤石和OEM设备
+#define SADP_ONLY_DISPLAY_OEM 0xfffffffd //仅显示OEM设备,对应结构体SADP_DISPLAY_OEM_CFG
+#define SADP_ONLY_DISPLAY_EZVIZ 0xfffffffe //仅显示萤石设备
+// 结构体
+
+typedef struct tagSADP_DEVICE_INFO
+{
+ char szSeries[12]; //设备系列(保留)
+ char szSerialNO[48]; //设备序列号
+ char szMAC[20]; //设备物理地址
+ char szIPv4Address[16]; //设备IPv4地址
+ char szIPv4SubnetMask[16]; //设备IPv4子网掩码
+ unsigned int dwDeviceType; //设备类型,具体数值代表的设备型号
+ unsigned int dwPort; //设备网络SDK服务端口号(默认8000)
+ unsigned int dwNumberOfEncoders; //设备编码器个数,即设备编码通道个数。对于解码器,其值设为0
+ unsigned int dwNumberOfHardDisk; //设备硬盘数目
+ char szDeviceSoftwareVersion[48]; //设备软件版本号
+ char szDSPVersion[48]; //设备DSP版本号
+ char szBootTime[48]; //开机时间
+ int iResult;
+ //信息类型: 1.设备上线 2.设备更新 3.设备下线 4.设备重启 5.设备更新失败
+ //SADP_ADD 1 新设备上线,之前在SADP库列表中未出现的设备
+ //SADP_UPDATE 2 在线的设备的网络参数或者某些状态改变
+ //SADP_DEC 3 设备下线,设备自动发送下线消息或120秒内检测不到设备
+ //SADP_RESTART 4 之前SADP库列表中出现过之后下线的设备再次上线
+ //SADP_UPDATEFAIL 5 设备更新失败
+ char szDevDesc[24]; //设备类型描述 与dwDeviceType对应
+ char szOEMinfo[24]; //OEM产商信息
+ char szIPv4Gateway[16]; //IPv4网关
+ char szIPv6Address[46]; //IPv6地址
+ char szIPv6Gateway[46]; //IPv6网关
+ unsigned char byIPv6MaskLen; //IPv6子网前缀长度
+ unsigned char bySupport;
+ //按位表示,对应为为1表示支持
+ //0x01:是否支持Ipv6
+ //0x02:是否支持修改Ipv6参数
+ //0x04:是否支持Dhcp
+ //0x08:是否支持udp多播
+ //0x10:是否含加密节点
+ //0x20:是否支持恢复密码
+ //0x40:是否支持重置密码
+ //0x80:是否支持同步IPC密码
+ unsigned char byDhcpEnabled; //Dhcp状态, 0 不启用 1 启用
+ unsigned char byDeviceAbility; //设备能力
+ //0:设备不支持“‘设备类型描述’ 'OEM厂商' 'IPv4网关' ‘IPv6地址’ 'IPv6网关' ‘IPv6子网前缀’‘DHCP’”
+ //1:支持上诉功能
+ unsigned short wHttpPort; //Http 端口
+ unsigned short wDigitalChannelNum; //数字通道数
+ char szCmsIPv4[16]; //CMS注册服务器IPv4地址
+ unsigned short wCmsPort; //CMS注册服务器监听端口
+ unsigned char byOEMCode; //0-基线设备 1-OEM设备
+ unsigned char byActivated; //设备是否激活;0-激活,1-未激活(老的设备都是已激活状态)
+ char szBaseDesc[24]; //基线短型号,不随定制而修改的型号,用于萤石平台进行型号对比
+ unsigned char bySupport1;
+ //按位表示, 1表示支持,0表示不支持
+ //0x01:是否支持重置密码方式2
+ //0x02;是否支持设备锁定功能
+ //0x04:是否支持导入GUID重置密码
+ //0x08:是否支持安全问题重置密码
+ //0x10:是否支持OEM更换Logo
+ //0x20:是否支持绑定操作
+ //0x40:是否支持恢复未激活
+ //0x80:是否支持wifi信号增强模式
+ unsigned char byHCPlatform; //是否支持HCPlatform 0-保留, 1-支持, 2-不支持
+ unsigned char byEnableHCPlatform; //是否启用HCPlatform 0-保留, 1-启用, 2-不启用
+ unsigned char byEZVIZCode; //0-基线设备, 1-萤石设备
+ unsigned int dwDetailOEMCode; //详细OEMCode信息:oemcode由客户序号(可变位,从1开始,1~429496)+菜单风格(2位)+区域号(2位)三部分构成。
+ //规则说明:oemcode最大值为4294967295,最多是十位数。
+ //0: 老设备
+ //1: 新基线设备
+ //10101: 有具体OEM code的为OEM设备
+ unsigned char byModifyVerificationCode; //是否修改验证码 0-保留, 1-修改验证码, 2-不修改验证码
+ unsigned char byMaxBindNum; //支持绑定的最大个数(目前只有NVR支持该字段)
+ unsigned short wOEMCommandPort; //OEM命令端口
+ unsigned char bySupportWifiRegion;
+ //设备支持的wifi区域列表,按位表示,1表示支持,0表示不支持
+ //0x01:是否支持default(默认功率和北美一致)
+ //0x02:是否支持china
+ //0x04:是否支持nothAmerica
+ //0x08:是否支持japan
+ //0x10:是否支持europe
+ //0x20:是否支持world
+ unsigned char byEnableWifiEnhancement;//是否启用wifi增强模式,0-不启用,1-启用
+ unsigned char byWifiRegion; //设备当前区域,0-default,1-china,2-nothAmerica,3-japan,4-europe,5-world
+ unsigned char bySupport2;
+ //按位表示, 1表示支持,0表示不支持
+ //0x01:是否支持通道默认密码配置(该密码用于nvr添加IPC, 默认使用的是nvr admin密码,会单独保存在本地)
+ //0x02:是否支持邮箱重置密码
+ //0x04:是否支持未激活配置SSID和Password
+}SADP_DEVICE_INFO, *LPSADP_DEVICE_INFO;
+
+typedef struct tagSADP_DEVICE_INFO_V40
+{
+ SADP_DEVICE_INFO struSadpDeviceInfo;
+ unsigned char byLicensed; //设备是否授权:0-保留,1-设备未授权,2-设备已授权
+ unsigned char bySystemMode; //系统模式 0-保留,1-单控,2-双控,3-单机集群,4-双控集群
+ unsigned char byControllerType; //控制器类型 0-保留,1-A控,2-B控
+ char szEhmoeVersion[16]; //Ehmoe版本号
+ unsigned char bySpecificDeviceType;//设备类型,1-中性设备 2-海康设备
+ unsigned int dwSDKOverTLSPort; //私有协议中 SDK Over TLS 命令端口
+ unsigned char bySecurityMode; //设备安全模式:0-standard,1-high-A,2-high-B,3-custom
+ unsigned char bySDKServerStatus; //设备SDK服务状态, 0-开启,1-关闭
+ unsigned char bySDKOverTLSServerStatus; //设备SDKOverTLS服务状态, 0-关闭,1-开启
+ char szUserName[MAX_USERNAME_LEN + 1]; //管理员用户的用户名(设备安全模式在非标准模式下是允许用户设置管理员用户的用户名,标准模式默认为admin)
+ char szWifiMAC[20]; //设备所连wifi的Mac地址
+ unsigned char byDataFromMulticast; //0-链路 1-多播
+ unsigned char bySupportEzvizUnbind; //是否支持萤石解绑 0-不支持 1-支持
+ unsigned char bySupportCodeEncrypt; //是否支持重置口令AES128_ECB解密 0-不支持 1-支持
+ unsigned char bySupportPasswordResetType; //是否支持获取密码重置方式参数 0-不支持 1-支持
+ unsigned char byEZVIZBindStatus; //设备萤石云绑定状态,0-未知,1-已绑定,2-未绑定
+ char szPhysicalAccessVerification[16]; //设备支持的物理接触式添加方式,1#AP配网传递,2#用户令牌(用户token)绑定,3#物理按键接触,4#扫码绑定(设备token)
+ unsigned char byRes[411];
+}SADP_DEVICE_INFO_V40, *LPSADP_DEVICE_INFO_V40;
+
+//待修改的设备网络参数
+typedef struct tagSADP_DEV_NET_PARAM
+{
+ char szIPv4Address[16]; // IPv4地址
+ char szIPv4SubNetMask[16]; // IPv4子网掩码
+ char szIPv4Gateway[16]; // IPv4网关
+ char szIPv6Address[128]; // IPv6地址
+ char szIPv6Gateway[128]; // IPv6网关
+ unsigned short wPort; // 设备网络SDK服务端口号(默认8000)
+ unsigned char byIPv6MaskLen; // IPv6掩码长度
+ unsigned char byDhcpEnable; // DHCP使能
+ unsigned short wHttpPort; // HTTP端口
+ unsigned int dwSDKOverTLSPort; // 私有协议中 SDK Over TLS 命令端口
+ unsigned char byRes[122];
+}SADP_DEV_NET_PARAM, *LPSADP_DEV_NET_PARAM;
+
+
+//设备返回网络参数信息
+typedef struct tagSADP_DEV_RET_NET_PARAM
+{
+ unsigned char byRetryModifyTime; //剩余可尝试修改网络参数次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char byRes[126];
+}SADP_DEV_RET_NET_PARAM, *LPSADP_DEV_RET_NET_PARAM;
+
+// CMS参数
+typedef struct tagSADP_CMS_PARAM
+{
+ char szPUID[32]; // 预分配的PUID
+ char szPassword[16]; // 设置的登录密码
+ char szCmsIPv4[16]; // CMS服务器IPv4地址
+ char szCmsIPv6[128]; // CMS服务器IPv6地址
+ unsigned short wCmsPort; // CMS服务器监听端口
+ unsigned char byRes[30];
+}SADP_CMS_PARAM, *LPSADP_CMS_PARAM;
+
+//设备安全码,对应配置命令SADP_GET_DEVICE_CODE,接口SADP_GetDeviceConfig
+typedef struct tagSADP_SAFE_CODE
+{
+ unsigned int dwCodeSize;
+ char szDeviceCode[MAX_DEVICE_CODE];
+ unsigned char byRes[128];
+}SADP_SAFE_CODE, *LPSADP_SAFE_CODE;
+
+//设备二维码
+typedef struct tagSADP_QR_CODES
+{
+ unsigned int dwCodeSize;
+ unsigned int dwMailBoxSize;
+ unsigned int dwServiceMailBoxSize;
+ char szQrCodes[MAX_QR_CODES];
+ char szMailBoxAddr[MAX_MAILBOX_LEN]; //要设置的邮箱地址
+ char szServiceMailBoxAddr[MAX_MAILBOX_LEN]; //服务的邮箱地址
+ unsigned char byRes[128];
+}SADP_QR_CODES, *LPSADP_QR_CODES;
+
+//加密串结构体,对应配置命令SADP_GET_ENCRYPT_STRING,接口SADP_GetDeviceConfig
+typedef struct tagSADP_ENCRYPT_STRING
+{
+ unsigned int dwEncryptStringSize; //加密串长度
+ char szEncryptString[MAX_ENCRYPT_CODE]; //加密串内容
+ unsigned char byRes[128];
+}SADP_ENCRYPT_STRING, *LPSADP_ENCRYPT_STRING;
+//恢复/重置密码结构体
+typedef struct tagSADP_RESET_PARAM
+{
+ char szCode[MAX_ENCRYPT_CODE]; //日期转换过的特殊字符串或加密工具加密后的字符串 - 为兼容老接口
+ char szAuthFile[MAX_FILE_PATH_LEN];//重置授权文件
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byEnableSyncIPCPW; //是否启用同步IPC密码。0 - 不启用, 1- 启用
+ unsigned char byRes[511];
+}SADP_RESET_PARAM, *LSADP_RESET_PARAM;
+
+//显示OEM配置结构体
+typedef struct tagSADP_DISPLAY_OEM_CFG
+{
+ unsigned int dwDisplayOEM; //0-显示所有OEM,其它值为要显示的某一种类型的OEMCode,具体详见dwDetailOEMCode
+ unsigned char byRes[32]; //保留
+}SADP_DISPLAY_OEM_CFG, *LPSADP_DISPLAY_OEM_CFG;
+
+typedef struct tagSADP_TYPE_UNLOCK_CODE
+{
+ unsigned int dwCodeSize;
+ char szDeviceTypeUnlockCode[MAX_UNLOCK_CODE_RANDOM_LEN/*256*/];//设备型号解禁码
+ unsigned char byRes[128];
+}SADP_TYPE_UNLOCK_CODE, *LPSADP_TYPE_UNLOCK_CODE;
+
+typedef struct tagSADP_CUSTOM_DEVICE_TYPE
+{
+ unsigned int dwCodeSize;
+ char szDeviceTypeSecretKey[MAX_UNLOCK_CODE_KEY/*256*/];//类型解禁秘钥
+ unsigned char byRes[128];
+}SADP_CUSTOM_DEVICE_TYPE, *LPSADP_CUSTOM_DEVICE_TYPE;
+
+//获取GUID参数结构体
+typedef struct tagSADP_GUID_FILE_COND
+{
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes[128];
+}SADP_GUID_FILE_COND, *LPSADP_GUID_FILE_COND;
+
+//GUID结构体
+typedef struct tagSADP_GUID_FILE
+{
+ unsigned int dwGUIDSize;
+ char szGUID[MAX_GUID_LEN];
+ unsigned char byRetryGUIDTime; //剩余可导入/导出GUID次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char byRes[254];
+}SADP_GUID_FILE, *LPSADP_GUID_FILE;
+
+typedef struct tagSADP_SINGLE_SECURITY_QUESTION_CFG
+{
+ unsigned int dwSize;
+ unsigned int dwId;//序号
+ char szAnswer[MAX_ANSWER_LEN/*256*/];//答案,只在设置时有效,获取时无效
+ unsigned char byMark;//标记该序号的问题是否被设置 0-未设置 1-已设置
+ unsigned char byRes[127];
+}SADP_SINGLE_SECURITY_QUESTION_CFG, *LPSADP_SINGLE_SECURITY_QUESTION_CFG;
+
+typedef struct tagSADP_SECURITY_QUESTION_CFG
+{
+ unsigned int dwSize;
+ SADP_SINGLE_SECURITY_QUESTION_CFG struSecurityQuestion[MAX_QUESTION_LIST_LEN/*32*/];//安全问题列表
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes[512];
+}SADP_SECURITY_QUESTION_CFG, *LPSADP_SECURITY_QUESTION_CFG;
+
+typedef struct tagSADP_SECURITY_QUESTION
+{
+ unsigned char byRetryAnswerTime; //剩余可设置安全问题次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char byRes[254];
+}SADP_SECURITY_QUESTION, *LPSADP_SECURITY_QUESTION;
+
+typedef struct tagSADP_RESET_PARAM_V40
+{
+ unsigned int dwSize;
+ unsigned char byResetType; //密码重置类型 0-保留,1- 通过设备序列号恢复默认密码,2-导入/导出文件重置密码,3-二维码重置, 4-GUID重置,5-安全问题重置 6-邮箱重置密码
+ unsigned char byEnableSyncIPCPW; //是否同时将密码启用为NVR同步IPC密码。0 - 不启用, 1- 启用
+ unsigned char byRes2[2]; //保留
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ char szCode[MAX_ENCRYPT_CODE]; //日期转换过的特殊字符串或加密工具加密后的字符串 - byResetType 为1、3时有效
+ char szAuthFile[MAX_FILE_PATH_LEN];//重置授权文件, byResetType 为2时有效
+ char szGUID[MAX_GUID_LEN]; //GUID, byResetType 为4时有效
+ SADP_SECURITY_QUESTION_CFG struSecurityQuestionCfg;//安全问题结构体, byResetType 为5时有效
+ unsigned char byRes[512];
+}SADP_RESET_PARAM_V40, *LPSADP_RESET_PARAM_V40;
+
+typedef struct tagSADP_RET_RESET_PARAM_V40
+{
+ unsigned char byRetryGUIDTime; //剩余可设置次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char bRetryTimeValid; //byRetryGUIDTime字段是否有效 0-无效,1-有效
+ unsigned char bLockTimeValid; //bySurplusLockTime字段是否有效 0-无效,1-有效
+ unsigned char byRes[252];
+}SADP_RET_RESET_PARAM_V40, *LPSADP_RET_RESET_PARAM_V40;
+
+//HCPlatform状态
+typedef struct tagSADP_HCPLATFORM_STATUS_INFO
+{
+ unsigned int dwSize;
+ unsigned char byEnableHCPlatform; //是否启用HCPlatform。0 - 保留, 1- 启用, 2-不启用
+ unsigned char byRes[3]; //保留
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes2[128];
+}SADP_HCPLATFORM_STATUS_INFO, *LPSADP_HCPLATFORM_STATUS_INFO;
+
+typedef struct tagSADP_USER_MAILBOX
+{
+ unsigned int dwSize;
+ char szPassword[MAX_PASS_LEN]; //设备admin用户密码
+ char szMailBoxAddr[MAX_MAILBOX_LEN]; //预留邮箱地址,用于接收密码服务器返回的安全码
+ unsigned char byRes[128];
+}SADP_USER_MAILBOX, *LPSADP_USER_MAILBOX;
+//设备验证码
+typedef struct tagSADP_VERIFICATION_CODE_INFO
+{
+ unsigned int dwSize;
+ char szVerificationCode[SADP_MAX_VERIFICATION_CODE_LEN]; //验证码(验证码用于萤石接入、预览、控制的唯一密码)
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes[128];
+}SADP_VERIFICATION_CODE_INFO, *LPSADP_VERIFICATION_CODE_INFO;
+
+//设备锁定信息
+typedef struct tagSADP_DEV_LOCK_INFO
+{
+ unsigned char byRetryTime; //剩余可尝试次数
+ unsigned char bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+ unsigned char byRes[126];
+}SADP_DEV_LOCK_INFO, *LPSADP_DEV_LOCK_INFO;
+
+//被绑定设备信息结构体
+typedef struct tagSADP_BIND_INFO
+{
+ char szSerialNO[SADP_MAX_SERIALNO_LEN]; //被绑定设备的序列号
+ unsigned char byiBind; //设备是否绑定 0-未绑定;1-已绑定
+ unsigned char byRes[127];
+}SADP_BIND_INFO, *LPSADP_BIND_INFO;
+
+typedef struct tagSADP_BIND_LIST
+{
+ SADP_BIND_INFO struBindInfo[SADP_MAX_BIND_NUM]; //绑定设备信息列表
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byUnbindAll; //是否解绑所有设备 0-不解绑所有设备;1-解绑所有设备
+ unsigned char byRes[127];
+}SADP_BIND_LIST, *LPSADP_BIND_LIST;
+
+typedef struct tagSADP_INACTIVE_INFO
+{
+ char szPassword[MAX_PASS_LEN]; //用户密码
+ unsigned char byRes[128];
+}SADP_INACTIVE_INFO, *LPSADP_INACTIVE_INFO;
+
+//wifi Region
+typedef struct tagSADP_WIFI_REGION_INFO
+{
+ unsigned char byMode; //模式,0-保留,1-wifi区域配置模式,2-wifi增强模式
+ unsigned char byWifiRegion; //wifi区域,当byMode为1时,该字段有效。0 -default, 1- china, 2-nothAmerica,3-japan,4-europe,5-world
+ unsigned char byWifiEnhancementEnabled;//是否启用wifi增强模式,当byMode为2时,该字段有效 0 -不启用, 1- 启用
+ unsigned char byRes; //保留
+ char szPassword[MAX_PASS_LEN];//用户密码
+ unsigned char byRes2[128];
+}SADP_WIFI_REGION_INFO, *LPSADP_WIFI_REGION_INFO;
+
+//通道默认密码信息
+typedef struct tagSADP_CHANNEL_DEFAULT_PASSWORD
+{
+ char szPassword[MAX_PASS_LEN]; //设备admin用户密码
+ char szChannelDefaultPassword[MAX_PASS_LEN]; //通道默认密码(用户NVR激活,添加IPC)
+ unsigned char byRes[128];
+}SADP_CHANNEL_DEFAULT_PASSWORD, *LPSADP_CHANNEL_DEFAULT_PASSWORD;
+
+
+//设备自检状态结构体
+typedef struct tagSADP_SELF_CHECK_STATE
+{
+ unsigned int dwSize;
+ int dwTotalDisk; //磁盘总数(默认值为-1)
+ int dwGoodDisk; //好盘数(默认值为-1)
+ char szCPU[MAX_CPU_LEN]; //CPU
+ char szMemory[MAX_MEMORY_LEN]; //内存
+ unsigned char byProgress; //自检进度,0-100
+ unsigned char byTemperatureState; //温度状态,0-无效;1-正常;2-异常
+ unsigned char byFanState; //风扇状态,0-无效;1-正常;2-异常
+ unsigned char byPowerState; //电源状态,0-无效;1-正常;2-异常
+ unsigned char bySASConnectState; //SAS连接状态,0-无效;1-连接;2-未连接
+ char byTotalNetworkPort; //网口总数(默认值为-1)
+ char byConnectNetworkPort; //网口连接数(默认值为-1)
+ unsigned char byRes[129];
+}SADP_SELF_CHECK_STATE, *LPSADP_SELF_CHECK_STATE;
+
+//EHome使能参数
+typedef struct tagSADP_EHOME_ENABLE_PARAM
+{
+ unsigned int dwSize;
+ char szDevID[MAX_PASS_LEN]; //设备ID
+ char szEhomeKey[MAX_PASS_LEN]; //Ehome Key
+ char szPassword[MAX_PASS_LEN]; //设备密码
+ unsigned char byRes[64];
+}SADP_EHOME_ENABLE_PARAM, *LPSADP_EHOME_ENABLE_PARAM;
+
+//WIFI参数配置结构体
+typedef struct tagSADP_WIFI_CONFIG_PARAM
+{
+ unsigned int dwSize;
+ char szSSID[SADP_MAX_SERIALNO_LEN]; //SSID
+ char szPassword[SADP_MAX_SERIALNO_LEN]; //Password
+ unsigned char byWifiMode; //wifi模式,0-默认,1-Station, 2-AP
+ unsigned char byRes[64];
+}SADP_WIFI_CONFIG_PARAM, *LPSADP_WIFI_CONFIG_PARAM;
+
+//已配置重置密码类型参数配置结构体
+typedef struct tagSADP_PASSWORD_RESET_TYPE_PARAM
+{
+ unsigned int dwSize;
+ unsigned char byEnable; //0-未配置 1-(GUID,安全问题,安全邮箱,HC)配置过一种或多种
+ unsigned char byGuidEnabled; //0-未导出过GUID 1-导出过GUID
+ unsigned char bySecurityQuestionEnabled; //0-未配置过安全问题 1-配置过安全问题
+ unsigned char bySecurityMailBoxEnabled; //0-未配置过安全邮箱 1-配置过安全邮箱
+ unsigned char byHikConnectEnabled; //0-未绑定HikConnect账号 1-绑定过HikConnect账号
+ unsigned char byRes1[3];
+ unsigned char byRes[64];
+}SADP_PASSWORD_RESET_TYPE_PARAM, *LPSADP_PASSWORD_RESET_TYPE_PARAM;
+
+
+// 接口
+typedef void (CALLBACK *PDEVICE_FIND_CALLBACK)(const SADP_DEVICE_INFO *lpDeviceInfo, void *pUserData);
+CSADP_API BOOL CALLBACK SADP_Start_V30(PDEVICE_FIND_CALLBACK pDeviceFindCallBack, int bInstallNPF = 0, void* pUserData = NULL);
+typedef void (CALLBACK *PDEVICE_FIND_CALLBACK_V40)(const SADP_DEVICE_INFO_V40 *lpDeviceInfo, void *pUserData);
+CSADP_API BOOL CALLBACK SADP_Start_V40(PDEVICE_FIND_CALLBACK_V40 pDeviceFindCallBack, int bInstallNPF = 0, void* pUserData = NULL);
+CSADP_API BOOL CALLBACK SADP_SendInquiry(void);
+CSADP_API BOOL CALLBACK SADP_Stop(void);
+CSADP_API BOOL CALLBACK SADP_ModifyDeviceNetParam(const char* sMAC, const char* sPassword, const SADP_DEV_NET_PARAM *lpNetParam);
+CSADP_API unsigned int CALLBACK SADP_GetSadpVersion(void);
+CSADP_API BOOL CALLBACK SADP_SetLogToFile(int nLogLevel=0, char const *strLogDir = NULL, int bAutoDel = 1);
+CSADP_API unsigned int CALLBACK SADP_GetLastError(void);
+CSADP_API BOOL CALLBACK SADP_ResetDefaultPasswd(const char* sDevSerialNO, const char* sCommand);
+CSADP_API BOOL CALLBACK SADP_SetCMSInfo(const char* sMac, const SADP_CMS_PARAM *lpCmsParam);
+CSADP_API BOOL CALLBACK SADP_Clearup(void);
+CSADP_API void CALLBACK SADP_SetAutoRequestInterval(unsigned int dwInterval); //设置自动搜索时间间隔(单位秒,为0则不自动请求,默认60s)
+
+CSADP_API BOOL CALLBACK SADP_GetDeviceConfig(const char* sDevSerialNO, unsigned int dwCommand, void* lpInBuffer, unsigned int dwinBuffSize, void *lpOutBuffer, unsigned int dwOutBuffSize);
+CSADP_API BOOL CALLBACK SADP_SetDeviceConfig(const char* sDevSerialNO, unsigned int dwCommand, void* lpInBuffer, unsigned int dwInBuffSize, void* lpOutBuffer, unsigned int dwOutBuffSize);
+CSADP_API BOOL CALLBACK SADP_GetDeviceConfigByMAC(const char* sDevMAC, unsigned int dwCommand, void* lpInBuffer, unsigned int dwinBuffSize, void *lpOutBuffer, unsigned int dwOutBuffSize);
+//激活设备
+CSADP_API BOOL CALLBACK SADP_ActivateDevice(const char* sDevSerialNO, const char* sCommand);
+
+//重置密码接口,兼容之前的恢复默认密码接口
+CSADP_API BOOL CALLBACK SADP_ResetPasswd(const char* sDevSerialNO, const SADP_RESET_PARAM *pResetParam);
+//重置密码接口V40,兼容之前的SADP_ResetPasswd
+CSADP_API BOOL CALLBACK SADP_ResetPasswd_V40(const char* sDevSerialNO, const SADP_RESET_PARAM_V40 *pResetParam, SADP_RET_RESET_PARAM_V40 *pRetResetParam);
+
+
+//设置设备过滤规则
+//dwFilterRule,按位表示,为1表示过滤,全0表示不过滤;0x01:过滤萤石设备;0x02:过滤OEM设备;0x03:过滤萤和OEM设备;0xfffffffe:仅显示萤石设备;0xfffffffd:仅显示OEM设备
+CSADP_API BOOL CALLBACK SADP_SetDeviceFilterRule( unsigned int dwFilterRule, const void *lpInBuff, unsigned int dwInBuffLen);
+//修改网络参数V40
+CSADP_API BOOL CALLBACK SADP_ModifyDeviceNetParam_V40(const char* sMAC, const char* sPassword, const SADP_DEV_NET_PARAM *lpNetParam, SADP_DEV_RET_NET_PARAM *lpRetNetParam, unsigned int dwOutBuffSize);
+//点灯
+CSADP_API BOOL CALLBACK SADP_SendLamp(const char* sMAC, unsigned int dwCommand);
+#endif
+
+
+
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/openssl/libcrypto.a b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/openssl/libcrypto.a
new file mode 100644
index 0000000..ad3d482
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/openssl/libcrypto.a
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/openssl/libssl.a b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/openssl/libssl.a
new file mode 100644
index 0000000..342610d
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZOpenSDK/openssl/libssl.a
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZSupportViewController.xib b/EZDemo/HDLEZDemo/HDLEZDemo/EZSupportViewController.xib
new file mode 100644
index 0000000..751f46b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZSupportViewController.xib
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
+ <device id="retina4_7" orientation="portrait">
+ <adaptation id="fullscreen"/>
+ </device>
+ <dependencies>
+ <deployment identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <objects>
+ <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="EZSupportViewController">
+ <connections>
+ <outlet property="accessTokenInput" destination="Ret-Ci-Qwy" id="6Wy-Nt-vgj"/>
+ <outlet property="apiUrlInput" destination="HYD-Qc-ara" id="voa-Mq-Oeo"/>
+ <outlet property="appKeyInput" destination="E06-eY-jdx" id="6uE-bj-RLz"/>
+ <outlet property="authUrlInput" destination="jnJ-tU-OwK" id="fEQ-oC-D6k"/>
+ <outlet property="devSerialInput" destination="FYZ-2O-EKk" id="6el-DI-d08"/>
+ <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
+ </connections>
+ </placeholder>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+ <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="accessToken" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Ret-Ci-Qwy">
+ <rect key="frame" x="16" y="166" width="343" height="31"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="31" id="HdA-as-9nY"/>
+ </constraints>
+ <nil key="textColor"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
+ </textField>
+ <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="appKey" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="E06-eY-jdx">
+ <rect key="frame" x="16" y="100" width="343" height="31"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="31" id="a8Q-kc-nqJ"/>
+ </constraints>
+ <nil key="textColor"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
+ </textField>
+ <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="apiUrl" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="HYD-Qc-ara">
+ <rect key="frame" x="16" y="232" width="343" height="31"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="31" id="eTr-er-TmP"/>
+ </constraints>
+ <nil key="textColor"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
+ </textField>
+ <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="authUrl" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="jnJ-tU-OwK">
+ <rect key="frame" x="16" y="298" width="343" height="31"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="31" id="RiO-NY-8Rx"/>
+ </constraints>
+ <nil key="textColor"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
+ </textField>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="LBx-Cz-520">
+ <rect key="frame" x="21" y="415" width="36" height="30"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="30" id="PXu-zf-WmW"/>
+ <constraint firstAttribute="width" constant="36" id="RZM-XY-n5g"/>
+ </constraints>
+ <state key="normal" title="test2"/>
+ <connections>
+ <action selector="test2BtnClick:" destination="-1" eventType="touchUpInside" id="Kk9-K6-VSA"/>
+ </connections>
+ </button>
+ <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="devSerial" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="FYZ-2O-EKk">
+ <rect key="frame" x="16" y="364" width="343" height="31"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="31" id="JQH-HR-7q4"/>
+ </constraints>
+ <nil key="textColor"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits" keyboardType="alphabet"/>
+ </textField>
+ <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="VIF-a2-qrT">
+ <rect key="frame" x="107" y="415" width="47" height="30"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="47" id="1h3-oc-Eru"/>
+ <constraint firstAttribute="height" constant="30" id="usb-PH-EeN"/>
+ </constraints>
+ <state key="normal" title="test"/>
+ <connections>
+ <action selector="testBtnClick:" destination="-1" eventType="touchUpInside" id="qQt-NV-OSI"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" red="0.93178934010000003" green="0.93178934010000003" blue="0.93178934010000003" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstAttribute="trailing" secondItem="HYD-Qc-ara" secondAttribute="trailing" constant="16" id="3m1-je-rD3"/>
+ <constraint firstAttribute="trailing" secondItem="Ret-Ci-Qwy" secondAttribute="trailing" constant="16" id="799-WM-9zV"/>
+ <constraint firstItem="VIF-a2-qrT" firstAttribute="top" secondItem="LBx-Cz-520" secondAttribute="top" id="8Mg-CR-ySV"/>
+ <constraint firstItem="jnJ-tU-OwK" firstAttribute="top" secondItem="HYD-Qc-ara" secondAttribute="bottom" constant="35" id="DHX-zu-BLO"/>
+ <constraint firstItem="HYD-Qc-ara" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="16" id="Hhs-AA-MEa"/>
+ <constraint firstItem="LBx-Cz-520" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="21" id="Ht9-Ix-ZkV"/>
+ <constraint firstAttribute="trailing" secondItem="E06-eY-jdx" secondAttribute="trailing" constant="16" id="IQv-5l-nai"/>
+ <constraint firstItem="Ret-Ci-Qwy" firstAttribute="top" secondItem="E06-eY-jdx" secondAttribute="bottom" constant="35" id="NFY-Wz-XOO"/>
+ <constraint firstItem="E06-eY-jdx" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="16" id="UYd-lu-cKh"/>
+ <constraint firstItem="LBx-Cz-520" firstAttribute="top" secondItem="FYZ-2O-EKk" secondAttribute="bottom" constant="20" id="VB3-g1-C7O"/>
+ <constraint firstItem="FYZ-2O-EKk" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="16" id="aPD-Ia-QB5"/>
+ <constraint firstAttribute="trailing" secondItem="jnJ-tU-OwK" secondAttribute="trailing" constant="16" id="aia-RZ-H0f"/>
+ <constraint firstAttribute="trailing" secondItem="FYZ-2O-EKk" secondAttribute="trailing" constant="16" id="bur-Th-fYL"/>
+ <constraint firstItem="VIF-a2-qrT" firstAttribute="leading" secondItem="LBx-Cz-520" secondAttribute="trailing" constant="50" id="ggG-ZK-YTi"/>
+ <constraint firstItem="E06-eY-jdx" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" constant="100" id="iR1-qc-A7u"/>
+ <constraint firstItem="Ret-Ci-Qwy" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="16" id="izx-ky-v2e"/>
+ <constraint firstItem="HYD-Qc-ara" firstAttribute="top" secondItem="Ret-Ci-Qwy" secondAttribute="bottom" constant="35" id="s2l-pc-gTb"/>
+ <constraint firstItem="FYZ-2O-EKk" firstAttribute="top" secondItem="jnJ-tU-OwK" secondAttribute="bottom" constant="35" id="uM7-Q3-fUS"/>
+ <constraint firstItem="jnJ-tU-OwK" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" constant="16" id="xya-Bi-ize"/>
+ </constraints>
+ <simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
+ <point key="canvasLocation" x="31.5" y="55.5"/>
+ </view>
+ </objects>
+</document>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/EZVideoTalkViewcontroller.xib b/EZDemo/HDLEZDemo/HDLEZDemo/EZVideoTalkViewcontroller.xib
new file mode 100644
index 0000000..904768e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/EZVideoTalkViewcontroller.xib
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+ <device id="retina5_9" orientation="portrait" appearance="light"/>
+ <dependencies>
+ <deployment version="2304" identifier="iOS"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="System colors in document resources" minToolsVersion="11.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <objects>
+ <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+ <viewController id="333-bP-4tK" customClass="EZVideoTalkViewcontroller">
+ <view key="view" contentMode="scaleToFill" id="gVE-8I-I5v">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="812"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3UU-E8-PbA">
+ <rect key="frame" x="20" y="64" width="160" height="160"/>
+ <color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ <constraints>
+ <constraint firstAttribute="width" secondItem="3UU-E8-PbA" secondAttribute="height" multiplier="1:1" id="KZI-Vj-YuK"/>
+ </constraints>
+ </view>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="WIQ-jm-6gc">
+ <rect key="frame" x="195" y="64" width="160" height="160"/>
+ <color key="backgroundColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </view>
+ <button opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="249" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="9ko-k4-F0N">
+ <rect key="frame" x="20" y="302" width="85" height="30"/>
+ <color key="backgroundColor" red="0.80782043147208116" green="0.80782043147208116" blue="0.80782043147208116" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <state key="normal" title="鍒涘缓鎴块棿">
+ <color key="titleColor" red="0.14395621827411165" green="0.14395621827411165" blue="0.14395621827411165" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <userDefinedRuntimeAttributes>
+ <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
+ <integer key="value" value="5"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="boolean" keyPath="layer.maskToBounds" value="YES"/>
+ </userDefinedRuntimeAttributes>
+ <connections>
+ <action selector="createRoomAction:" destination="333-bP-4tK" eventType="touchUpInside" id="rAq-LO-B2O"/>
+ </connections>
+ </button>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qiF-2z-Rwj">
+ <rect key="frame" x="145" y="302" width="85" height="30"/>
+ <color key="backgroundColor" red="0.80782043150000005" green="0.80782043150000005" blue="0.80782043150000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <state key="normal" title="鍔犲叆鎴块棿">
+ <color key="titleColor" red="0.14395621829999999" green="0.14395621829999999" blue="0.14395621829999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <userDefinedRuntimeAttributes>
+ <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
+ <integer key="value" value="5"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="boolean" keyPath="layer.maskToBounds" value="YES"/>
+ </userDefinedRuntimeAttributes>
+ <connections>
+ <action selector="enterRoomAction:" destination="333-bP-4tK" eventType="touchUpInside" id="8cc-2n-Wa1"/>
+ </connections>
+ </button>
+ <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="鎴块棿ID锛�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jc8-E1-NYw">
+ <rect key="frame" x="19.999999999999996" y="254" width="60.666666666666657" height="18"/>
+ <fontDescription key="fontDescription" type="system" pointSize="15"/>
+ <nil key="textColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <textField opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" placeholder="鍔犲叆鎴块棿锛岃杈撳叆鎴块棿鍙�" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="6Wf-7i-TE6">
+ <rect key="frame" x="82.666666666666686" y="248" width="177" height="30"/>
+ <constraints>
+ <constraint firstAttribute="height" constant="30" id="4Af-wy-cNH"/>
+ <constraint firstAttribute="width" constant="177" id="zPe-13-EDE"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <textInputTraits key="textInputTraits"/>
+ </textField>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="YO9-MU-r4L">
+ <rect key="frame" x="270" y="302" width="85" height="30"/>
+ <color key="backgroundColor" red="0.80782043150000005" green="0.80782043150000005" blue="0.80782043150000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <state key="normal" title="绂诲紑鎴块棿">
+ <color key="titleColor" red="0.14395621829999999" green="0.14395621829999999" blue="0.14395621829999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ </state>
+ <userDefinedRuntimeAttributes>
+ <userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
+ <integer key="value" value="5"/>
+ </userDefinedRuntimeAttribute>
+ <userDefinedRuntimeAttribute type="boolean" keyPath="layer.maskToBounds" value="YES"/>
+ </userDefinedRuntimeAttributes>
+ <connections>
+ <action selector="leaveRoomAction:" destination="333-bP-4tK" eventType="touchUpInside" id="r0y-ug-Dd0"/>
+ </connections>
+ </button>
+ </subviews>
+ <viewLayoutGuide key="safeArea" id="gRk-Lv-awz"/>
+ <color key="backgroundColor" systemColor="systemBackgroundColor"/>
+ <constraints>
+ <constraint firstItem="YO9-MU-r4L" firstAttribute="height" secondItem="9ko-k4-F0N" secondAttribute="height" id="3hn-CA-7hn"/>
+ <constraint firstItem="3UU-E8-PbA" firstAttribute="leading" secondItem="gRk-Lv-awz" secondAttribute="leading" constant="20" id="4Rd-ZV-SEq"/>
+ <constraint firstItem="jc8-E1-NYw" firstAttribute="leading" secondItem="3UU-E8-PbA" secondAttribute="leading" id="5Ph-1I-GYi"/>
+ <constraint firstItem="jc8-E1-NYw" firstAttribute="top" secondItem="3UU-E8-PbA" secondAttribute="bottom" constant="30" id="5un-n4-tsE"/>
+ <constraint firstItem="WIQ-jm-6gc" firstAttribute="width" secondItem="3UU-E8-PbA" secondAttribute="width" id="6pz-XQ-YH8"/>
+ <constraint firstItem="3UU-E8-PbA" firstAttribute="top" secondItem="gRk-Lv-awz" secondAttribute="top" constant="20" id="D1Z-n7-5F7"/>
+ <constraint firstItem="gRk-Lv-awz" firstAttribute="trailing" secondItem="WIQ-jm-6gc" secondAttribute="trailing" constant="20" id="DLx-1Y-YOI"/>
+ <constraint firstItem="qiF-2z-Rwj" firstAttribute="height" secondItem="9ko-k4-F0N" secondAttribute="height" id="GGf-Pf-he1"/>
+ <constraint firstItem="9ko-k4-F0N" firstAttribute="leading" secondItem="jc8-E1-NYw" secondAttribute="leading" id="JcU-Y7-n28"/>
+ <constraint firstItem="qiF-2z-Rwj" firstAttribute="centerX" secondItem="gVE-8I-I5v" secondAttribute="centerX" id="Jvs-by-qqb"/>
+ <constraint firstItem="WIQ-jm-6gc" firstAttribute="height" secondItem="3UU-E8-PbA" secondAttribute="height" id="M1e-gm-WWT"/>
+ <constraint firstItem="YO9-MU-r4L" firstAttribute="centerY" secondItem="9ko-k4-F0N" secondAttribute="centerY" id="Pbs-Av-LUm"/>
+ <constraint firstItem="WIQ-jm-6gc" firstAttribute="top" secondItem="gRk-Lv-awz" secondAttribute="top" constant="20" id="Pv2-Fu-uwh"/>
+ <constraint firstItem="qiF-2z-Rwj" firstAttribute="centerY" secondItem="9ko-k4-F0N" secondAttribute="centerY" id="U1m-8i-Tl2"/>
+ <constraint firstItem="6Wf-7i-TE6" firstAttribute="leading" secondItem="jc8-E1-NYw" secondAttribute="trailing" constant="2" id="V3y-Bh-c5S"/>
+ <constraint firstItem="qiF-2z-Rwj" firstAttribute="width" secondItem="9ko-k4-F0N" secondAttribute="width" id="eZX-NQ-URt"/>
+ <constraint firstItem="WIQ-jm-6gc" firstAttribute="leading" secondItem="3UU-E8-PbA" secondAttribute="trailing" constant="15" id="eeG-AH-wkx"/>
+ <constraint firstItem="YO9-MU-r4L" firstAttribute="width" secondItem="9ko-k4-F0N" secondAttribute="width" id="hVc-Un-xou"/>
+ <constraint firstItem="YO9-MU-r4L" firstAttribute="leading" secondItem="qiF-2z-Rwj" secondAttribute="trailing" constant="40" id="mAl-ZD-eC4"/>
+ <constraint firstItem="YO9-MU-r4L" firstAttribute="trailing" secondItem="WIQ-jm-6gc" secondAttribute="trailing" id="mch-yY-ckS"/>
+ <constraint firstItem="9ko-k4-F0N" firstAttribute="top" secondItem="jc8-E1-NYw" secondAttribute="bottom" constant="30" id="qwt-j1-p09"/>
+ <constraint firstItem="6Wf-7i-TE6" firstAttribute="centerY" secondItem="jc8-E1-NYw" secondAttribute="centerY" id="r2S-JH-0Bo"/>
+ <constraint firstItem="qiF-2z-Rwj" firstAttribute="leading" secondItem="9ko-k4-F0N" secondAttribute="trailing" constant="40" id="rkn-HZ-QQp"/>
+ </constraints>
+ </view>
+ <connections>
+ <outlet property="localView" destination="3UU-E8-PbA" id="JEa-Cq-Kuk"/>
+ <outlet property="remoteView" destination="WIQ-jm-6gc" id="cAE-MJ-SlZ"/>
+ <outlet property="roomIDTextField" destination="6Wf-7i-TE6" id="V5o-D0-lEL"/>
+ </connections>
+ <point key="canvasLocation" x="-143.19999999999999" y="131.52709359605913"/>
+ </viewController>
+ </objects>
+ <resources>
+ <systemColor name="systemBackgroundColor">
+ <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+ </systemColor>
+ </resources>
+</document>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.entitlements b/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.entitlements
new file mode 100644
index 0000000..7021e63
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.entitlements
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.developer.networking.HotspotConfiguration</key>
+ <true/>
+ <key>com.apple.developer.networking.wifi-info</key>
+ <true/>
+</dict>
+</plist>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.xcdatamodeld/.xccurrentversion b/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.xcdatamodeld/.xccurrentversion
new file mode 100644
index 0000000..7d19b6b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.xcdatamodeld/.xccurrentversion
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>_XCCurrentVersionName</key>
+ <string>HDLEZDemo.xcdatamodel</string>
+</dict>
+</plist>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.xcdatamodeld/HDLEZDemo.xcdatamodel/contents b/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.xcdatamodeld/HDLEZDemo.xcdatamodel/contents
new file mode 100644
index 0000000..d7e92b3
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/HDLEZDemo.xcdatamodeld/HDLEZDemo.xcdatamodel/contents
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1" systemVersion="11A491" minimumToolsVersion="Automatic" sourceLanguage="Objective-C" usedWithCloudKit="false" userDefinedModelVersionIdentifier="">
+ <elements/>
+</model>
\ No newline at end of file
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/Info.plist b/EZDemo/HDLEZDemo/HDLEZDemo/Info.plist
new file mode 100644
index 0000000..1666eda
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/Info.plist
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>privacy</key>
+ <string></string>
+ <key>NSMicrophoneUsageDescription</key>
+ <string>楹﹀厠椋�</string>
+ <key>NSAppTransportSecurity</key>
+ <dict>
+ <key>NSAllowsArbitraryLoads</key>
+ <true/>
+ </dict>
+</dict>
+</plist>
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/SceneDelegate.h b/EZDemo/HDLEZDemo/HDLEZDemo/SceneDelegate.h
new file mode 100644
index 0000000..b0df8db
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/SceneDelegate.h
@@ -0,0 +1,15 @@
+//
+// SceneDelegate.h
+// HDLEZDemo
+//
+// Created by 闄堝惎鎵� on 2023/3/2.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface SceneDelegate : UIResponder <UIWindowSceneDelegate>
+
+@property (strong, nonatomic) UIWindow * window;
+
+@end
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/SceneDelegate.m b/EZDemo/HDLEZDemo/HDLEZDemo/SceneDelegate.m
new file mode 100644
index 0000000..3e5954b
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/SceneDelegate.m
@@ -0,0 +1,61 @@
+//
+// SceneDelegate.m
+// HDLEZDemo
+//
+// Created by 闄堝惎鎵� on 2023/3/2.
+//
+
+#import "SceneDelegate.h"
+#import "AppDelegate.h"
+
+@interface SceneDelegate ()
+
+@end
+
+@implementation SceneDelegate
+
+
+- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
+ // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
+ // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
+ // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
+}
+
+
+- (void)sceneDidDisconnect:(UIScene *)scene {
+ // Called as the scene is being released by the system.
+ // This occurs shortly after the scene enters the background, or when its session is discarded.
+ // Release any resources associated with this scene that can be re-created the next time the scene connects.
+ // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
+}
+
+
+- (void)sceneDidBecomeActive:(UIScene *)scene {
+ // Called when the scene has moved from an inactive state to an active state.
+ // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
+}
+
+
+- (void)sceneWillResignActive:(UIScene *)scene {
+ // Called when the scene will move from an active state to an inactive state.
+ // This may occur due to temporary interruptions (ex. an incoming phone call).
+}
+
+
+- (void)sceneWillEnterForeground:(UIScene *)scene {
+ // Called as the scene transitions from the background to the foreground.
+ // Use this method to undo the changes made on entering the background.
+}
+
+
+- (void)sceneDidEnterBackground:(UIScene *)scene {
+ // Called as the scene transitions from the foreground to the background.
+ // Use this method to save data, release shared resources, and store enough scene-specific state information
+ // to restore the scene back to its current state.
+
+ // Save changes in the application's managed object context when the application transitions to the background.
+ [(AppDelegate *)UIApplication.sharedApplication.delegate saveContext];
+}
+
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/ViewController.h b/EZDemo/HDLEZDemo/HDLEZDemo/ViewController.h
new file mode 100644
index 0000000..1b928ed
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/ViewController.h
@@ -0,0 +1,20 @@
+//
+// ViewController.h
+// HDLEZDemo
+//
+// Created by 闄堝惎鎵� on 2023/3/2.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface ViewController : UIViewController
+
+- (IBAction)toDeviceList:(id)sender;
+- (IBAction)toTempView:(id)sender;
+- (IBAction)toDoorCamera:(id)sender;
+- (IBAction)toDeviceMsgListV:(id)sender;
+- (IBAction)addDeviceWithoutConfirm:(id)sender;
+
+- (IBAction)addDevice:(id)sender;
+@end
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/ViewController.m b/EZDemo/HDLEZDemo/HDLEZDemo/ViewController.m
new file mode 100644
index 0000000..b882b5e
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/ViewController.m
@@ -0,0 +1,72 @@
+//
+// ViewController.m
+// HDLEZDemo
+//
+// Created by 闄堝惎鎵� on 2023/3/2.
+//
+
+#import "ViewController.h"
+#import "EZSDK.h"
+
+//钀ょ煶闂ㄩ攣spk
+#define HDLEZ_DOOR_SPK @"security.door.ezviz"
+#define HDLEZ_DEVICEID @"1644223814848573441"
+//#define HDLEZ_DEVICESERIAL @"K36229010"
+#define HDLEZ_DEVICESERIAL @"J92513662"
+
+@interface ViewController ()<EZSDKDelegate>
+
+@end
+
+@implementation ViewController
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+ [self.navigationController.navigationBar setHidden:YES];
+// [self.navigationController setNavigationBarHidden:YES];
+ // Do any additional setup after loading the view.
+}
+
+
+- (IBAction)addDevice:(id)sender {
+ [EZSDK sharedInstance].delegate=self;
+ [EZSDK sharedInstance].connectTipModels=@[@"CS-DP1-4A1WPFBSR-C"];
+ [[EZSDK sharedInstance] addEzvizMonitorWithDeviceType:HDLEZ_DOOR_SPK];
+}
+
+- (IBAction)addDeviceWithoutConfirm:(id)sender {
+ [EZSDK sharedInstance].delegate=self;
+// [EZSDK sharedInstance].connectTipModels=@[@"CS-DP1-4A1WPFBSR-C"];
+ [EZSDK sharedInstance].connectTipModels=@[@"DP1"];
+ [[EZSDK sharedInstance] addEzvizMonitorWithDeviceType:@""];
+}
+
+- (IBAction)toDeviceMsgListV:(id)sender {
+ [[EZSDK sharedInstance] toDeviceMsgListView:HDLEZ_DEVICEID];
+}
+
+- (IBAction)toDoorCamera:(id)sender {
+ [[EZSDK sharedInstance] PlayWithDeviceSerial:HDLEZ_DEVICESERIAL deviceId:HDLEZ_DEVICEID deviceType:HDLEZ_DOOR_SPK];
+}
+
+- (IBAction)toTempView:(id)sender {
+ [[EZSDK sharedInstance] toTemPassView:HDLEZ_DEVICEID];
+}
+
+- (IBAction)toDeviceList:(id)sender {
+
+// [[EZSDK sharedInstance] initLibWithAppKey:@"1aa98a90489b4838b966b57018b4b04b" globalAppKey:@"1aa98a90489b4838b966b57018b4b04b"];
+// [[EZSDK sharedInstance] setHDlAccessToken:@"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI4YmRhYzFhZWQyMDA0YjRjYjU5YzUwMzJkOGYwOTY4MiIsImNvbXBhbnlJZCI6IjAiLCJyb2xlIjoiIiwiaGVhZGVyUHJlZml4IjoiQmVhcmVyICIsInVzZXJBY2NvdW50Ijoid3hyIiwidGVuYW50SWQiOiIyMCIsInVzZXJUeXBlIjoiVVNFUl9DIiwidG9rZW5UeXBlIjoiYWNjZXNzX3Rva2VuIiwidXNlck5hbWUiOiJ3eHIiLCJ1c2VyRGF0YVJpZ2h0IjoiMSIsIm9wZW5BcHBsaWNhdGlvbklkIjoiMCIsInVzZXJJZCI6IjEzOTIwMzU1NjgyMDQ0MjMxNjkiLCJleHAiOjE2Nzc3MzYxNDEsIm5iZiI6MTY3NzcyODk0MX0.TkDChEQCB86A6GL3gDp5qRcUT1iHGrVj14qEhYz_BQP-b_k7Fcbc0P5vmqKjtaYxIci6v1JAm1MB8uIU0Zkk5IHEK4VFO0AGsckUUc9WkRnGYLZSRQCF3JmgUORjAvT683WBB21tCkr0yl9qFPDVCWosRgzWd8Xba5hHOaEwEUs" refreshToken:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI1NmFiYTYxOWZlMzY0YzlhYTE1ZGI3NWRhODcyMDg1OCIsImNvbXBhbnlJZCI6IjAiLCJoZWFkZXJQcmVmaXgiOiJCZWFyZXIgIiwidGVuYW50SWQiOiIyMCIsInRva2VuVHlwZSI6InJlZnJlc2hfdG9rZW4iLCJvcGVuQXBwbGljYXRpb25JZCI6IjAiLCJ1c2VySWQiOiIxMzkyMDM1NTY4MjA0NDIzMTY5IiwiZXhwIjoxNjc4MzMzNzQxLCJuYmYiOjE2Nzc3Mjg5NDF9.Eio31PWNOHB1lWgp3hS7XFyN9omDlA7DfcpQqeVh84_Nwf5wpyCMmuPBBFGbtSXgyo0rto7UpEiOdIKnUk4M9RkkFLZzpyM24yAbh5K90coC7z2yI76mmxpX7BfhTyL1tSuh7iL2lmRjPZLw3yAOHSVKl876Po6U-I-K4GobWyg"];
+// [[EZSDK sharedInstance] setRequestHttpsHostAndPlatform:@"https://test-gz.hdlcontrol.com" platform:1 homeId:@"1547099040465408002"];
+// [[EZSDK sharedInstance] setEZAccessToken:@"ra.bk6nv8e42hy8dwuxbtfc2goa6j7y10qz-4jnfz6nk91-0y7082q-zqruuxors"];
+
+// [[EZSDK sharedInstance] go2EZvizMonitor];
+// [[EZSDK sharedInstance] toEZDeviceListViewWithFilterTypes:@[@"Y3000FV",@"DL20VC",@"DL31FS",@"DL30F",@"DL30",@"Y3000F"]];//@"DL30V"銆乊3000FVS
+ [[EZSDK sharedInstance] toEZDeviceListViewWithFilterTypes:@[]];
+}
+
+//娣诲姞璁惧鎴愬姛
+-(void)addDeviceSuccessed{
+ NSLog(@"娣诲姞璁惧鎴愬姛浜�");
+}
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/include/EZSDK/EZSDK.h b/EZDemo/HDLEZDemo/HDLEZDemo/include/EZSDK/EZSDK.h
new file mode 100644
index 0000000..3532d07
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/include/EZSDK/EZSDK.h
@@ -0,0 +1,113 @@
+//
+// EZSDK.h
+// EZSDK
+//
+// Created by 闄堝槈涔� on 2021/1/27.
+//
+
+#import <Foundation/Foundation.h>
+//#import <EZOpenSDKFramework/EZDeviceInfo.h>
+#import <EZOpenSDKFramework/EZDeviceInfo.h>
+
+
+
+@protocol EZSDKDelegate <NSObject>
+
+/*娣诲姞璁惧鎴愬姛
+ @param deviceSerial 璁惧搴忓垪鍙�
+ */
+-(void)addDeviceSuccessed:(NSString*)deviceSerial;
+
+@end
+
+@interface EZSDK : NSObject
+
+@property (nonatomic, weak) id<EZSDKDelegate> delegate;//浠g悊
+
+@property (nonatomic, strong) NSArray *connectTipModels;//闇�瑕侀厤缃戞彁绀虹殑绫诲瀷锛堜笉鑳介�氳繃app绔厤缃戠殑璁惧绫诲瀷锛�
+
+
+///sharedInstance
++ (instancetype)sharedInstance;
+
+/**
+ 鍒濆鍖朣DK
+ 浼犲叆鍥藉唴鐗坘ey 鍜屾捣澶栫増globalAppKey
+ */
+- (BOOL)initLibWithAppKey:(NSString *)appKey globalAppKey:(NSString *)globalAppKey;
+/**
+ 璁剧疆SDK鐨刟ccessToken
+ */
+- (void)setEZAccessToken:(NSString *) accessToken;
+/**
+ 璁剧疆HDLSDK鐨刟ccessToken
+ */
+- (void)setHDlAccessToken:(NSString *)accessToken refreshToken:(NSString *) refreshToken;
+/**
+ 璁剧疆SDK鐨勬渤涓滄帴鍙g殑requestHttpsHost鍜屽钩鍙� 鏍囪瘑锛�1.on+(榛樿) 2.evoyo
+ */
+- (void)setRequestHttpsHostAndPlatform:(NSString *) requestHttpsHost platform:(int)platform homeId:(NSString *)homeId;
+
+/**
+ 鐩存帴璺宠浆鍒拌悿鐭虫憚鍍忓ご鍒楄〃
+ */
+- (void)go2EZvizMonitor;
+
+/**
+ 鐩存帴璺宠浆鍒拌悿鐭虫憚鍍忓ご鍒楄〃(绛涙帀闂ㄩ攣璁惧)
+ @param filterTepes 杩囨护鍨嬪彿鏁扮粍
+ */
+- (void)toEZDeviceListViewWithFilterTypes:(NSArray*)filterTepes;
+
+/**
+ 璺宠浆娣诲姞娣诲姞璁惧
+ */
+- (void)addEzvizMonitor;
+
+/**
+ 璺宠浆娣诲姞娣诲姞璁惧
+ @param deviceType 璁惧spk(鐢ㄤ簬鍖哄垎鏄惁涓洪棬閿�)
+ */
+- (void)addEzvizMonitorWithDeviceType:(NSString *)deviceType;
+
+/**
+ 鏌ョ湅瑙嗛鐩戞帶鐩存挱
+ */
+- (void)Play:(EZDeviceInfo*)deviceInfo;
+
+/// 鎸囧畾搴忓垪鍙� 鏌ョ湅瑙嗛鐩戞帶鐩存挱
+/// @param deviceSerial 搴忓垪鍙�
+- (void)PlayWithDeviceSerial:(NSString *)deviceSerial;
+
+/**
+ 鏍规嵁spk杩涘叆闂ㄩ攣瑙嗛
+ @param deviceSerial 搴忓垪鍙�
+ @param deviceId 璁惧id
+ @param deviceType 璁惧spk(鐢ㄤ簬鍖哄垎鏄惁涓洪棬閿�)
+ */
+-(void)PlayWithDeviceSerial:(NSString *)deviceSerial deviceId:(NSString*)deviceId deviceType:(NSString *)deviceType;
+
+/**
+ 鎵撳紑鎽勫儚澶磋缃〉闈�
+ */
+- (void)setting:(EZDeviceInfo*)deviceInfo;
+/**
+ 鍥炴斁鎾斁鍘嗗彶
+ */
+- (void)playBackVideo:(EZDeviceInfo*)deviceInfo;
+
+////鏌ョ湅鍛婅淇℃伅
+//- (void)goToEZMessagePhotoVC:(EZAlarmInfo*)alarmInfo;
+
+/**涓存椂瀵嗙爜椤�
+ @param deviceId 璁惧id
+ */
+- (void)toTemPassView:(NSString*)deviceId;
+
+/**璁惧鍘嗗彶璁板綍椤�
+ @param deviceId 璁惧id
+ */
+- (void)toDeviceMsgListView:(NSString*)deviceId;
+
+
+@end
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/libEZSDK.a b/EZDemo/HDLEZDemo/HDLEZDemo/libEZSDK.a
new file mode 100644
index 0000000..9d85218
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/libEZSDK.a
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/libHDLLCNVRSDK.a b/EZDemo/HDLEZDemo/HDLEZDemo/libHDLLCNVRSDK.a
new file mode 100644
index 0000000..0325e23
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/libHDLLCNVRSDK.a
Binary files differ
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/main.m b/EZDemo/HDLEZDemo/HDLEZDemo/main.m
new file mode 100644
index 0000000..6e52c87
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/main.m
@@ -0,0 +1,18 @@
+//
+// main.m
+// HDLEZDemo
+//
+// Created by 闄堝惎鎵� on 2023/3/2.
+//
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ NSString * appDelegateClassName;
+ @autoreleasepool {
+ // Setup code that might create autoreleased objects goes here.
+ appDelegateClassName = NSStringFromClass([AppDelegate class]);
+ }
+ return UIApplicationMain(argc, argv, nil, appDelegateClassName);
+}
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/AddDevice.strings b/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/AddDevice.strings
new file mode 100644
index 0000000..f58a2be
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/AddDevice.strings
@@ -0,0 +1,25 @@
+"5rP-JO-eZs.text" = "Searching for device information. Please wait...";
+"8qO-si-Tda.text" = "Network disconnected.";
+"KAV-Sk-wEc.text" = "Password";
+"Qbm-8l-KeG.normalTitle" = "Add";
+"R5v-Qf-L5p.text" = "For dual-brand route, connecting the camera to the Wi-Fi with 5G frequency brand is not allowed.";
+"bPa-tw-WRa.placeholder" = "9-bit serial No. on the device.";
+"hA9-0Y-3Qf.normalTitle" = "Next";
+"jzO-DN-MQp.text" = "Device QR Code";
+"x6F-l5-dhJ.normalTitle" = "Next";
+"xrj-ZU-1Ue.text" = "Network";
+
+"0PQ-gp-JOK.text" = "The Wi-Fi to be connected is as follows:";
+"2fV-EH-7VO.text" = "1";
+"BBf-mw-P8e.text" = "password:";
+"SyB-zd-gzt.text" = "2";
+"bzO-cY-bUs.text" = "SSID:";
+"iaq-GW-DZt.normalTitle" = "Copy Password";
+"hOb-L4-rkc.normalTitle" = "Enter System Setting";
+"hz9-ZE-6rg.text" = "Please connect the phone to the Wi-Fi of device by the following steps";
+"j8t-kq-eaK.placeholder" = "verify code";
+"utk-BE-uLK.text" = "3";
+"RaQ-FQ-QZ1.normalTitle" = "Retry";
+"mDU-NX-CXb.normalTitle" = "Done";
+"b2S-tK-xqv.normalTitle" = "add device";
+"spS-wV-76P.text" = "Adding device,please wait...";
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/EZMain.strings b/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/EZMain.strings
new file mode 100644
index 0000000..39b9b39
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/EZMain.strings
@@ -0,0 +1,51 @@
+
+"0SD-HE-m6y.text" = "9:00";
+"4Eh-hh-84T.normalTitle" = "Intercom";
+"4ol-dw-GX9.normalTitle" = "Update";
+"68c-It-TWh.text" = "00:00";
+"6Za-cr-nzm.title" = "Cancel";
+"6yZ-4A-Vvl.title" = "Delete";
+"8Y3-zX-Cnw.text" = "Device Name";
+"9VU-hP-zCR.normalTitle" = "API D";
+"9VV-np-Xv9.text" = "123456789";
+"AUI-sk-GM6.text" = "PIR Event Occurred";
+"Bu9-Qz-3Ij.normalTitle" = "Video in SD Card";
+"E3a-LC-jG1.normalTitle" = "Cloud Storage";
+"EOh-Lf-fJU.title" = "Item";
+"ESG-x4-J8R.text" = "00:00";
+"EWl-dl-v7z.normalTitle" = "LAN D";
+"F62-D9-UTh.segmentTitles[0]" = "Me";
+"F62-D9-UTh.segmentTitles[1]" = "Share";
+"IqR-oy-XmU.text" = " 00:00";
+"JEB-Q6-XNh.normalTitle" = "HD";
+"Jqc-fA-IF7.normalTitle" = "Add to EZVIZ Group";
+"MZk-cJ-Fkp.normalTitle" = "Video Recorded on Alarm";
+"QVM-WI-RUj.text" = "2015/11/18 19:12:22";
+"SpQ-pQ-wyI.text" = "From: 123456789";
+"TXG-Z3-M8g.title" = "Log Out";
+"UHi-Q3-DiS.text" = "9:00";
+"UlQ-aK-1VP.normalTitle" = "Fluent";
+"WSh-Ao-McO.normalTitle" = "Balance";
+"Yrc-c9-rvb.text" = " 00:00";
+"arc-1g-3CP.text" = "00:00";
+"cQF-0W-PL0.title" = "OK";
+"ckd-hd-wtP.text" = "Updating...";
+"eaB-Su-wjk.title" = "Test";
+"es2-2O-C6T.normalTitle" = "Record";
+"fUI-tR-jyG.normalTitle" = "PTZ";
+"oq1-TQ-afe.text" = "PIR Event";
+"p2R-3f-bRm.normalTitle" = "Internet D";
+"pg3-8C-ucI.text" = "No data.";
+"r1W-d8-Rg7.placeholder" = "Input the device name.";
+"ruu-Hg-3Tx.text" = "00:00";
+"skK-Ar-y6h.normalTitle" = "HD";
+"tHi-Fa-i4d.title" = "Mark as Read";
+"u19-7q-vxu.text" = "No message.";
+"uxM-3S-gu1.normalTitle" = "Capture";
+"wEO-O3-gSJ.normalTitle" = "Picture";
+"xQS-rQ-Xez.normalTitle" = "Video";
+"xdQ-Ec-12V.normalTitle" = "Save";
+"xj6-wT-AiB.text" = "Up to 50 characters are allowed.";
+"xta-Lo-bjB.text" = "From: C2mini";
+"yuu-Ju-MKr.text" = "C2S";
+
diff --git a/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/Localizable.strings b/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/Localizable.strings
new file mode 100644
index 0000000..2099044
--- /dev/null
+++ b/EZDemo/HDLEZDemo/HDLEZDemo/resources/en.lproj/Localizable.strings
@@ -0,0 +1,226 @@
+
+"done"="OK";
+"cancel"="Cancel";
+"retry"="Try Again";
+"alert_title"="Prompt";
+"delete"="Delete";
+"complete"="Completed";
+"push_slider_msg"="Handle the notification by yourself.";
+
+"api_mirror_test"="Image Flipping API Test";
+"api_getting_device_list"="Getting the device list...";
+"api_get_device_list_fail"="Getting device list failed.";
+"api_flip_over"="The device channel image is flipping...";
+"api_flip_over_result"="Result";
+"ad_scan_qr_title"="Scan QR Code";
+"ad_allow_camera"="Allow device to access your camera on Settings-Privacy-Camera on your iPhone.";
+"ad_not_support_scan"="This QR code is not supported. Input manually.";
+"ad_result_title"="Result";
+"ad_adding_msg"="Adding. Please wait...";
+"ad_connect_net"="Connect to Network";
+"ad_add"="Add";
+"ad_restart_title"="Reboot";
+"ad_restart_tip"="Long press Reset on the device for 10 seconds, and wait for about 30 seconds until the device is rebooted.";
+"ad_restart_done"="Rebooted.";
+"ad_get_device_info_msg"="Searching for device information. Please wait...";
+"ad_already_added"="This device is already added.";
+"ad_added_by_others"="This device is already added.";
+"get_info_fail"="Searching for failed. Poor network.";
+"ad_input_manual"="Manual Input";
+
+"ad_result_verify_local_lock"="Please verify the added primary user fingerprint, key or sensor card within 2 minutes. Click the Verified button after verification";
+"ad_verified"="Verified";
+
+"device_camera_list_title"="Device Channel List";
+"device_input_vierify_code"="Input the device verification code.";
+"device_verify_code_wrong"="Incorrect verification code.";
+"device_scan_function_tip"="For iOS 7.0 or lower system, please realize the code scanning function by yourself.";
+"device_upgrade_title"="Upgrade Device ";
+"device_upgrade_success"="Upgraded.";
+"device_upgrading"="Upgrading.";
+"device_modify_name_title"="Edit Device Name";
+"device_quality_high"="HD";
+"device_quality_median"="Balance";
+"device_quality_low"="Fluent";
+"device_quality_super"="UHD";
+"device_play_fail"="Playing failed.";
+"device_input_verify_code"="Input the password of video or picture.";
+"device_verify_code_tip"="Your video is encrypted. Enter the password to view. The initial password is the verification code on the camera label. If there is no verification code, enter <i>ABCDEF</i> (password is case-sensitive).";
+"device_tip_title"="Prompt";
+"device_verify_code_wrong"="Incorrect device password.";
+"device_restart_talk"="Enabling two-way audio. Please wait...";
+"device_save_gallery"="Saved to the albums.";
+"device_analogue_camera"="Analog Channel";
+"device_digital_camera"="Digital Channel";
+"device_lan_device_list_title"="LAN Device List";
+"device_active_device"="Activate Device";
+"device_set_pw_tip"="Set the password with 8 to 16 characters.";
+"device_set_pw"="Set Password";
+"device_pw_empty"="The password is required.";
+"device_pw_length_error"="Invalid password length.";
+"device_active_fail"="Activation failed.";
+"device_login_fail"="Login failed.";
+"device_login_device"="Log in to Device";
+"device_input_account_pw"="Input the user name and password.";
+"device_account"="User Name";
+"device_password"="Password";
+"device_account_pw_empty"="The user name or password is required.";
+"device_lan_preview_title"="Live View via LAN";
+"device_add_device_qr_code"="Device QR Code";
+
+"device_open"="Open";
+"device_open_success"="Success to open the door!";
+"device_please_input_door_password"="Input the unlock password";
+"device_history"="History";
+"device_his_no_more_data"="No more data";
+"device_temp_pass"="Temporary password";
+"device_temp_year"=".";
+"device_temp_month"=".";
+"device_temp_date"=".";
+"device_temp_left"="Left";
+"device_temp_times"="times";
+"device_temp_save"="Save";
+"device_temp_valid_date"="Term of validity";
+"device_temp_valid_begin"="Begin";
+"device_temp_valid_end"="End";
+"device_temp_use_times"="Use times";
+"device_temp_user"="User";
+"device_temp_please_select"="Please select";
+"device_temp_unlimited_times"="Unlimited";
+"device_temp_sure"="Sure";
+"device_temp_cancle"="Cancle";
+"device_temp_please_input"="Please input";
+"device_temp_input_use_count_describe"="Enter an integer from 1 to 100. Null means unlimited times";
+"device_temp_input_pure_number"="Please enter a pure number";
+"device_temp_input_valid_number"="Please enter a number between 1-100";
+"device_temp_unit_year"="Y";
+"device_temp_unit_month"="M";
+"device_temp_unit_date"="D";
+"device_temp_unit_hour"="h";
+"device_temp_unit_minute"="m";
+"device_temp_please_input_user_name"="Please input a user name";
+"device_temp_please_select_begin_time"="Please select the start time";
+"device_temp_please_select_end_time"="Please select the end time";
+"device_temp_please_end_time_should_later"="The end time cannot be earlier than the start time";
+"device_temp_unlimited_use_times"="Unlimited times";
+"device_temp_total"="Total ";
+"device_temp_copied"="Copied";
+"device_temp_long_tap_copy"="Long press to copy";
+"device_temp_sure_to_delete"="Are you sure to delete the temporary password?";
+
+"dmessage_title"="Message";
+"message_read"="Mark as Read";
+"message_deleting"="Deleting. Please wait...";
+"message_count_limit"="Up to 10 messages are allowed.";
+"message_setting"="Marking as read. Please wait...";
+"message_sunday"="Sunday";
+"message_monday"="Monday";
+"message_tuesday"="Tuesday";
+"message_wednesday"="Wednesday";
+"message_thursday"="Thursday";
+"message_friday"="Friday";
+"message_saturday"="Saturday";
+"message_today"="Today";
+"message_from"="From";
+"message_detail"="Details";
+"message_file_search_fail"="Searching for files failed.";
+"message_square_test"="Video Gallery Type Test";
+
+"setting_device_set_title"="Set Device";
+"setting_device_name"="Device Name";
+"setting_device_serial"="Serial No.";
+"setting_device_version"="Current Version";
+"setting_device_new_version"="Latest Version";
+"setting_defense_status"="Privacy Mask Status:";
+"setting_sleep_mode"="Sleepy Mode";
+"setting_home_mode"="At-Home Mode";
+"setting_out_mode"="Outdoor Mode";
+"setting_ignore_code"="Encrypting video or picture is not supported by security control panel.";
+"setting_action_detect"="Motion Detection Alarm";
+"setting_secure_code"="Encrypt Video and Picture";
+"setting_cloud_storage"="Cloud Storage";
+"setting_hardware_decoding" = "Hardware decoding";
+"setting_opration_fail"="Operation failed.";
+"setting_opration_success"="Completed.";
+"setting_switching"="Switching. Please wait...";
+"setting_device_security_check"="Security Authentication";
+"setting_input_code_plz"="Input the device verification code (6 characters on the device label).";
+"wifi_add_device_title"="Step 3, add device.";
+"wifi_connecting_net"="Connecting to Wi-Fi. Please wait.";
+"wifi_register_server"="Register Server";
+"wifi_bind_account"="Bind your account";
+"wifi_already_configed"="The Wi-Fi is configured.";
+"wifi_registering_server"="Registering the server.";
+"wifi_bind_account_result"="Link to your account to finish.";
+"wifi_already_registered_server"="Registered to the EZVIZ platform.";
+"wifi_config_fail"="Setting Wi-Fi failed. Try again or return to check the Wi-Fi password.";
+"wifi_register_fail"="Wi-Fi is configured, but login failed. Check the network and try again.";
+"wifi_bind_fail"="Wi-Fi is configured, but blinding account failed. Try again.";
+"wifi_add_fail"="Adding failed.";
+"wifi_add_success"="Added";
+"wifi_connecting_net"="Connecting to Wi-Fi.";
+"wifi_connect_wifi_title"="Step 2, connect to Wi-Fi.";
+"wifi_prepare_title"="Step 1, prepare for the device.";
+"wifi_device_power_tip"="Wait for about 30 seconds until the device is rebooted after the device is power on.";
+"wifi_device_start_ready"="The device is already started and it is the first time to configure with network.";
+"wifi_config_wifi_ago"="This device is configured with network before.";
+
+"wifi_config_seria_num"="9-digit serial number on the device body";
+"wifi_config_verify_code"="Verification Code";
+"wifi_config_connected"="Connected";
+"wifi_config_select_set_param"="Select \"Set Parameters\"";
+"wifi_config_select_wifi"="Select \"Wi Fi\"";
+"wifi_config_net_work"="Configure Network";
+"wifi_config_name"="Name:";
+"wifi_config_copy_pwd"="Copy Pwd";
+"wifi_config_to_setting"="To Setting";
+"wifi_config_step_three"="Return to the app, wait for the device to connect, and automatically proceed to the next step after success.";
+"wifi_config_tip"="Please connect your phone to your device Wi Fi by following these steps:";
+"wifi_config_step_three_tip"="(Note: If the device WIFI name is not prefixed with \"EZVIZ\", please copy the password and manually modify the password prefix based on the new prefix name and connect. For example, \"SoftAP_XXXXXXX\")";
+"wifi_config_not_connected"="Not connected";
+"wifi_config_step_2_tips"="The Wi Fi information of the devices to be connected is as follows:";
+"wifi_config_step_2_tips"="If you are using a dual frequency router, please do not connect the camera to Wi Fi in the 5G frequency band";
+"wifi_config_step_2_next_step"="Next Step";
+"wifi_config_step_2_net"="Net:";
+"wifi_config_step_2_password"="Pwd:";
+
+"ui_last_update"="Last Updated:";
+"ui_last_update_empty"="Last Updated: No record.";
+"ui_just_now"="Recently";
+"ui_min_ago"="minute(s) ago";
+"ui_hour_ago"="hour(s) ago";
+"ui_day_ago"="day(s) ago";
+"ui_month_ago"="month(s) ago";
+"ui_year_ago"="year(s) ago";
+
+//鏂板
+"device_mine"="Me";
+"device_shared"="Share";
+
+//4.8.3鏂板
+"no_mic_permission" = "No microphone permissions";
+"not_support_talk" = "Equipment does not support intercom";
+
+//ap閰嶇綉鏂板
+"wifi_info_no_wifi_msg" = "please connect Wi-Fi";
+"wifi_info_setting" = "setting";
+"wifi_mode_select_msg" = "select config mode";
+"wifi_mode_ap" = "AP config(blue shining)";
+"wifi_mode_normal" = "normal config(blue red shining)";
+"wifi_mode_wifi_connect" = "connect Wi-Fi of device";
+"wifi_step_two_msg" = "Enter Wi-Fi setting of iPhone,connect Wi-Fi:%@ with password above.";
+"wifi_ap_add_device_title"="adding device";
+"wifi_mode_sound"="sound config(blue red shining)";
+"wifi_mode_line"="line connect";
+
+"璇峰紑鍚畾浣嶆湇鍔�"="Please turn on Location.";
+"瀹氫綅鏈嶅姟鏈紑鍚紝璇疯繘鍏ョ郴缁燂蓟璁剧疆锛�> [闅愮] > [瀹氫綅鏈嶅姟]涓墦寮�寮�鍏筹紝骞跺厑璁镐娇鐢ㄥ畾浣嶆湇鍔�"="Location is off. Please go to [Settings]> [Privacy] > [Location Services] to enable it.";
+"绔嬪嵆寮�鍚�"="Enable now";
+"鏆備笉"="Later";
+
+//2021-01-27 鏂板
+"Devicelist"="Device list";
+"Logout"="Log Out";
+
+//閫氱敤
+"hdl_ez_common_no_data"="No Data";
diff --git a/EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj b/EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj
index f5ace78..52055a1 100644
--- a/EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj
+++ b/EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj
@@ -81,6 +81,8 @@
<BundleResource Include="Resources\hdl_ez_wifi_connect_step1%403x.png" />
<BundleResource Include="Resources\hdl_ez_wifi_connect_step2%402x.png" />
<BundleResource Include="Resources\hdl_ez_wifi_connect_step2%403x.png" />
+ <BundleResource Include="Resources\hdl_ez_add_device_success%403x.png" />
+ <BundleResource Include="Resources\hdl_ez_add_device_success%402x.png" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.ObjCBinding.CSharp.targets" />
</Project>
\ No newline at end of file
diff --git a/EZSDK.IOS/EZSDK.IOS/Library/lib/EZOpenSDKFramework.framework/Info.plist b/EZSDK.IOS/EZSDK.IOS/Library/lib/EZOpenSDKFramework.framework/Info.plist
index 7d15dcc..5a43f71 100644
--- a/EZSDK.IOS/EZSDK.IOS/Library/lib/EZOpenSDKFramework.framework/Info.plist
+++ b/EZSDK.IOS/EZSDK.IOS/Library/lib/EZOpenSDKFramework.framework/Info.plist
Binary files differ
diff --git a/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a b/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
index 8d7f06d..0467cbc 100644
--- a/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
+++ b/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
Binary files differ
diff --git a/EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs b/EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
index 591b381..02f62f0 100644
--- a/EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
+++ b/EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
@@ -25,7 +25,7 @@
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
-[assembly: AssemblyVersion("1.6.2")]
+[assembly: AssemblyVersion("1.6.9")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
diff --git a/EZSDK.IOS/EZSDK.IOS/Resources/hdl_ez_add_device_success@2x.png b/EZSDK.IOS/EZSDK.IOS/Resources/hdl_ez_add_device_success@2x.png
new file mode 100644
index 0000000..ff75690
--- /dev/null
+++ b/EZSDK.IOS/EZSDK.IOS/Resources/hdl_ez_add_device_success@2x.png
Binary files differ
diff --git a/EZSDK.IOS/EZSDK.IOS/Resources/hdl_ez_add_device_success@3x.png b/EZSDK.IOS/EZSDK.IOS/Resources/hdl_ez_add_device_success@3x.png
new file mode 100644
index 0000000..285ac69
--- /dev/null
+++ b/EZSDK.IOS/EZSDK.IOS/Resources/hdl_ez_add_device_success@3x.png
Binary files differ
diff --git a/EZSDK/EZSDK.xcodeproj/project.pbxproj b/EZSDK/EZSDK.xcodeproj/project.pbxproj
index 41e05c3..6961447 100644
--- a/EZSDK/EZSDK.xcodeproj/project.pbxproj
+++ b/EZSDK/EZSDK.xcodeproj/project.pbxproj
@@ -1707,10 +1707,12 @@
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREFIX_HEADER = "$(PROJECT_DIR)/EZSDK/EZ/PrefixHeader.pch";
HEADER_SEARCH_PATHS = "$(inherited)";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.2;
LIBRARY_SEARCH_PATHS = (
"$(PROJECT_DIR)/EZSDK/EZ/Venders/openssl/lib",
"$(PROJECT_DIR)/EZSDK/SDK",
);
+ ONLY_ACTIVE_ARCH = NO;
OTHER_CFLAGS = "-mfpu=neon";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1735,10 +1737,12 @@
GCC_NO_COMMON_BLOCKS = YES;
GCC_PREFIX_HEADER = "$(PROJECT_DIR)/EZSDK/EZ/PrefixHeader.pch";
HEADER_SEARCH_PATHS = "$(inherited)";
+ IPHONEOS_DEPLOYMENT_TARGET = 12.2;
LIBRARY_SEARCH_PATHS = (
"$(PROJECT_DIR)/EZSDK/EZ/Venders/openssl/lib",
"$(PROJECT_DIR)/EZSDK/SDK",
);
+ ONLY_ACTIVE_ARCH = NO;
OTHER_CFLAGS = "-mfpu=neon";
OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)";
diff --git a/EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme b/EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme
index 0f9297c..8643394 100644
--- a/EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme
+++ b/EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme
@@ -31,7 +31,7 @@
</Testables>
</TestAction>
<LaunchAction
- buildConfiguration = "Debug"
+ buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
diff --git a/EZSDK/EZSDK/EZ/Global/EZHttpUtil.m b/EZSDK/EZSDK/EZ/Global/EZHttpUtil.m
index 71d32d8..e258090 100644
--- a/EZSDK/EZSDK/EZ/Global/EZHttpUtil.m
+++ b/EZSDK/EZSDK/EZ/Global/EZHttpUtil.m
@@ -35,7 +35,7 @@
#define SECRET_KEY @"WeJ8TY88vbakCcnvH8G1tDUqzLWY8yss"
-#define TIME_OUT 15.0f
+#define TIME_OUT 30.0f
@implementation EZHttpUtil
@@ -58,7 +58,7 @@
* @param block 鍥炶皟block
*/
- (void)getChildToken:(void (^)(NSString *accessToken))block{
-
+
//2.璁剧疆璇锋眰鍙傛暟
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
[parameters setValue: [NSString stringWithFormat:@"%d", [GlobalKit shareKit].hdlPlatform] forKey:@"platform"];
@@ -134,6 +134,21 @@
if ([EZSDK sharedInstance].delegate&&[[EZSDK sharedInstance].delegate respondsToSelector:@selector(addDeviceSuccessed:)]) {
// HDLEZLog(@"娣诲姞璁惧璁惧鎴愬姛鍥炶皟:%@",parameters[@"deviceSerial"]);
[[EZSDK sharedInstance].delegate addDeviceSuccessed:parameters[@"deviceSerial"]];
+//
+// //璁剧疆璁惧鍘绘帀楠岃瘉鐮�
+// [EZOPENSDK setDeviceEncryptStatus:deviceSerial
+// verifyCode:verifyCode
+// encrypt:NO
+// completion:^(NSError *error) {
+// if (error)
+// {
+//
+// }
+// else
+// {
+// }
+//
+// }];
}
}
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m
index fa4f1e7..e1edb28 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m
@@ -74,6 +74,13 @@
[self.doneBtn setTitle:HDLEZLocallizedString(@"complete") forState:UIControlStateNormal];
[self.retryBtn setTitle:HDLEZLocallizedString(@"retry") forState:UIControlStateNormal];
self.msgLabel.text=HDLEZLocallizedString(@"ad_adding_msg");
+
+
+ //閲嶈鎴愬姛鍥�
+ [self.successImageView mas_updateConstraints:^(MASConstraintMaker *make) {
+ make.height.width.mas_equalTo(80);
+ }];
+ self.successImageView.image=[UIImage imageNamed:@"hdl_ez_add_device_success"];
}
#pragma mark - actions
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m
index 0dd3e3d..cf24575 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m
@@ -69,7 +69,7 @@
- (void) initSubviews
{
self.processingIndicator.hidden = YES;
-
+
// self.devicWifiName = [NSString stringWithFormat:@"EZVIZ_%@",[GlobalKit shareKit].deviceSerialNo];
self.devicWifiName = [NSString stringWithFormat:@"%@_%@",[GlobalKit shareKit].WiFiConfigPrefix,[GlobalKit shareKit].deviceSerialNo];
self.wifiNameLabel.text = self.devicWifiName;
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m
index 1648a23..94e8e17 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m
@@ -32,7 +32,7 @@
- (void)dealloc
{
-
+
}
- (void)viewDidLoad {
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m
index a3ebc31..aaa61ed 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m
@@ -63,6 +63,9 @@
self.actionButton.hidden = YES;
[self doSearchDevice];
+
+ //闅愯棌鐘舵�佸浘
+ self.resultImageView.hidden=YES;
}
- (void)didReceiveMemoryWarning {
@@ -216,7 +219,7 @@
deviceType:[GlobalKit shareKit].deviceModel
completion:^(EZProbeDeviceInfo *deviceInfo, NSError *error) {
NSLog(@"deviceInfo = %@, error = %@", deviceInfo, error);
- self.resultBackgroudImageView.hidden = NO;
+// self.resultBackgroudImageView.hidden = NO;
self.resultImageView.image = [UIImage imageNamed:@"device_default"];
self.resultLabel.text = [GlobalKit shareKit].deviceSerialNo;
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
index 2167f96..7835c22 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
@@ -94,6 +94,8 @@
@property (nonatomic, copy) NSString *streamToken;
+@property (nonatomic, strong) UIView *doorPlayerView;//闂ㄩ攣鎾斁view
+
@end
@implementation EZLivePlayViewController
@@ -240,6 +242,21 @@
// }
}
+/*娣诲姞闂ㄩ攣鎾斁view
+ */
+-(UIView*)doorPlayerView{
+ if (!_doorPlayerView) {
+ _doorPlayerView=[[UIView alloc] init];
+ [_playerView addSubview:_doorPlayerView];
+ [_doorPlayerView mas_makeConstraints:^(MASConstraintMaker *make) {
+ make.centerX.equalTo(_playerView.mas_centerX);
+ make.top.bottom.equalTo(_playerView);
+ make.width.mas_equalTo(_doorPlayerView.mas_height).multipliedBy(1);
+ }];
+ }
+ return _doorPlayerView;
+}
+
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.navigationController.navigationBar.hidden = NO;//2021-02-01
@@ -288,11 +305,15 @@
/*鑾峰彇璁惧淇℃伅
*/
-(void)getDeviceInfo{
+ __weak __typeof(self)weakSelf = self;
//鑾峰彇璁惧淇℃伅
[EZOpenSDK getDeviceInfo:self.deviceSerial completion:^(EZDeviceInfo *deviceInfo, NSError *error) {
if(error)
{
- NSLog(@"EZ 鏌ヨ璁惧淇℃伅澶辫触");
+ NSLog(@"EZ 鏌ヨ璁惧淇℃伅澶辫触:%@",error);
+ [weakSelf.view makeToast:error.userInfo[@"NSLocalizedDescription"]
+ duration:1.5
+ position:@"center"];
return;
}
if (deviceInfo) {
@@ -372,7 +393,11 @@
[_player setPlayVerifyCode:verifyCode];
[_talkPlayer setPlayVerifyCode:verifyCode];
}
- [_player setPlayerView:_playerView];
+// if ([GlobalKit shareKit].deviceType==HDLEZDeviceType_Door) {//涓洪棬閿佹椂
+ [_player setPlayerView:self.doorPlayerView];
+// }else{
+// [_player setPlayerView:_playerView];
+// }
BOOL hdStatus = [[NSUserDefaults standardUserDefaults] boolForKey:[NSString stringWithFormat:@"EZVideoPlayHardDecodingStatus_%@", self.deviceInfo.deviceSerial]];
[_player setHDPriority:hdStatus];
[_player startRealPlay];
@@ -450,7 +475,7 @@
__weak __typeof(self)weakSelf = self;
[[EZHttpUtil sharedManager] authLockByHDL:content deviceId:self.deviceId completion:^(ResponseData * _Nonnull responseData) {
if (responseData.success) {
- [[EZHttpUtil sharedManager] remoteOpenByHDL:self.streamToken deviceId:self.deviceId completion:^(ResponseData * _Nonnull responseData) {
+ [[EZHttpUtil sharedManager] remoteOpenByHDL:weakSelf.streamToken deviceId:weakSelf.deviceId completion:^(ResponseData * _Nonnull responseData) {
[MBProgressHUD hideHUDForView:weakSelf.view animated:YES];
if (responseData.success) {
[weakSelf.view makeToast:HDLEZLocallizedString(@"device_open_success")
@@ -581,21 +606,25 @@
}
-///**
-// * 鏀跺埌鐨勭敾闈㈤暱瀹藉��
-// *
-// * @param player 鎾斁鍣ㄥ璞�
-// * @param height 楂樺害
-// * @param width 瀹藉害
-// */
-//- (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width{
+/**
+ * 鏀跺埌鐨勭敾闈㈤暱瀹藉��
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param height 楂樺害
+ * @param width 瀹藉害
+ */
+- (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width{
// HDLEZLog(@"鐢婚潰闀匡細%ld锛屽锛�%ld",(long)height,(long)width);
-// CGFloat playerVH=self.playerView.frame.size.height;
-// CGFloat playerVW=playerVH*(width/height);
-// self.playerView.frame=CGRectMake(0, 0, 50, 50);
-// HDLEZLog(@"playerView鐨刦rame锛�%f",self.playerView.frame.size.width);
-//
-//}
+ CGFloat playerVH=self.playerView.frame.size.height;
+// HDLEZLog(@"楂橈細%ld",(long)playerVH);
+ CGFloat ratio=((CGFloat)width)/((CGFloat)height);
+// HDLEZLog(@"姣斾緥锛�%f",ratio);
+ CGFloat playerVW=playerVH*ratio;
+// HDLEZLog(@"瀹斤細%ld",(long)playerVW);
+ [self.doorPlayerView mas_updateConstraints:^(MASConstraintMaker *make) {
+ make.width.mas_equalTo(_doorPlayerView.mas_height).multipliedBy(ratio);
+ }];
+}
- (void)player:(EZPlayer *)player didPlayFailed:(NSError *)error
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m
index 90c2019..99162d9 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m
@@ -591,14 +591,21 @@
self.animationImageView.animationImages = nil;
//璋冩暣鍥剧墖楂樺害
- self.animationImageView.image = [UIImage imageNamed:@"addDevice_success"];//鎴愬姛鏍囩ず鍥剧墖
-
- [self.animationImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
- make.top.mas_equalTo(@90);
- make.leading.trailing.mas_equalTo(@0);
- make.height.mas_equalTo(@(185 * [UIScreen mainScreen].bounds.size.width/320.0f));
+// self.animationImageView.image = [UIImage imageNamed:@"addDevice_success"];//鎴愬姛鏍囩ず鍥剧墖
+ self.animationImageView.image = [UIImage imageNamed:@"hdl_ez_add_device_success"];//鎴愬姛鏍囩ず鍥剧墖
+ [self.animationImageView mas_updateConstraints:^(MASConstraintMaker *make) {
+ make.top.mas_equalTo(@100);
+ make.leading.mas_equalTo(([UIScreen mainScreen].bounds.size.width-80)/2);
+ make.trailing.mas_equalTo(-([UIScreen mainScreen].bounds.size.width-80)/2);
+ make.height.mas_equalTo(80);
}];
+// [self.animationImageView mas_remakeConstraints:^(MASConstraintMaker *make) {
+// make.top.mas_equalTo(@90);
+// make.leading.trailing.mas_equalTo(@0);
+// make.height.mas_equalTo(@(185 * [UIScreen mainScreen].bounds.size.width/320.0f));
+// }];
+
[self.view addSubview:self.completionLabel];
[self.completionLabel mas_makeConstraints:^(MASConstraintMaker *make) {
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiTipsViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiTipsViewController.m
index 90b097b..8b10e59 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiTipsViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiTipsViewController.m
@@ -46,9 +46,9 @@
make.leading.mas_equalTo(@10);
make.trailing.mas_equalTo(@-10);
if([UIScreen mainScreen].bounds.size.height == 480.0){
- make.top.mas_equalTo(@10);
+ make.top.mas_equalTo(10+50);
}else{
- make.top.mas_equalTo(@99);
+ make.top.mas_equalTo(99+50);
}
make.height.mas_equalTo(@50);
}];
@@ -56,8 +56,9 @@
[self.view addSubview:self.deviceImageView];
[self.deviceImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(self.tipsLabel.mas_bottom).offset(19);
- make.width.mas_equalTo(@174);
- make.height.mas_equalTo(@199);
+// make.width.mas_equalTo(@174);
+// make.height.mas_equalTo(@199);
+ make.width.height.mas_equalTo(0);
make.centerX.mas_equalTo(self.view.mas_centerX);
}];
@@ -78,6 +79,8 @@
}];
[self checkDevice];
+
+ self.deviceImageView.hidden=YES;
}
- (void)didReceiveMemoryWarning {
@@ -104,7 +107,7 @@
[self.exceptionButton setTitle:NSLocalizedString(@"wifi_config_wifi_ago", @"杩欏彴璁惧浠ュ墠閰嶈繃缃戠粶") forState:UIControlStateNormal];
NSMutableAttributedString *attributeStr = [[NSMutableAttributedString alloc] initWithString:self.tipsLabel.text];
- [attributeStr addAttributes:@{NSForegroundColorAttributeName:[UIColor dd_hexStringToColor:@"0xff4000"],NSFontAttributeName:[UIFont boldSystemFontOfSize:16.0f]} range:[self.tipsLabel.text rangeOfString:@"30"]];
+ [attributeStr addAttributes:@{NSForegroundColorAttributeName:[UIColor dd_hexStringToColor:@"0xff4000"],NSFontAttributeName:[UIFont boldSystemFontOfSize:18.0f]} range:[self.tipsLabel.text rangeOfString:@"30"]];
self.tipsLabel.attributedText = attributeStr;
}
@@ -201,9 +204,9 @@
{
_tipsLabel = [[UILabel alloc] initWithFrame:CGRectZero];
_tipsLabel.backgroundColor = [UIColor clearColor];
- _tipsLabel.font = [UIFont systemFontOfSize:16.0f];
+ _tipsLabel.font = [UIFont systemFontOfSize:18.0f];
_tipsLabel.textColor = [UIColor dd_hexStringToColor:@"0x333333"];
- _tipsLabel.numberOfLines = 2;
+ _tipsLabel.numberOfLines = 3;
_tipsLabel.textAlignment = NSTextAlignmentCenter;
}
return _tipsLabel;
diff --git a/EZSDK/EZSDK/EZ/Venders/SDWebImage/SDWebImageDownloader.m b/EZSDK/EZSDK/EZ/Venders/SDWebImage/SDWebImageDownloader.m
index 1fdcfc9..f03f829 100644
--- a/EZSDK/EZSDK/EZ/Venders/SDWebImage/SDWebImageDownloader.m
+++ b/EZSDK/EZSDK/EZ/Venders/SDWebImage/SDWebImageDownloader.m
@@ -73,7 +73,7 @@
_HTTPHeaders = [@{@"Accept": @"image/*;q=0.8"} mutableCopy];
#endif
_barrierQueue = dispatch_queue_create("com.hackemist.SDWebImageDownloaderBarrierQueue", DISPATCH_QUEUE_CONCURRENT);
- _downloadTimeout = 15.0;
+ _downloadTimeout = 30.0;
}
return self;
}
@@ -119,7 +119,7 @@
[self addProgressCallback:progressBlock completedBlock:completedBlock forURL:url createCallback:^{
NSTimeInterval timeoutInterval = wself.downloadTimeout;
if (timeoutInterval == 0.0) {
- timeoutInterval = 15.0;
+ timeoutInterval = 30.0;
}
// In order to prevent from potential duplicate caching (NSURLCache + SDImageCache) we disable the cache for image requests if told otherwise
diff --git a/EZSDK/EZSDK/EZSDK.m b/EZSDK/EZSDK/EZSDK.m
index 91fa7ce..ae54994 100644
--- a/EZSDK/EZSDK/EZSDK.m
+++ b/EZSDK/EZSDK/EZSDK.m
@@ -51,11 +51,11 @@
if (!LanguageIsChinese) {
//娴峰鐗�
isHavelibInit = [EZGlobalSDK initLibWithAppKey:globalAppKey];
- NSLog(@"娴峰鐗坘ey--%@",globalAppKey);
+ HDLEZLog(@"娴峰鐗坘ey--%@",globalAppKey);
}else{
isHavelibInit = [EZOpenSDK initLibWithAppKey:appKey];
[[GlobalKit shareKit] setHdlAppKey:appKey];
- NSLog(@"鍥藉唴鐗坘ey--%@", appKey);
+ HDLEZLog(@"鍥藉唴鐗坘ey--%@", appKey);
}
[EZHCNetDeviceSDK initSDK];
[EZOPENSDK enableP2P:YES];
@@ -229,6 +229,9 @@
@param deviceType 璁惧spk(鐢ㄤ簬鍖哄垎鏄惁涓洪棬閿�)
*/
-(void)PlayWithDeviceSerial:(NSString *)deviceSerial deviceId:(NSString*)deviceId deviceType:(NSString *)deviceType{
+ if ([[self getCurrentVC] isKindOfClass:[EZLivePlayViewController class]]) {//闃叉閲嶅杩涘叆
+ return;
+ }
[GlobalKit shareKit].deviceType=[deviceType isEqualToString:HDLEZ_DOOR_SPK] ? HDLEZDeviceType_Door : HDLEZDeviceType_Default;
UIStoryboard *ezMainStoryBoard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
EZLivePlayViewController *vc = [ezMainStoryBoard instantiateViewControllerWithIdentifier:@"EZLivePlayViewController"];
--
Gitblit v1.8.0