From 67dc7baa028cb02497aa49e58ebabf83c327e699 Mon Sep 17 00:00:00 2001 From: linshujie Date: Mon, 15 Jun 2026 18:38:15 +0800 Subject: [PATCH] =?UTF-8?q?-=20MQTT=EF=BC=88=E4=B8=8A=E6=8A=A5=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E3=80=81=E8=AE=A2=E9=98=85=E6=88=90=E5=91=98=E3=80=81?= =?UTF-8?q?=E6=94=B6=E5=88=B0=E6=B6=88=E6=81=AF=E6=9B=B4=E6=96=B0=E6=88=90?= =?UTF-8?q?=E5=91=98=E5=88=97=E8=A1=A8=E5=AF=B9=E5=BA=94=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Podfile | 1 + Podfile.lock | 12 +- Pods/CocoaMQTT/LICENSE | 2 + Pods/CocoaMQTT/README.md | 350 + Pods/CocoaMQTT/Source/CocoaMQTT.swift | 842 + Pods/CocoaMQTT/Source/CocoaMQTT5.swift | 903 + Pods/CocoaMQTT/Source/CocoaMQTT5Message.swift | 155 + Pods/CocoaMQTT/Source/CocoaMQTTDeliver.swift | 353 + Pods/CocoaMQTT/Source/CocoaMQTTLogger.swift | 71 + Pods/CocoaMQTT/Source/CocoaMQTTMessage.swift | 66 + Pods/CocoaMQTT/Source/CocoaMQTTProperty.swift | 189 + Pods/CocoaMQTT/Source/CocoaMQTTReader.swift | 220 + .../Source/CocoaMQTTReasonCode.swift | 141 + Pods/CocoaMQTT/Source/CocoaMQTTSocket.swift | 136 + Pods/CocoaMQTT/Source/CocoaMQTTStorage.swift | 161 + Pods/CocoaMQTT/Source/CocoaMQTTTimer.swift | 110 + Pods/CocoaMQTT/Source/CocoaMQTTTypes.swift | 166 + Pods/CocoaMQTT/Source/Frame.swift | 215 + Pods/CocoaMQTT/Source/FrameAuth.swift | 87 + Pods/CocoaMQTT/Source/FrameConnAck.swift | 110 + Pods/CocoaMQTT/Source/FrameConnect.swift | 288 + Pods/CocoaMQTT/Source/FrameDisconnect.swift | 128 + Pods/CocoaMQTT/Source/FramePingReq.swift | 54 + Pods/CocoaMQTT/Source/FramePingResp.swift | 68 + Pods/CocoaMQTT/Source/FramePubAck.swift | 129 + Pods/CocoaMQTT/Source/FramePubComp.swift | 127 + Pods/CocoaMQTT/Source/FramePubRec.swift | 125 + Pods/CocoaMQTT/Source/FramePubRel.swift | 120 + Pods/CocoaMQTT/Source/FramePublish.swift | 237 + Pods/CocoaMQTT/Source/FrameSubAck.swift | 163 + Pods/CocoaMQTT/Source/FrameSubscribe.swift | 174 + Pods/CocoaMQTT/Source/FrameUnsubAck.swift | 117 + Pods/CocoaMQTT/Source/FrameUnsubscribe.swift | 139 + .../CocoaMQTT/Source/MqttAuthProperties.swift | 44 + .../Source/MqttConnectProperties.swift | 80 + Pods/CocoaMQTT/Source/MqttDecodeConnAck.swift | 237 + Pods/CocoaMQTT/Source/MqttDecodePubAck.swift | 101 + Pods/CocoaMQTT/Source/MqttDecodePubComp.swift | 101 + Pods/CocoaMQTT/Source/MqttDecodePubRec.swift | 100 + Pods/CocoaMQTT/Source/MqttDecodePubRel.swift | 101 + Pods/CocoaMQTT/Source/MqttDecodePublish.swift | 171 + Pods/CocoaMQTT/Source/MqttDecodeSubAck.swift | 100 + .../CocoaMQTT/Source/MqttDecodeUnsubAck.swift | 96 + .../Source/MqttPublishProperties.swift | 93 + Pods/CocoaMQTT/Source/MqttSubscription.swift | 76 + .../Source/ThreadSafeDictionary.swift | 78 + .../Source/utilities/ConcurrentAtomic.swift | 73 + Pods/Manifest.lock | 12 +- Pods/MqttCocoaAsyncSocket/LICENSE.txt | 35 + Pods/MqttCocoaAsyncSocket/README.markdown | 121 + .../Source/GCD/MGCDAsyncSocket.h | 1226 + .../Source/GCD/MGCDAsyncSocket.m | 8529 ++++++ .../Source/GCD/MGCDAsyncUdpSocket.h | 1036 + .../Source/GCD/MGCDAsyncUdpSocket.m | 5632 ++++ Pods/Pods.xcodeproj/project.pbxproj | 24550 ++++++++-------- .../xcschemes/CocoaMQTT.xcscheme | 58 + .../xcschemes/MqttCocoaAsyncSocket.xcscheme | 58 + .../xcschemes/xcschememanagement.plist | 10 + .../CocoaMQTT/CocoaMQTT-Info.plist | 26 + .../CocoaMQTT/CocoaMQTT-dummy.m | 5 + .../CocoaMQTT/CocoaMQTT-prefix.pch | 12 + .../CocoaMQTT/CocoaMQTT-umbrella.h | 16 + .../CocoaMQTT/CocoaMQTT.debug.xcconfig | 16 + .../CocoaMQTT/CocoaMQTT.modulemap | 6 + .../CocoaMQTT/CocoaMQTT.release.xcconfig | 16 + .../MqttCocoaAsyncSocket-Info.plist | 26 + .../MqttCocoaAsyncSocket-dummy.m | 5 + .../MqttCocoaAsyncSocket-prefix.pch | 12 + .../MqttCocoaAsyncSocket-umbrella.h | 18 + .../MqttCocoaAsyncSocket.debug.xcconfig | 13 + .../MqttCocoaAsyncSocket.modulemap | 6 + .../MqttCocoaAsyncSocket.release.xcconfig | 13 + ...ds-QuickLocation-acknowledgements.markdown | 16 + .../Pods-QuickLocation-acknowledgements.plist | 28 + ...on-frameworks-Debug-input-files.xcfilelist | 2 + ...n-frameworks-Debug-output-files.xcfilelist | 2 + ...-frameworks-Release-input-files.xcfilelist | 2 + ...frameworks-Release-output-files.xcfilelist | 2 + .../Pods-QuickLocation-frameworks.sh | 4 + .../Pods-QuickLocation.debug.xcconfig | 8 +- .../Pods-QuickLocation.release.xcconfig | 8 +- QuickLocation.xcodeproj/project.pbxproj | 27 + .../UserInterfaceState.xcuserstate | Bin 1110602 -> 1157933 bytes .../Common/x.imageset/Contents.json | 22 + .../Common/x.imageset/Group_1572@2x.png | Bin 0 -> 712 bytes .../Common/x.imageset/Group_1572@3x.png | Bin 0 -> 1068 bytes .../interaction_header.imageset/Contents.json | 22 + .../interaction_header@2x.png | Bin 0 -> 2247 bytes .../interaction_header@3x.png | Bin 0 -> 6952 bytes .../Home/navigate.imageset/Contents.json | 22 + .../Home/navigate.imageset/Group_1951@2x.png | Bin 0 -> 2214 bytes .../Home/navigate.imageset/Group_1951@3x.png | Bin 0 -> 3683 bytes .../Home/share.imageset/Contents.json | 22 + .../Home/share.imageset/Group_1947@2x.png | Bin 0 -> 1689 bytes .../Home/share.imageset/Group_1947@3x.png | Bin 0 -> 2771 bytes .../Main/Tabbar/MainTabBarController.swift | 5 + QuickLocation/Manager/MQTT/MQTTService.swift | 257 + QuickLocation/Model/GroupModel.swift | 2 + QuickLocation/QuickLocation-Bridging-Header.h | 2 + .../Section/Group/GroupInfo/GroupInfoVC.swift | 2 +- .../Group/GroupInfo/GroupInfoView.swift | 92 + .../Section/Home/GroupMemberView.swift | 60 +- QuickLocation/Section/Home/HomeView.swift | 104 +- .../Section/Home/HomeViewController.swift | 234 +- .../Section/Home/HomeViewModel.swift | 39 +- .../Section/Home/InteractionView.swift | 214 + .../Section/Home/QuickMessageView.swift | 96 + .../Section/Launch/LaunchViewController.swift | 1 + QuickLocation/Section/Map/CircleMember.swift | 2 + .../Section/Map/MemberAnnotationView.swift | 30 +- .../TTGTagCollectionView-Bridging-Header.h | 19 + .../TTGTagCollectionView.h | 112 + .../TTGTagCollectionView.m | 490 + .../UIKit/TTGTagCollectionView/TTGTextTag.h | 106 + .../UIKit/TTGTagCollectionView/TTGTextTag.m | 123 + .../TTGTextTagAttributedStringContent.h | 29 + .../TTGTextTagAttributedStringContent.m | 48 + .../TTGTextTagCollectionView.h | 124 + .../TTGTextTagCollectionView.m | 639 + .../TTGTagCollectionView/TTGTextTagContent.h | 23 + .../TTGTagCollectionView/TTGTextTagContent.m | 22 + .../TTGTextTagStringContent.h | 39 + .../TTGTextTagStringContent.m | 80 + .../TTGTagCollectionView/TTGTextTagStyle.h | 65 + .../TTGTagCollectionView/TTGTextTagStyle.m | 84 + 125 files changed, 40365 insertions(+), 12032 deletions(-) create mode 100644 Pods/CocoaMQTT/LICENSE create mode 100644 Pods/CocoaMQTT/README.md create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTT.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTT5.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTT5Message.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTDeliver.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTLogger.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTMessage.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTProperty.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTReader.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTReasonCode.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTSocket.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTStorage.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTTimer.swift create mode 100644 Pods/CocoaMQTT/Source/CocoaMQTTTypes.swift create mode 100644 Pods/CocoaMQTT/Source/Frame.swift create mode 100644 Pods/CocoaMQTT/Source/FrameAuth.swift create mode 100644 Pods/CocoaMQTT/Source/FrameConnAck.swift create mode 100644 Pods/CocoaMQTT/Source/FrameConnect.swift create mode 100644 Pods/CocoaMQTT/Source/FrameDisconnect.swift create mode 100644 Pods/CocoaMQTT/Source/FramePingReq.swift create mode 100644 Pods/CocoaMQTT/Source/FramePingResp.swift create mode 100644 Pods/CocoaMQTT/Source/FramePubAck.swift create mode 100644 Pods/CocoaMQTT/Source/FramePubComp.swift create mode 100644 Pods/CocoaMQTT/Source/FramePubRec.swift create mode 100644 Pods/CocoaMQTT/Source/FramePubRel.swift create mode 100644 Pods/CocoaMQTT/Source/FramePublish.swift create mode 100644 Pods/CocoaMQTT/Source/FrameSubAck.swift create mode 100644 Pods/CocoaMQTT/Source/FrameSubscribe.swift create mode 100644 Pods/CocoaMQTT/Source/FrameUnsubAck.swift create mode 100644 Pods/CocoaMQTT/Source/FrameUnsubscribe.swift create mode 100644 Pods/CocoaMQTT/Source/MqttAuthProperties.swift create mode 100644 Pods/CocoaMQTT/Source/MqttConnectProperties.swift create mode 100644 Pods/CocoaMQTT/Source/MqttDecodeConnAck.swift create mode 100644 Pods/CocoaMQTT/Source/MqttDecodePubAck.swift create mode 100644 Pods/CocoaMQTT/Source/MqttDecodePubComp.swift create mode 100644 Pods/CocoaMQTT/Source/MqttDecodePubRec.swift create mode 100644 Pods/CocoaMQTT/Source/MqttDecodePubRel.swift create mode 100644 Pods/CocoaMQTT/Source/MqttDecodePublish.swift create mode 100644 Pods/CocoaMQTT/Source/MqttDecodeSubAck.swift create mode 100644 Pods/CocoaMQTT/Source/MqttDecodeUnsubAck.swift create mode 100644 Pods/CocoaMQTT/Source/MqttPublishProperties.swift create mode 100644 Pods/CocoaMQTT/Source/MqttSubscription.swift create mode 100644 Pods/CocoaMQTT/Source/ThreadSafeDictionary.swift create mode 100644 Pods/CocoaMQTT/Source/utilities/ConcurrentAtomic.swift create mode 100644 Pods/MqttCocoaAsyncSocket/LICENSE.txt create mode 100644 Pods/MqttCocoaAsyncSocket/README.markdown create mode 100644 Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncSocket.h create mode 100755 Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncSocket.m create mode 100644 Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncUdpSocket.h create mode 100755 Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncUdpSocket.m create mode 100644 Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/CocoaMQTT.xcscheme create mode 100644 Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/MqttCocoaAsyncSocket.xcscheme create mode 100644 Pods/Target Support Files/CocoaMQTT/CocoaMQTT-Info.plist create mode 100644 Pods/Target Support Files/CocoaMQTT/CocoaMQTT-dummy.m create mode 100644 Pods/Target Support Files/CocoaMQTT/CocoaMQTT-prefix.pch create mode 100644 Pods/Target Support Files/CocoaMQTT/CocoaMQTT-umbrella.h create mode 100644 Pods/Target Support Files/CocoaMQTT/CocoaMQTT.debug.xcconfig create mode 100644 Pods/Target Support Files/CocoaMQTT/CocoaMQTT.modulemap create mode 100644 Pods/Target Support Files/CocoaMQTT/CocoaMQTT.release.xcconfig create mode 100644 Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-Info.plist create mode 100644 Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-dummy.m create mode 100644 Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-prefix.pch create mode 100644 Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-umbrella.h create mode 100644 Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.debug.xcconfig create mode 100644 Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.modulemap create mode 100644 Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.release.xcconfig create mode 100644 QuickLocation/Assets.xcassets/Common/x.imageset/Contents.json create mode 100644 QuickLocation/Assets.xcassets/Common/x.imageset/Group_1572@2x.png create mode 100644 QuickLocation/Assets.xcassets/Common/x.imageset/Group_1572@3x.png create mode 100644 QuickLocation/Assets.xcassets/Home/interaction_header.imageset/Contents.json create mode 100644 QuickLocation/Assets.xcassets/Home/interaction_header.imageset/interaction_header@2x.png create mode 100644 QuickLocation/Assets.xcassets/Home/interaction_header.imageset/interaction_header@3x.png create mode 100644 QuickLocation/Assets.xcassets/Home/navigate.imageset/Contents.json create mode 100644 QuickLocation/Assets.xcassets/Home/navigate.imageset/Group_1951@2x.png create mode 100644 QuickLocation/Assets.xcassets/Home/navigate.imageset/Group_1951@3x.png create mode 100644 QuickLocation/Assets.xcassets/Home/share.imageset/Contents.json create mode 100644 QuickLocation/Assets.xcassets/Home/share.imageset/Group_1947@2x.png create mode 100644 QuickLocation/Assets.xcassets/Home/share.imageset/Group_1947@3x.png create mode 100644 QuickLocation/Manager/MQTT/MQTTService.swift create mode 100644 QuickLocation/Section/Home/InteractionView.swift create mode 100644 QuickLocation/Section/Home/QuickMessageView.swift create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView-Bridging-Header.h create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView.h create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView.m create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTag.h create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTag.m create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagAttributedStringContent.h create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagAttributedStringContent.m create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagCollectionView.h create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagCollectionView.m create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagContent.h create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagContent.m create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStringContent.h create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStringContent.m create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStyle.h create mode 100644 QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStyle.m diff --git a/Podfile b/Podfile index 4b65d00..3888901 100644 --- a/Podfile +++ b/Podfile @@ -50,6 +50,7 @@ target 'QuickLocation' do #第三方SDk pod 'GYSDK' #个推一键登录 pod 'OpenIMSDK' #OpenIM + pod 'CocoaMQTT' #MQTT #支付宝 pod 'AlipaySDK-iOS' diff --git a/Podfile.lock b/Podfile.lock index b5bfe45..75c9e6a 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -11,6 +11,10 @@ PODS: - CocoaLumberjack/Core (3.9.1) - CocoaLumberjack/Swift (3.9.1): - CocoaLumberjack/Core + - CocoaMQTT (2.2.5): + - CocoaMQTT/Core (= 2.2.5) + - CocoaMQTT/Core (2.2.5): + - MqttCocoaAsyncSocket (~> 1.0.8) - Differentiator (5.0.0) - GTCommonSDK (3.2.3.0): - ZXSDK @@ -89,6 +93,7 @@ PODS: - Moya/Core (= 15.0.0) - Moya/Core (15.0.0): - Alamofire (~> 5.0) + - MqttCocoaAsyncSocket (1.0.8) - ObjectMapper (4.4.2) - "OpenIMSDK (3.8.3+hotfix.3.1)": - MJExtension @@ -174,6 +179,7 @@ DEPENDENCIES: - AMapLocation - AMapSearch - CocoaLumberjack/Swift + - CocoaMQTT - GYSDK - HXPHPicker - IQKeyboardManagerSwift @@ -215,6 +221,7 @@ SPEC REPOS: - AMapLocation - AMapSearch - CocoaLumberjack + - CocoaMQTT - Differentiator - GTCommonSDK - GYSDK @@ -236,6 +243,7 @@ SPEC REPOS: - MJExtension - MJRefresh - Moya + - MqttCocoaAsyncSocket - ObjectMapper - OpenIMSDK - OpenIMSDKCore @@ -277,6 +285,7 @@ SPEC CHECKSUMS: AMapLocation: 6e44f50b044dc54c6b3dcb1dee5ffd6de2689e41 AMapSearch: 29224a399b56b17da1540e4312fc4d9dc37342bb CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6 + CocoaMQTT: 1e2fa493d57045d66fb1eba2bb5ffb8d77039c60 Differentiator: e8497ceab83c1b10ca233716d547b9af21b9344d GTCommonSDK: 238c6735add91e654f8564638854686ee3dcb4ac GYSDK: db5f4b3aae8df06201be5e786076211ec11791be @@ -299,6 +308,7 @@ SPEC CHECKSUMS: MJExtension: e97d164cb411aa9795cf576093a1fa208b4a8dd8 MJRefresh: ff9e531227924c84ce459338414550a05d2aea78 Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee + MqttCocoaAsyncSocket: 77d3b74f76228dd5a05d1f9526eab101d415b30c ObjectMapper: e6e4d91ff7f2861df7aecc536c92d8363f4c9677 OpenIMSDK: c1880296ead605bcac2a289ad0aef9170fe6e6df OpenIMSDKCore: 75caba22be8ee484011f367711178312bd64a17d @@ -323,6 +333,6 @@ SPEC CHECKSUMS: YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54 ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117 -PODFILE CHECKSUM: 6ba8ada83ccc565c9bdcc418e9a936818640882c +PODFILE CHECKSUM: 861114200722c29adba98535aef6b0494d123b44 COCOAPODS: 1.16.2 diff --git a/Pods/CocoaMQTT/LICENSE b/Pods/CocoaMQTT/LICENSE new file mode 100644 index 0000000..56bef4e --- /dev/null +++ b/Pods/CocoaMQTT/LICENSE @@ -0,0 +1,2 @@ +This project is dual licensed under the Eclipse Public License 1.0 and the +Eclipse Distribution License 1.0 as described in the epl-v10 and edl-v10 files. diff --git a/Pods/CocoaMQTT/README.md b/Pods/CocoaMQTT/README.md new file mode 100644 index 0000000..4e8b1e7 --- /dev/null +++ b/Pods/CocoaMQTT/README.md @@ -0,0 +1,350 @@ +# CocoaMQTT + +![PodVersion](https://img.shields.io/cocoapods/v/CocoaMQTT5.svg) +![Platforms](https://img.shields.io/cocoapods/p/CocoaMQTT5.svg) +![License](https://img.shields.io/cocoapods/l/BadgeSwift.svg?style=flat) +![Swift version](https://img.shields.io/badge/swift-5-orange.svg) + +MQTT v3.1.1 and v5.0 client library for iOS/macOS/tvOS written with Swift 5 + + +## Build + +Build with Xcode 11.1 / Swift 5.1 + +IOS Target: 12.0 or above +OSX Target: 10.13 or above +TVOS Target: 10.0 or above + +## xcode 14.3 issue: +```ruby +File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a +``` +If you encounter the issue, Please update your project minimum depolyments to 11.0 + + +## Installation + +### Swift Package Manager + +To integrate CocoaMQTT into your Xcode project using [Swift Package Manager](https://swift.org/package-manager/), follow these steps: + +1. Open your project in Xcode. +2. Go to `File` > `Swift Packages` > `Add Package Dependency`. +3. Enter the repository URL: `https://github.com/emqx/CocoaMQTT.git`. +4. Choose the latest version or specify a version range. +5. Add the package to your target. + +At last, import "CocoaMQTT" to your project: + +```swift +import CocoaMQTT +``` + +### CocoaPods + +To integrate CocoaMQTT into your Xcode project using [CocoaPods](http://cocoapods.org), you need to modify you `Podfile` like the followings: + +```ruby +use_frameworks! + +target 'Example' do + pod 'CocoaMQTT' +end +``` + +Then, run the following command: + +```bash +$ pod install +``` + +At last, import "CocoaMQTT" to your project: + +```swift +import CocoaMQTT +``` + +## Usage + +Create a client to connect [MQTT broker](https://www.emqx.com/en/mqtt/public-mqtt5-broker): + +```swift +///MQTT 5.0 +let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier) +let mqtt5 = CocoaMQTT5(clientID: clientID, host: "broker.emqx.io", port: 1883) + +let connectProperties = MqttConnectProperties() +connectProperties.topicAliasMaximum = 0 +connectProperties.sessionExpiryInterval = 0 +connectProperties.receiveMaximum = 100 +connectProperties.maximumPacketSize = 500 +mqtt5.connectProperties = connectProperties + +mqtt5.username = "test" +mqtt5.password = "public" +mqtt5.willMessage = CocoaMQTTMessage(topic: "/will", string: "dieout") +mqtt5.keepAlive = 60 +mqtt5.delegate = self +mqtt5.connect() + +///MQTT 3.1.1 +let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier) +let mqtt = CocoaMQTT(clientID: clientID, host: "broker.emqx.io", port: 1883) +mqtt.username = "test" +mqtt.password = "public" +mqtt.willMessage = CocoaMQTTMessage(topic: "/will", string: "dieout") +mqtt.keepAlive = 60 +mqtt.delegate = self +mqtt.connect() +``` + +Now you can use closures instead of `CocoaMQTTDelegate`: + +```swift +mqtt.didReceiveMessage = { mqtt, message, id in + print("Message received in topic \(message.topic) with payload \(message.string!)") +} +``` + +## SSL Secure + +#### One-way certification + +No certificate is required locally. +If you want to trust all untrust CA certificates, you can do this: + +```swift +mqtt.allowUntrustCACertificate = true +``` + +#### Two-way certification + +Need a .p12 file which is generated by a public key file and a private key file. You can generate the p12 file in the terminal: + +``` +openssl pkcs12 -export -clcerts -in client-cert.pem -inkey client-key.pem -out client.p12 +``` + +Note: Please use openssl version 1.1 (e.g. `brew install openssl@1.1`), otherwise you may not be able to import the generated .p12 file to the system correctly. + +## MQTT over Websocket + +In the 1.3.0, The CocoaMQTT has supported to connect to MQTT Broker by Websocket. + +If you integrated by **Swift Package Manager**, follow these steps: + +1. Open your project in Xcode. +2. Go to `File` > `Swift Packages` > `Add Package Dependency`. +3. Enter the repository URL: `https://github.com/emqx/CocoaMQTT.git`. +4. Choose the latest version or specify a version range. +5. Add the package to your target. + +At last, import "CocoaMQTT" and "Starscream" to your project: + +```swift +import CocoaMQTT +import CocoaMQTTWebSocket +import Starscream +``` + +If you integrated by **CocoaPods**, you need to modify you `Podfile` like the followings and execute `pod install` again: + +```ruby +use_frameworks! + +target 'Example' do + pod 'CocoaMQTT/WebSockets' +end +``` + +If you're using CocoaMQTT in a project with only a `.podspec` and no `Podfile`, e.g. in a module for React Native, add this line to your `.podspec`: + +```ruby +Pod::Spec.new do |s| + ... + s.dependency "Starscream" +end +``` + +Then, Create a MQTT instance over Websocket: + +```swift +///MQTT 5.0 +let websocket = CocoaMQTTWebSocket(uri: "/mqtt") +let mqtt5 = CocoaMQTT5(clientID: clientID, host: host, port: 8083, socket: websocket) +let connectProperties = MqttConnectProperties() +connectProperties.topicAliasMaximum = 0 +// ... +mqtt5.connectProperties = connectProperties +// ... + +_ = mqtt5.connect() + +///MQTT 3.1.1 +let websocket = CocoaMQTTWebSocket(uri: "/mqtt") +let mqtt = CocoaMQTT(clientID: clientID, host: host, port: 8083, socket: websocket) + +// ... + +_ = mqtt.connect() +``` + +If you want to add additional custom header to the connection, you can use the following: + +```swift +let websocket = CocoaMQTTWebSocket(uri: "/mqtt") +websocket.headers = [ + "x-api-key": "value" + ] + websocket.enableSSL = true + +let mqtt = CocoaMQTT(clientID: clientID, host: host, port: 8083, socket: websocket) + +// ... + +_ = mqtt.connect() +``` + +If you want to connect using WebSocket Secure (wss), you can use the following example: + +```swift +import CocoaMQTT +import CocoaMQTTWebSocket +import Starscream + +class WebSocketManager { + + private var mqttClient: CocoaMQTT? + var message: String = "" + var token: String = "" + + func setupMQTTClient(with token: String) { + let socket = CocoaMQTTWebSocket(uri: "/mqtt") + socket.enableSSL = true + mqttClient = CocoaMQTT(clientID: token, host: "host", port: 443, socket: socket) + mqttClient?.delegate = self + } + + func connect() { + guard let mqttClient = mqttClient else { return } + mqttClient.connect() + } + +} + +extension WebSocketManager: CocoaMQTTDelegate { + + func mqtt(_ mqtt: CocoaMQTT, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Void) { + // Implement your custom SSL validation logic here. + // For example, you might want to always trust the certificate for testing purposes: + completionHandler(true) + } + + func mqtt(_ mqtt: CocoaMQTT, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { + if let serverTrust = challenge.protectionSpace.serverTrust { + completionHandler(.useCredential, URLCredential(trust: serverTrust)) + return + } + } + completionHandler(.performDefaultHandling, nil) + } + + func mqttUrlSession(_ mqtt: CocoaMQTT, didReceiveTrust trust: SecTrust, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + + print("\(#function), \n result:- \(challenge.debugDescription)") + } + + func mqtt(_ mqtt: CocoaMQTT, didPublishAck id: UInt16) { + print("Published message with ID: \(id)") + } + + func mqtt(_ mqtt: CocoaMQTT, didUnsubscribeTopics topics: [String]) { + print("Unsubscribed from topics: \(topics)") + } + + func mqttDidPing(_ mqtt: CocoaMQTT) { + print("MQTT did ping") + } + + func mqttDidReceivePong(_ mqtt: CocoaMQTT) { + print("MQTT did receive pong") + } + + func mqttDidDisconnect(_ mqtt: CocoaMQTT, withError err: (any Error)?) { + print("Disconnected from MQTT broker with error: \(String(describing: err))") + } + + func mqtt(_ mqtt: CocoaMQTT, didConnectAck ack: CocoaMQTTConnAck) { + print("Connected to MQTT broker with acknowledgment: \(ack)") + } + + func mqtt(_ mqtt: CocoaMQTT, didReceiveMessage message: CocoaMQTTMessage, id: UInt16) { + if let messageString = message.string { + DispatchQueue.main.async { + self.message = messageString + } + print("Received message: \(messageString) on topic: \(message.topic)") + } + } + + func mqtt(_ mqtt: CocoaMQTT, didPublishMessage message: CocoaMQTTMessage, id: UInt16) { + print("Published message: \(message.string ?? "") with ID: \(id)") + } + + func mqtt(_ mqtt: CocoaMQTT, didSubscribeTopics success: NSDictionary, failed: [String]) { + print("Subscribed to topics: \(success), failed to subscribe to: \(failed)") + } + + func mqtt(_ mqtt: CocoaMQTT, didDisconnectWithError err: Error?) { + print("Disconnected from MQTT broker with error: \(String(describing: err))") + } + +} +``` + +## Example App + +You can follow the Example App to learn how to use it. But we need to make the Example App works first: + +```bash +$ cd Examples +``` + +Then, open the `Example.xcodeproj` by Xcode and start it! + +## Dependencies + + +These third-party functions are used: + +~~[GCDAsyncSocket](https://github.com/robbiehanson/CocoaAsyncSocket)~~ +* [MqttCocoaAsyncSocket](https://github.com/leeway1208/MqttCocoaAsyncSocket) +* [Starscream](https://github.com/daltoniam/Starscream) + + +## LICENSE + +MIT License (see `LICENSE`) + +## Contributors + +* [@andypiper](https://github.com/andypiper) +* [@turtleDeng](https://github.com/turtleDeng) +* [@jan-bednar](https://github.com/jan-bednar) +* [@jmiltner](https://github.com/jmiltner) +* [@manucheri](https://github.com/manucheri) +* [@Cyrus Ingraham](https://github.com/cyrusingraham) + +## Author + +- Feng Lee +- CrazyWisdom +- Alex Yu +- Leeway + + +## Twitter + +https://twitter.com/EMQTech diff --git a/Pods/CocoaMQTT/Source/CocoaMQTT.swift b/Pods/CocoaMQTT/Source/CocoaMQTT.swift new file mode 100644 index 0000000..c9fd299 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTT.swift @@ -0,0 +1,842 @@ +// +// CocoaMQTT.swift +// CocoaMQTT +// +// Created by Feng Lee on 14/8/3. +// Copyright (c) 2015 emqx.io. All rights reserved. +// + +import Foundation +import MqttCocoaAsyncSocket + +/** + * Conn Ack + */ +@objc public enum CocoaMQTTConnAck: UInt8, CustomStringConvertible { + case accept = 0 + case unacceptableProtocolVersion + case identifierRejected + case serverUnavailable + case badUsernameOrPassword + case notAuthorized + case reserved + + public init(byte: UInt8) { + switch byte { + case CocoaMQTTConnAck.accept.rawValue.. Void) + + @objc optional func mqttUrlSession(_ mqtt: CocoaMQTT, didReceiveTrust trust: SecTrust, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + + /// + @objc optional func mqtt(_ mqtt: CocoaMQTT, didPublishComplete id: UInt16) + + /// + @objc optional func mqtt(_ mqtt: CocoaMQTT, didStateChangeTo state: CocoaMQTTConnState) + + /// Called when auto-reconnect schedules a reconnect attempt after an unexpected disconnect. + @objc optional func mqtt(_ mqtt: CocoaMQTT, didScheduleReconnect attemptCount: UInt, after interval: UInt16) +} + +/// set mqtt version to 3.1.1 +public func setMqtt3Version() { + if let storage = CocoaMQTTStorage() { + storage.setMQTTVersion("3.1.1") + } +} + +/** + * Blueprint of the MQTT Client + */ +protocol CocoaMQTTClient { + + /* Basic Properties */ + + var host: String { get set } + var port: UInt16 { get set } + var clientID: String { get } + var username: String? {get set} + var password: String? {get set} + var cleanSession: Bool {get set} + var keepAlive: UInt16 {get set} + var willMessage: CocoaMQTTMessage? {get set} + + /* Basic Properties */ + + /* CONNNEC/DISCONNECT */ + + func connect() -> Bool + func connect(timeout: TimeInterval) -> Bool + func disconnect() + func ping() + + /* CONNNEC/DISCONNECT */ + + /* PUBLISH/SUBSCRIBE */ + + func subscribe(_ topic: String, qos: CocoaMQTTQoS) + func subscribe(_ topics: [(String, CocoaMQTTQoS)]) + + func unsubscribe(_ topic: String) + func unsubscribe(_ topics: [String]) + + func publish(_ topic: String, withString string: String, qos: CocoaMQTTQoS, retained: Bool) -> Int + func publish(_ message: CocoaMQTTMessage) -> Int + + /* PUBLISH/SUBSCRIBE */ +} + +/// MQTT Client +/// +/// - Note: MGCDAsyncSocket need delegate to extend NSObject +public class CocoaMQTT: NSObject, CocoaMQTTClient { + + public weak var delegate: CocoaMQTTDelegate? + + private var version = "3.1.1" + + public var host = "localhost" + + public var port: UInt16 = 1883 + + public var clientID: String + + public var username: String? + + public var password: String? + + /// Clean Session flag. Default is true + /// + /// - TODO: What's behavior each Clean Session flags??? + public var cleanSession = true + + /// Setup a **Last Will Message** to client before connecting to broker + public var willMessage: CocoaMQTTMessage? + + /// Enable backgounding socket if running on iOS platform. Default is true + /// + /// - Note: + public var backgroundOnSocket: Bool { + get { return (self.socket as? CocoaMQTTSocket)?.backgroundOnSocket ?? true } + set { (self.socket as? CocoaMQTTSocket)?.backgroundOnSocket = newValue } + } + + /// Delegate Executed queue. Default is `DispatchQueue.main` + /// + /// The delegate/closure callback function will be committed asynchronously to it + public var delegateQueue = DispatchQueue.main + + public var connState = CocoaMQTTConnState.disconnected { + didSet { + __delegate_queue { + self.delegate?.mqtt?(self, didStateChangeTo: self.connState) + self.didChangeState(self, self.connState) + } + } + } + + // deliver + private var deliver = CocoaMQTTDeliver() + + /// Re-deliver the un-acked messages + public var deliverTimeout: Double { + get { return deliver.retryTimeInterval } + set { deliver.retryTimeInterval = newValue } + } + + /// Message queue size. default 1000 + /// + /// The new publishing messages of Qos1/Qos2 will be drop, if the queue is full + public var messageQueueSize: UInt { + get { return deliver.mqueueSize } + set { deliver.mqueueSize = newValue } + } + + /// In-flight window size. default 10 + public var inflightWindowSize: UInt { + get { return deliver.inflightWindowSize } + set { deliver.inflightWindowSize = newValue } + } + + /// Keep alive time interval + public var keepAlive: UInt16 = 60 + private var aliveTimer: CocoaMQTTTimer? + + /// Enable auto-reconnect mechanism + public var autoReconnect = false + + /// Reconnect time interval + /// + /// - note: This value will be increased with `autoReconnectTimeInterval *= 2` + /// if reconnect failed + public var autoReconnectTimeInterval: UInt16 = 1 // starts from 1 second + + /// Maximum auto reconnect time interval + /// + /// The timer starts from `autoReconnectTimeInterval` second and grows exponentially until this value + /// After that, it uses this value for subsequent requests. + public var maxAutoReconnectTimeInterval: UInt16 = 128 // 128 seconds + + /// Auto-reconnect backoff interval in seconds for the current reconnect cycle. + /// + /// This value is advanced for the next reconnect attempt while auto-reconnect is active, + /// and resets to `0` when auto-reconnect is inactive. + public private(set) var reconnectTimeInterval: UInt16 = 0 + + /// Number of reconnect attempts scheduled in the current auto-reconnect cycle. + /// + /// The value resets to `0` after a successful connection or expected disconnect. + public private(set) var reconnectAttemptCount: UInt = 0 + + private var autoReconnTimer: CocoaMQTTTimer? + private var is_internal_disconnected = false + + /// Console log level + public var logLevel: CocoaMQTTLoggerLevel { + get { + return CocoaMQTTLogger.logger.minLevel + } + set { + CocoaMQTTLogger.logger.minLevel = newValue + } + } + + /// Enable SSL connection + public var enableSSL: Bool { + get { return self.socket.enableSSL } + set { socket.enableSSL = newValue } + } + + /// + public var sslSettings: [String: NSObject]? { + get { return (self.socket as? CocoaMQTTSocket)?.sslSettings ?? nil } + set { (self.socket as? CocoaMQTTSocket)?.sslSettings = newValue } + } + + /// Allow self-signed ca certificate. + /// + /// Default is false + public var allowUntrustCACertificate: Bool { + get { return (self.socket as? CocoaMQTTSocket)?.allowUntrustCACertificate ?? false } + set { (self.socket as? CocoaMQTTSocket)?.allowUntrustCACertificate = newValue } + } + + /// The subscribed topics in current communication + /// + /// Keeping this dictionary-typed preserves the public API while the backing store remains thread-safe. + public var subscriptions: [String: CocoaMQTTQoS] { + get { subscriptionsStorage.snapshot() } + set { subscriptionsStorage.replace(with: newValue) } + } + private var subscriptionsStorage = ThreadSafeDictionary(label: "subscriptions") + + fileprivate var subscriptionsWaitingAck = ThreadSafeDictionary(label: "subscriptionsWaitingAck") + fileprivate var unsubscriptionsWaitingAck = ThreadSafeDictionary(label: "unsubscriptionsWaitingAck") + + /// Sending messages + fileprivate var sendingMessages: [UInt16: CocoaMQTTMessage] = [:] + + /// message id counter + private var _msgid: UInt16 = 0 + fileprivate var socket: CocoaMQTTSocketProtocol + fileprivate var reader: CocoaMQTTReader? + + // Closures + public var didConnectAck: (CocoaMQTT, CocoaMQTTConnAck) -> Void = { _, _ in } + public var didPublishMessage: (CocoaMQTT, CocoaMQTTMessage, UInt16) -> Void = { _, _, _ in } + public var didPublishAck: (CocoaMQTT, UInt16) -> Void = { _, _ in } + public var didReceiveMessage: (CocoaMQTT, CocoaMQTTMessage, UInt16) -> Void = { _, _, _ in } + public var didSubscribeTopics: (CocoaMQTT, NSDictionary, [String]) -> Void = { _, _, _ in } + public var didUnsubscribeTopics: (CocoaMQTT, [String]) -> Void = { _, _ in } + public var didPing: (CocoaMQTT) -> Void = { _ in } + public var didReceivePong: (CocoaMQTT) -> Void = { _ in } + public var didDisconnect: (CocoaMQTT, Error?) -> Void = { _, _ in } + public var didReceiveTrust: (CocoaMQTT, SecTrust, @escaping (Bool) -> Swift.Void) -> Void = { _, _, _ in } + public var didCompletePublish: (CocoaMQTT, UInt16) -> Void = { _, _ in } + public var didChangeState: (CocoaMQTT, CocoaMQTTConnState) -> Void = { _, _ in } + public var didScheduleReconnect: (CocoaMQTT, UInt, UInt16) -> Void = { _, _, _ in } + + /// Initial client object + /// + /// - Parameters: + /// - clientID: Client Identifier + /// - host: The MQTT broker host domain or IP address. Default is "localhost" + /// - port: The MQTT service port of host. Default is 1883 + public init(clientID: String, host: String = "localhost", port: UInt16 = 1883, socket: CocoaMQTTSocketProtocol = CocoaMQTTSocket()) { + self.clientID = clientID + self.host = host + self.port = port + self.socket = socket + super.init() + deliver.delegate = self + if let storage = CocoaMQTTStorage() { + storage.setMQTTVersion("3.1.1") + } else { + printWarning("Localstorage initial failed for key: \(clientID)") + } + } + + deinit { + aliveTimer?.suspend() + autoReconnTimer?.suspend() + + socket.setDelegate(nil, delegateQueue: nil) + socket.disconnect() + } + + fileprivate func send(_ frame: Frame, tag: Int = 0) { + printDebug("SEND: \(frame)") + let data = frame.bytes(version: version) + socket.write(Data(bytes: data, count: data.count), withTimeout: 5, tag: tag) + } + + fileprivate func sendConnectFrame() { + + var connect = FrameConnect(clientID: clientID) + connect.keepAlive = keepAlive + connect.username = username + connect.password = password + connect.willMsg = willMessage + connect.cleansess = cleanSession + + send(connect) + reader!.start() + } + + fileprivate func nextMessageID() -> UInt16 { + if _msgid == UInt16.max { + _msgid = 0 + } + _msgid += 1 + return _msgid + } + + fileprivate func puback(_ type: FrameType, msgid: UInt16) { + switch type { + case .puback: + send(FramePubAck(msgid: msgid)) + case .pubrec: + send(FramePubRec(msgid: msgid)) + case .pubcomp: + send(FramePubComp(msgid: msgid)) + default: return + } + } + + /// Connect to MQTT broker + /// + /// - Returns: + /// - Bool: It indicates whether successfully calling socket connect function. + /// Not yet established correct MQTT session + public func connect() -> Bool { + return connect(timeout: -1) + } + + /// Connect to MQTT broker + /// - Parameters: + /// - timeout: Connect timeout + /// - Returns: + /// - Bool: It indicates whether successfully calling socket connect function. + /// Not yet established correct MQTT session + public func connect(timeout: TimeInterval) -> Bool { + socket.setDelegate(self, delegateQueue: delegateQueue) + reader = CocoaMQTTReader(socket: socket, delegate: self) + do { + if timeout > 0 { + try socket.connect(toHost: self.host, onPort: self.port, withTimeout: timeout) + } else { + try socket.connect(toHost: self.host, onPort: self.port) + } + + delegateQueue.async { [weak self] in + guard let self = self else { return } + self.connState = .connecting + } + + return true + } catch let error as NSError { + printError("socket connect error: \(error.description)") + return false + } + } + + /// Send a DISCONNECT packet to the broker then close the connection + /// + /// - Note: Only can be called from outside. + /// This closes the connection expectedly, so auto-reconnect will not run. + public func disconnect() { + expected_disconnect() + } + + /// Disconnect unexpectedly. + /// This keeps auto-reconnect behavior enabled. + func internal_disconnect() { + is_internal_disconnected = false + socket.disconnect() + } + + private func expected_disconnect() { + is_internal_disconnected = true + send(FrameDisconnect(), tag: -0xE0) + socket.disconnect() + } + + /// Send a PING request to broker + public func ping() { + printDebug("ping") + send(FramePingReq(), tag: -0xC0) + + __delegate_queue { + self.delegate?.mqttDidPing(self) + self.didPing(self) + } + } + + /// Publish a message to broker + /// + /// - Parameters: + /// - topic: Topic Name. It can not contain '#', '+' wildcards + /// - string: Payload string + /// - qos: Qos. Default is Qos1 + /// - retained: Retained flag. Mark this message is a retained message. default is false + /// - Returns: + /// - 0 will be returned, if the message's qos is qos0 + /// - 1-65535 will be returned, if the messages's qos is qos1/qos2 + /// - -1 will be returned, if the messages queue is full + @discardableResult + public func publish(_ topic: String, withString string: String, qos: CocoaMQTTQoS = .qos1, retained: Bool = false) -> Int { + let message = CocoaMQTTMessage(topic: topic, string: string, qos: qos, retained: retained) + return publish(message) + } + + /// Publish a message to broker + /// + /// - Parameters: + /// - message: Message + @discardableResult + public func publish(_ message: CocoaMQTTMessage) -> Int { + let msgid: UInt16 + + if message.qos == .qos0 { + msgid = 0 + } else { + msgid = nextMessageID() + } + + var frame = FramePublish(topic: message.topic, + payload: message.payload, + qos: message.qos, + msgid: msgid) + + frame.retained = message.retained + + delegateQueue.async { + self.sendingMessages[msgid] = message + } + + // Push frame to deliver message queue + guard deliver.add(frame) else { + delegateQueue.async { + self.sendingMessages.removeValue(forKey: msgid) + } + return -1 + } + + return Int(msgid) + } + + /// Subscribe a `/` + /// + /// - Parameters: + /// - topic: Topic Name or Topic Filter + /// - qos: Qos. Default is qos1 + public func subscribe(_ topic: String, qos: CocoaMQTTQoS = .qos1) { + return subscribe([(topic, qos)]) + } + + /// Subscribe a lists of topics + /// + /// - Parameters: + /// - topics: A list of tuples presented by `(/, Qos)` + public func subscribe(_ topics: [(String, CocoaMQTTQoS)]) { + let msgid = nextMessageID() + let frame = FrameSubscribe(msgid: msgid, topics: topics) + send(frame, tag: Int(msgid)) + subscriptionsWaitingAck[msgid] = topics + } + + /// Unsubscribe a Topic + /// + /// - Parameters: + /// - topic: A Topic Name or Topic Filter + public func unsubscribe(_ topic: String) { + return unsubscribe([topic]) + } + + /// Unsubscribe a list of topics + /// + /// - Parameters: + /// - topics: A list of `/` + public func unsubscribe(_ topics: [String]) { + let msgid = nextMessageID() + let frame = FrameUnsubscribe(msgid: msgid, topics: topics) + unsubscriptionsWaitingAck[msgid] = topics + send(frame, tag: Int(msgid)) + } +} + +// MARK: CocoaMQTTDeliverProtocol +extension CocoaMQTT: CocoaMQTTDeliverProtocol { + + func deliver(_ deliver: CocoaMQTTDeliver, wantToSend frame: Frame) { + if let publish = frame as? FramePublish { + let msgid = publish.msgid + + var message: CocoaMQTTMessage? + + if let sendingMessage = sendingMessages[msgid] { + message = sendingMessage + // printError("Want send \(frame), but not found in CocoaMQTT cache") + + } else { + message = CocoaMQTTMessage(topic: publish.topic, payload: publish.payload()) + } + + send(publish, tag: Int(msgid)) + + if let message = message { + self.delegate?.mqtt(self, didPublishMessage: message, id: msgid) + self.didPublishMessage(self, message, msgid) + } + } else if let pubrel = frame as? FramePubRel { + // -- Send PUBREL + send(pubrel, tag: Int(pubrel.msgid)) + } + } +} + +extension CocoaMQTT { + + func __delegate_queue(_ fun: @escaping () -> Void) { + delegateQueue.async { [weak self] in + guard self != nil else { return } + fun() + } + } + + private func prepareAutoReconnectAttempt() { + if reconnectTimeInterval == 0 { + reconnectTimeInterval = min(autoReconnectTimeInterval, maxAutoReconnectTimeInterval) + } + reconnectAttemptCount += 1 + } + + private func updateAutoReconnectIntervalForNextAttempt() { + let doubledInterval = UInt32(reconnectTimeInterval) * 2 + reconnectTimeInterval = UInt16(min(doubledInterval, UInt32(maxAutoReconnectTimeInterval))) + } + + private func resetAutoReconnectState() { + reconnectTimeInterval = 0 + reconnectAttemptCount = 0 + autoReconnTimer = nil + } + + private func notifyAutoReconnectScheduled() { + delegate?.mqtt?(self, didScheduleReconnect: reconnectAttemptCount, after: reconnectTimeInterval) + didScheduleReconnect(self, reconnectAttemptCount, reconnectTimeInterval) + } +} + +// MARK: - CocoaMQTTSocketDelegate +extension CocoaMQTT: CocoaMQTTSocketDelegate { + + public func socketConnected(_ socket: CocoaMQTTSocketProtocol) { + sendConnectFrame() + } + + public func socket(_ socket: CocoaMQTTSocketProtocol, + didReceive trust: SecTrust, + completionHandler: @escaping (Bool) -> Swift.Void) { + + printDebug("Call the SSL/TLS manually validating function") + + delegate?.mqtt?(self, didReceive: trust, completionHandler: completionHandler) + didReceiveTrust(self, trust, completionHandler) + } + + public func socketUrlSession(_ socket: CocoaMQTTSocketProtocol, didReceiveTrust trust: SecTrust, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + printDebug("Call the SSL/TLS manually validating function - socketUrlSession") + + delegate?.mqttUrlSession?(self, didReceiveTrust: trust, didReceiveChallenge: challenge, completionHandler: completionHandler) + } + + // ? + public func socketDidSecure(_ sock: MGCDAsyncSocket) { + printDebug("Socket has successfully completed SSL/TLS negotiation") + sendConnectFrame() + } + + public func socket(_ socket: CocoaMQTTSocketProtocol, didWriteDataWithTag tag: Int) { + // XXX: How to print writed bytes?? + } + + public func socket(_ socket: CocoaMQTTSocketProtocol, didRead data: Data, withTag tag: Int) { + let etag = CocoaMQTTReadTag(rawValue: tag)! + var bytes = [UInt8]([0]) + switch etag { + case CocoaMQTTReadTag.header: + data.copyBytes(to: &bytes, count: 1) + reader!.headerReady(bytes[0]) + case CocoaMQTTReadTag.length: + data.copyBytes(to: &bytes, count: 1) + reader!.lengthReady(bytes[0]) + case CocoaMQTTReadTag.payload: + reader!.payloadReady(data) + } + } + + public func socketDidDisconnect(_ socket: CocoaMQTTSocketProtocol, withError err: Error?) { + // Clean up + socket.setDelegate(nil, delegateQueue: nil) + if is_internal_disconnected || !autoReconnect { + resetAutoReconnectState() + } + + connState = .disconnected + delegate?.mqttDidDisconnect(self, withError: err) + didDisconnect(self, err) + + guard !is_internal_disconnected else { + is_internal_disconnected = false + return + } + + guard autoReconnect else { + resetAutoReconnectState() + return + } + + prepareAutoReconnectAttempt() + + // Start reconnector once socket error occurred + printInfo("Try reconnect to server after \(reconnectTimeInterval)s") + notifyAutoReconnectScheduled() + autoReconnTimer = CocoaMQTTTimer.after(Double(reconnectTimeInterval), name: "autoReconnTimer", { [weak self] in + guard let self = self else { return } + self.updateAutoReconnectIntervalForNextAttempt() + _ = self.connect() + }) + } +} + +// MARK: - CocoaMQTTReaderDelegate +extension CocoaMQTT: CocoaMQTTReaderDelegate { + + func didReceive(_ reader: CocoaMQTTReader, connack: FrameConnAck) { + printDebug("RECV: \(connack)") + + if connack.returnCode == .accept { + + // Disable auto-reconnect + + resetAutoReconnectState() + is_internal_disconnected = false + + // Start keepalive timer + + let interval = Double(keepAlive <= 0 ? 60: keepAlive) + + aliveTimer = CocoaMQTTTimer.every(interval, name: "aliveTimer") { [weak self] in + guard let self = self else { return } + self.delegateQueue.async { + guard self.connState == .connected else { + self.aliveTimer = nil + return + } + self.ping() + } + } + + // recover session if enable + + if cleanSession { + deliver.cleanAll() + } else { + if let storage = CocoaMQTTStorage(by: clientID) { + deliver.recoverSessionBy(storage) + } else { + printWarning("Localstorage initial failed for key: \(clientID)") + } + } + + connState = .connected + + } else { + connState = .disconnected + expected_disconnect() + } + + delegate?.mqtt(self, didConnectAck: connack.returnCode ?? CocoaMQTTConnAck.serverUnavailable) + didConnectAck(self, connack.returnCode ?? CocoaMQTTConnAck.serverUnavailable) + } + + func didReceive(_ reader: CocoaMQTTReader, publish: FramePublish) { + printDebug("RECV: \(publish)") + + let message = CocoaMQTTMessage(topic: publish.topic, payload: publish.payload(), qos: publish.qos, retained: publish.retained) + + message.duplicated = publish.dup + + printInfo("Received message: \(message)") + delegate?.mqtt(self, didReceiveMessage: message, id: publish.msgid) + didReceiveMessage(self, message, publish.msgid) + + if message.qos == .qos1 { + puback(FrameType.puback, msgid: publish.msgid) + } else if message.qos == .qos2 { + puback(FrameType.pubrec, msgid: publish.msgid) + } + } + + func didReceive(_ reader: CocoaMQTTReader, puback: FramePubAck) { + printDebug("RECV: \(puback)") + + deliver.ack(by: puback) + + delegate?.mqtt(self, didPublishAck: puback.msgid) + didPublishAck(self, puback.msgid) + } + + func didReceive(_ reader: CocoaMQTTReader, pubrec: FramePubRec) { + printDebug("RECV: \(pubrec)") + + deliver.ack(by: pubrec) + } + + func didReceive(_ reader: CocoaMQTTReader, pubrel: FramePubRel) { + printDebug("RECV: \(pubrel)") + + puback(FrameType.pubcomp, msgid: pubrel.msgid) + } + + func didReceive(_ reader: CocoaMQTTReader, pubcomp: FramePubComp) { + printDebug("RECV: \(pubcomp)") + + deliver.ack(by: pubcomp) + + delegate?.mqtt?(self, didPublishComplete: pubcomp.msgid) + didCompletePublish(self, pubcomp.msgid) + } + + func didReceive(_ reader: CocoaMQTTReader, suback: FrameSubAck) { + printDebug("RECV: \(suback)") + guard let topicsAndQos = subscriptionsWaitingAck.removeValue(forKey: suback.msgid) else { + printWarning("UNEXPECT SUBACK Received: \(suback)") + return + } + + guard topicsAndQos.count == suback.grantedQos.count else { + printWarning("UNEXPECT SUBACK Recivied: \(suback)") + return + } + + let success: NSMutableDictionary = NSMutableDictionary() + var failed = [String]() + for (idx, (topic, _)) in topicsAndQos.enumerated() { + if suback.grantedQos[idx] != .FAILURE { + subscriptionsStorage[topic] = suback.grantedQos[idx] + success[topic] = suback.grantedQos[idx].rawValue + } else { + failed.append(topic) + } + } + + delegate?.mqtt(self, didSubscribeTopics: success, failed: failed) + didSubscribeTopics(self, success, failed) + } + + func didReceive(_ reader: CocoaMQTTReader, unsuback: FrameUnsubAck) { + printDebug("RECV: \(unsuback)") + + guard let topics = unsubscriptionsWaitingAck.removeValue(forKey: unsuback.msgid) else { + printWarning("UNEXPECT UNSUBACK Received: \(unsuback.msgid)") + return + } + // Remove local subscription + for t in topics { + subscriptionsStorage.removeValue(forKey: t) + } + delegate?.mqtt(self, didUnsubscribeTopics: topics) + didUnsubscribeTopics(self, topics) + } + + func didReceive(_ reader: CocoaMQTTReader, pingresp: FramePingResp) { + printDebug("RECV: \(pingresp)") + + delegate?.mqttDidReceivePong(self) + didReceivePong(self) + } + + func didReceive(_ reader: CocoaMQTTReader, disconnect: FrameDisconnect) { + printWarning("Received DISCONNECT in MQTT 3.1.1 mode, closing socket") + internal_disconnect() + } + + func didReceive(_ reader: CocoaMQTTReader, auth: FrameAuth) { + printWarning("Received AUTH in MQTT 3.1.1 mode, closing socket") + internal_disconnect() + } +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTT5.swift b/Pods/CocoaMQTT/Source/CocoaMQTT5.swift new file mode 100644 index 0000000..548327f --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTT5.swift @@ -0,0 +1,903 @@ +// +// CocoaMQTT5.swift +// CocoaMQTT5 +// +// Created by Feng Lee on 14/8/3. +// Copyright (c) 2015 emqx.io. All rights reserved. +// + +import Foundation +import MqttCocoaAsyncSocket + +/** + * Connection State + */ +@objc public enum CocoaMQTTConnState: UInt8, CustomStringConvertible { + case disconnected = 0 + case connecting + case connected + + public var description: String { + switch self { + case .connecting: return "connecting" + case .connected: return "connected" + case .disconnected: return "disconnected" + } + } +} + +/// CocoaMQTT5 Delegate +@objc public protocol CocoaMQTT5Delegate { + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didConnectAck ack: CocoaMQTTCONNACKReasonCode, connAckData: MqttDecodeConnAck?) + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didPublishMessage message: CocoaMQTT5Message, id: UInt16) + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didPublishAck id: UInt16, pubAckData: MqttDecodePubAck?) + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didPublishRec id: UInt16, pubRecData: MqttDecodePubRec?) + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didReceiveMessage message: CocoaMQTT5Message, id: UInt16, publishData: MqttDecodePublish?) + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didSubscribeTopics success: NSDictionary, failed: [String], subAckData: MqttDecodeSubAck?) + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didUnsubscribeTopics topics: [String], unsubAckData: MqttDecodeUnsubAck?) + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didReceiveDisconnectReasonCode reasonCode: CocoaMQTTDISCONNECTReasonCode) + + /// + func mqtt5(_ mqtt5: CocoaMQTT5, didReceiveAuthReasonCode reasonCode: CocoaMQTTAUTHReasonCode) + + /// + func mqtt5DidPing(_ mqtt5: CocoaMQTT5) + + /// + func mqtt5DidReceivePong(_ mqtt5: CocoaMQTT5) + + /// + func mqtt5DidDisconnect(_ mqtt5: CocoaMQTT5, withError err: Error?) + + /// Manually validate SSL/TLS server certificate. + /// + /// This method will be called if enable `allowUntrustCACertificate` + @objc optional func mqtt5(_ mqtt5: CocoaMQTT5, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Void) + + @objc optional func mqtt5UrlSession(_ mqtt: CocoaMQTT5, didReceiveTrust trust: SecTrust, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + + /// + @objc optional func mqtt5(_ mqtt5: CocoaMQTT5, didPublishComplete id: UInt16, pubCompData: MqttDecodePubComp?) + + /// + @objc optional func mqtt5(_ mqtt5: CocoaMQTT5, didStateChangeTo state: CocoaMQTTConnState) + + /// Called when auto-reconnect schedules a reconnect attempt after an unexpected disconnect. + @objc optional func mqtt5(_ mqtt5: CocoaMQTT5, didScheduleReconnect attemptCount: UInt, after interval: UInt16) +} + +/// set mqtt version to 5.0 +public func setMqtt5Version() { + if let storage = CocoaMQTTStorage() { + storage.setMQTTVersion("5.0") + } +} + +/** + * Blueprint of the MQTT Client + */ +protocol CocoaMQTT5Client { + + /* Basic Properties */ + + var host: String { get set } + var port: UInt16 { get set } + var clientID: String { get } + var username: String? {get set} + var password: String? {get set} + var cleanSession: Bool {get set} + var keepAlive: UInt16 {get set} + var willMessage: CocoaMQTT5Message? {get set} + var connectProperties: MqttConnectProperties? {get set} + var authProperties: MqttAuthProperties? {get set} + + /* Basic Properties */ + + /* CONNNEC/DISCONNECT */ + + func connect() -> Bool + func connect(timeout: TimeInterval) -> Bool + func disconnect() + func ping() + + /* CONNNEC/DISCONNECT */ + + /* PUBLISH/SUBSCRIBE */ + + func subscribe(_ topic: String, qos: CocoaMQTTQoS) + func subscribe(_ topics: [MqttSubscription]) + + func unsubscribe(_ topic: String) + func unsubscribe(_ topics: [MqttSubscription]) + + func publish(_ topic: String, withString string: String, qos: CocoaMQTTQoS, DUP: Bool, retained: Bool, properties: MqttPublishProperties) -> Int + func publish(_ message: CocoaMQTT5Message, DUP: Bool, retained: Bool, properties: MqttPublishProperties) -> Int + + /* PUBLISH/SUBSCRIBE */ +} + +/// MQTT Client +/// +/// - Note: MGCDAsyncSocket need delegate to extend NSObject +public class CocoaMQTT5: NSObject, CocoaMQTT5Client { + + public weak var delegate: CocoaMQTT5Delegate? + + private var version = "5.0" + + public var host = "localhost" + + public var port: UInt16 = 1883 + + public var clientID: String + + public var username: String? + + public var password: String? + + /// Clean Session flag. Default is true + /// + /// - TODO: What's behavior each Clean Session flags??? + public var cleanSession = true + + /// Setup a **Last Will Message** to client before connecting to broker + public var willMessage: CocoaMQTT5Message? + + /// Enable backgounding socket if running on iOS platform. Default is true + /// + /// - Note: + public var backgroundOnSocket: Bool { + get { return (self.socket as? CocoaMQTTSocket)?.backgroundOnSocket ?? true } + set { (self.socket as? CocoaMQTTSocket)?.backgroundOnSocket = newValue } + } + + /// Delegate Executed queue. Default is `DispatchQueue.main` + /// + /// The delegate/closure callback function will be committed asynchronously to it + public var delegateQueue = DispatchQueue.main + + @ConcurrentAtomic(wrappedValue: CocoaMQTTConnState.disconnected, label: "CocoaMQTT5.connState") + public var connState { + didSet { + __delegate_queue { + self.delegate?.mqtt5?(self, didStateChangeTo: self.connState) + self.didChangeState(self, self.connState) + } + } + } + + // deliver + private var deliver = CocoaMQTTDeliver() + + /// Re-deliver the un-acked messages + public var deliverTimeout: Double { + get { return deliver.retryTimeInterval } + set { deliver.retryTimeInterval = newValue } + } + + /// Message queue size. default 1000 + /// + /// The new publishing messages of Qos1/Qos2 will be drop, if the queue is full + public var messageQueueSize: UInt { + get { return deliver.mqueueSize } + set { deliver.mqueueSize = newValue } + } + + /// In-flight window size. default 10 + public var inflightWindowSize: UInt { + get { return deliver.inflightWindowSize } + set { deliver.inflightWindowSize = newValue } + } + + /// Keep alive time interval + public var keepAlive: UInt16 = 60 + private var aliveTimer: CocoaMQTTTimer? + + /// Enable auto-reconnect mechanism + public var autoReconnect = false + + /// Reconnect time interval + /// + /// - note: This value will be increased with `autoReconnectTimeInterval *= 2` + /// if reconnect failed + public var autoReconnectTimeInterval: UInt16 = 1 // starts from 1 second + + /// Maximum auto reconnect time interval + /// + /// The timer starts from `autoReconnectTimeInterval` second and grows exponentially until this value + /// After that, it uses this value for subsequent requests. + public var maxAutoReconnectTimeInterval: UInt16 = 128 // 128 seconds + + /// 3.1.2.11 CONNECT Properties + public var connectProperties: MqttConnectProperties? + + /// 3.15.2.2 AUTH Properties + public var authProperties: MqttAuthProperties? + + /// Auto-reconnect backoff interval in seconds for the current reconnect cycle. + /// + /// This value is advanced for the next reconnect attempt while auto-reconnect is active, + /// and resets to `0` when auto-reconnect is inactive. + public private(set) var reconnectTimeInterval: UInt16 = 0 + + /// Number of reconnect attempts scheduled in the current auto-reconnect cycle. + /// + /// The value resets to `0` after a successful connection or expected disconnect. + public private(set) var reconnectAttemptCount: UInt = 0 + + private var autoReconnTimer: CocoaMQTTTimer? + private var is_internal_disconnected = false + + /// Console log level + public var logLevel: CocoaMQTTLoggerLevel { + get { + return CocoaMQTTLogger.logger.minLevel + } + set { + CocoaMQTTLogger.logger.minLevel = newValue + } + } + + /// Enable SSL connection + public var enableSSL: Bool { + get { return self.socket.enableSSL } + set { socket.enableSSL = newValue } + } + + /// + public var sslSettings: [String: NSObject]? { + get { return (self.socket as? CocoaMQTTSocket)?.sslSettings ?? nil } + set { (self.socket as? CocoaMQTTSocket)?.sslSettings = newValue } + } + + /// Allow self-signed ca certificate. + /// + /// Default is false + public var allowUntrustCACertificate: Bool { + get { return (self.socket as? CocoaMQTTSocket)?.allowUntrustCACertificate ?? false } + set { (self.socket as? CocoaMQTTSocket)?.allowUntrustCACertificate = newValue } + } + + /// The subscribed topics in current communication + public var subscriptions = ThreadSafeDictionary(label: "subscriptions") + + fileprivate var subscriptionsWaitingAck = ThreadSafeDictionary(label: "subscriptionsWaitingAck") + fileprivate var unsubscriptionsWaitingAck = ThreadSafeDictionary(label: "unsubscriptionsWaitingAck") + + /// Sending messages + fileprivate var sendingMessages: [UInt16: CocoaMQTT5Message] = [:] + + /// message id counter + private var _msgid: UInt16 = 0 + fileprivate var socket: CocoaMQTTSocketProtocol + fileprivate var reader: CocoaMQTTReader? + + // Closures + public var didConnectAck: (CocoaMQTT5, CocoaMQTTCONNACKReasonCode, MqttDecodeConnAck?) -> Void = { _, _, _ in } + public var didPublishMessage: (CocoaMQTT5, CocoaMQTT5Message, UInt16) -> Void = { _, _, _ in } + public var didPublishAck: (CocoaMQTT5, UInt16, MqttDecodePubAck?) -> Void = { _, _, _ in } + public var didPublishRec: (CocoaMQTT5, UInt16, MqttDecodePubRec?) -> Void = { _, _, _ in } + public var didReceiveMessage: (CocoaMQTT5, CocoaMQTT5Message, UInt16, MqttDecodePublish?) -> Void = { _, _, _, _ in } + public var didSubscribeTopics: (CocoaMQTT5, NSDictionary, [String], MqttDecodeSubAck?) -> Void = { _, _, _, _ in } + public var didUnsubscribeTopics: (CocoaMQTT5, [String], MqttDecodeUnsubAck?) -> Void = { _, _, _ in } + public var didPing: (CocoaMQTT5) -> Void = { _ in } + public var didReceivePong: (CocoaMQTT5) -> Void = { _ in } + public var didDisconnect: (CocoaMQTT5, Error?) -> Void = { _, _ in } + public var didDisconnectReasonCode: (CocoaMQTT5, CocoaMQTTDISCONNECTReasonCode) -> Void = { _, _ in } + public var didAuthReasonCode: (CocoaMQTT5, CocoaMQTTAUTHReasonCode) -> Void = { _, _ in } + public var didReceiveTrust: (CocoaMQTT5, SecTrust, @escaping (Bool) -> Swift.Void) -> Void = { _, _, _ in } + public var didCompletePublish: (CocoaMQTT5, UInt16, MqttDecodePubComp?) -> Void = { _, _, _ in } + public var didChangeState: (CocoaMQTT5, CocoaMQTTConnState) -> Void = { _, _ in } + public var didScheduleReconnect: (CocoaMQTT5, UInt, UInt16) -> Void = { _, _, _ in } + + /// Initial client object + /// + /// - Parameters: + /// - clientID: Client Identifier + /// - host: The MQTT broker host domain or IP address. Default is "localhost" + /// - port: The MQTT service port of host. Default is 1883 + public init(clientID: String, host: String = "localhost", port: UInt16 = 1883, socket: CocoaMQTTSocketProtocol = CocoaMQTTSocket()) { + self.clientID = clientID + self.host = host + self.port = port + self.socket = socket + super.init() + deliver.delegate = self + if let storage = CocoaMQTTStorage() { + storage.setMQTTVersion("5.0") + } else { + printWarning("Localstorage initial failed for key: \(clientID)") + } + } + + deinit { + aliveTimer?.suspend() + autoReconnTimer?.suspend() + + socket.setDelegate(nil, delegateQueue: nil) + socket.disconnect() + } + + fileprivate func send(_ frame: Frame, tag: Int = 0) { + printDebug("SEND: \(frame)") + let data = frame.bytes(version: version) + + socket.write(Data(bytes: data, count: data.count), withTimeout: 5, tag: tag) + } + + fileprivate func sendConnectFrame() { + + var connect = FrameConnect(clientID: clientID) + connect.keepAlive = keepAlive + connect.username = username + connect.password = password + connect.willMsg5 = willMessage + connect.cleansess = cleanSession + + connect.connectProperties = connectProperties + + send(connect) + reader!.start() + } + + fileprivate func nextMessageID() -> UInt16 { + if _msgid == UInt16.max { + _msgid = 0 + } + _msgid += 1 + return _msgid + } + + fileprivate func puback(_ type: FrameType, msgid: UInt16) { + switch type { + case .puback: + send(FramePubAck(msgid: msgid, reasonCode: CocoaMQTTPUBACKReasonCode.success)) + case .pubrec: + send(FramePubRec(msgid: msgid, reasonCode: CocoaMQTTPUBRECReasonCode.success)) + case .pubcomp: + send(FramePubComp(msgid: msgid, reasonCode: CocoaMQTTPUBCOMPReasonCode.success)) + default: return + } + } + + /// Connect to MQTT broker + /// + /// - Returns: + /// - Bool: It indicates whether successfully calling socket connect function. + /// Not yet established correct MQTT session + public func connect() -> Bool { + return connect(timeout: -1) + } + + /// Connect to MQTT broker + /// - Parameters: + /// - timeout: Connect timeout + /// - Returns: + /// - Bool: It indicates whether successfully calling socket connect function. + /// Not yet established correct MQTT session + public func connect(timeout: TimeInterval) -> Bool { + socket.setDelegate(self, delegateQueue: delegateQueue) + reader = CocoaMQTTReader(socket: socket, delegate: self) + do { + if timeout > 0 { + try socket.connect(toHost: self.host, onPort: self.port, withTimeout: timeout) + } else { + try socket.connect(toHost: self.host, onPort: self.port) + } + + delegateQueue.async { [weak self] in + guard let self = self else { return } + self.connState = .connecting + } + + return true + } catch let error as NSError { + printError("socket connect error: \(error.description)") + return false + } + } + + /// Send a DISCONNECT packet to the broker then close the connection + /// + /// - Note: Only can be called from outside. + /// This closes the connection expectedly, so auto-reconnect will not run. + public func disconnect() { + expected_disconnect(reasonCode: .normalDisconnection) + } + + public func disconnect(reasonCode: CocoaMQTTDISCONNECTReasonCode, userProperties: [String: String] ) { + expected_disconnect(reasonCode: reasonCode, userProperties: userProperties) + } + + /// Disconnect unexpectedly. + /// This keeps auto-reconnect behavior enabled. + func internal_disconnect() { + is_internal_disconnected = false + socket.disconnect() + } + + func internal_disconnect_withProperties(reasonCode: CocoaMQTTDISCONNECTReasonCode, userProperties: [String: String] ) { + expected_disconnect(reasonCode: reasonCode, userProperties: userProperties) + } + + private func expected_disconnect(reasonCode: CocoaMQTTDISCONNECTReasonCode, userProperties: [String: String]? = nil) { + is_internal_disconnected = true + var frameDisconnect = FrameDisconnect(disconnectReasonCode: reasonCode) + frameDisconnect.userProperties = userProperties ?? [:] + send(frameDisconnect, tag: -0xE0) + socket.disconnect() + } + /// Send a PING request to broker + public func ping() { + printDebug("ping") + send(FramePingReq(), tag: -0xC0) + + __delegate_queue { + self.delegate?.mqtt5DidPing(self) + self.didPing(self) + } + } + + /// Publish a message to broker + /// + /// - Parameters: + /// - topic: Topic Name. It can not contain '#', '+' wildcards + /// - string: Payload string + /// - qos: Qos. Default is Qos1 + /// - retained: Retained flag. Mark this message is a retained message. default is false + /// - properties: Publish Properties + /// - Returns: + /// - 0 will be returned, if the message's qos is qos0 + /// - 1-65535 will be returned, if the messages's qos is qos1/qos2 + /// - -1 will be returned, if the messages queue is full + @discardableResult + public func publish(_ topic: String, withString string: String, qos: CocoaMQTTQoS = .qos1, DUP: Bool = false, retained: Bool = false, properties: MqttPublishProperties) -> Int { + assert(!(DUP && qos == .qos0), "DUP=true with QoS0 is invalid for MQTT PUBLISH.") + guard !(DUP && qos == .qos0) else { + printError("Invalid PUBLISH flags: DUP=true requires QoS1 or QoS2.") + return -1 + } + let message = CocoaMQTT5Message(topic: topic, string: string, qos: qos, retained: retained) + return publish(message, DUP: DUP, retained: retained, properties: properties) + } + + /// Publish a message to broker + /// + /// - Parameters: + /// - message: Message + /// - properties: Publish Properties + @discardableResult + public func publish(_ message: CocoaMQTT5Message, DUP: Bool = false, retained: Bool = false, properties: MqttPublishProperties) -> Int { + assert(!(DUP && message.qos == .qos0), "DUP=true with QoS0 is invalid for MQTT PUBLISH.") + guard !(DUP && message.qos == .qos0) else { + printError("Invalid PUBLISH flags: DUP=true requires QoS1 or QoS2.") + return -1 + } + + let msgid: UInt16 + + if message.qos == .qos0 { + msgid = 0 + } else { + msgid = nextMessageID() + } + + printDebug("message.topic \(message.topic ) = message.payload \(message.payload)") + + var frame = FramePublish(topic: message.topic, + payload: message.payload, + qos: message.qos, + msgid: msgid) + frame.qos = message.qos + frame.dup = DUP + frame.publishProperties = properties + frame.retained = message.retained + + delegateQueue.async { + self.sendingMessages[msgid] = message + } + + // Push frame to deliver message queue + guard deliver.add(frame) else { + delegateQueue.async { + self.sendingMessages.removeValue(forKey: msgid) + } + return -1 + } + + return Int(msgid) + } + + /// Subscribe a `/` + /// + /// - Parameters: + /// - topic: Topic Name or Topic Filter + /// - qos: Qos. Default is qos1 + public func subscribe(_ topic: String, qos: CocoaMQTTQoS = .qos1) { + let filter = MqttSubscription(topic: topic, qos: qos) + return subscribe([filter]) + } + + /// Subscribe a lists of topics + /// + /// - Parameters: + /// - topics: A list of tuples presented by `(/, Qos)` + public func subscribe(_ topics: [MqttSubscription]) { + let msgid = nextMessageID() + let frame = FrameSubscribe(msgid: msgid, subscriptionList: topics) + send(frame, tag: Int(msgid)) + subscriptionsWaitingAck[msgid] = topics + } + + /// Subscribe a lists of topics + /// + /// - Parameters: + /// - topics: A list of tuples presented by `(/, Qos)` + /// - packetIdentifier: SUBSCRIBE Variable Header + /// - subscriptionIdentifier: Subscription Identifier + /// - userProperty: User Property + public func subscribe(_ topics: [MqttSubscription], packetIdentifier: UInt16? = nil, subscriptionIdentifier: UInt32? = nil, userProperty: [String: String] = [:]) { + let msgid = nextMessageID() + let frame = FrameSubscribe(msgid: msgid, subscriptionList: topics, packetIdentifier: packetIdentifier, subscriptionIdentifier: subscriptionIdentifier, userProperty: userProperty) + send(frame, tag: Int(msgid)) + subscriptionsWaitingAck[msgid] = topics + } + + /// Unsubscribe a Topic + /// + /// - Parameters: + /// - topic: A Topic Name or Topic Filter + public func unsubscribe(_ topic: String) { + let filter = MqttSubscription(topic: topic) + return unsubscribe([filter]) + } + + /// Unsubscribe a list of topics + /// + /// - Parameters: + /// - topics: A list of `/` + public func unsubscribe(_ topics: [MqttSubscription]) { + let msgid = nextMessageID() + let frame = FrameUnsubscribe(msgid: msgid, topics: topics) + unsubscriptionsWaitingAck[msgid] = topics + send(frame, tag: Int(msgid)) + } + + /// Authentication exchange + /// + /// + public func auth(reasonCode: CocoaMQTTAUTHReasonCode, authProperties: MqttAuthProperties) { + printDebug("auth") + let frame = FrameAuth(reasonCode: reasonCode, authProperties: authProperties) + + send(frame) + } +} + +// MARK: CocoaMQTTDeliverProtocol +extension CocoaMQTT5: CocoaMQTTDeliverProtocol { + + func deliver(_ deliver: CocoaMQTTDeliver, wantToSend frame: Frame) { + if let publish = frame as? FramePublish { + let msgid = publish.msgid + var message: CocoaMQTT5Message? + + if let sendingMessage = sendingMessages[msgid] { + message = sendingMessage + // printError("Want send \(frame), but not found in CocoaMQTT cache") + } else { + message = CocoaMQTT5Message(topic: publish.topic, payload: publish.payload()) + } + + send(publish, tag: Int(msgid)) + + if let message = message { + self.delegate?.mqtt5(self, didPublishMessage: message, id: msgid) + self.didPublishMessage(self, message, msgid) + } + } else if let pubrel = frame as? FramePubRel { + // -- Send PUBREL + send(pubrel, tag: Int(pubrel.msgid)) + } + } +} + +extension CocoaMQTT5 { + + func __delegate_queue(_ fun: @escaping () -> Void) { + delegateQueue.async { [weak self] in + guard self != nil else { return } + fun() + } + } + + private func prepareAutoReconnectAttempt() { + if reconnectTimeInterval == 0 { + reconnectTimeInterval = min(autoReconnectTimeInterval, maxAutoReconnectTimeInterval) + } + reconnectAttemptCount += 1 + } + + private func updateAutoReconnectIntervalForNextAttempt() { + let doubledInterval = UInt32(reconnectTimeInterval) * 2 + reconnectTimeInterval = UInt16(min(doubledInterval, UInt32(maxAutoReconnectTimeInterval))) + } + + private func resetAutoReconnectState() { + reconnectTimeInterval = 0 + reconnectAttemptCount = 0 + autoReconnTimer = nil + } + + private func notifyAutoReconnectScheduled() { + delegate?.mqtt5?(self, didScheduleReconnect: reconnectAttemptCount, after: reconnectTimeInterval) + didScheduleReconnect(self, reconnectAttemptCount, reconnectTimeInterval) + } +} + +// MARK: - CocoaMQTTSocketDelegate +extension CocoaMQTT5: CocoaMQTTSocketDelegate { + + public func socketConnected(_ socket: CocoaMQTTSocketProtocol) { + sendConnectFrame() + } + + public func socket(_ socket: CocoaMQTTSocketProtocol, + didReceive trust: SecTrust, + completionHandler: @escaping (Bool) -> Swift.Void) { + + printDebug("Call the SSL/TLS manually validating function") + + delegate?.mqtt5?(self, didReceive: trust, completionHandler: completionHandler) + didReceiveTrust(self, trust, completionHandler) + } + + public func socketUrlSession(_ socket: CocoaMQTTSocketProtocol, didReceiveTrust trust: SecTrust, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + printDebug("Call the SSL/TLS manually validating function - socketUrlSession") + + delegate?.mqtt5UrlSession?(self, didReceiveTrust: trust, didReceiveChallenge: challenge, completionHandler: completionHandler) + } + + // ? + public func socketDidSecure(_ sock: MGCDAsyncSocket) { + printDebug("Socket has successfully completed SSL/TLS negotiation") + sendConnectFrame() + } + + public func socket(_ socket: CocoaMQTTSocketProtocol, didWriteDataWithTag tag: Int) { + // XXX: How to print writed bytes?? + } + + public func socket(_ socket: CocoaMQTTSocketProtocol, didRead data: Data, withTag tag: Int) { + let etag = CocoaMQTTReadTag(rawValue: tag)! + var bytes = [UInt8]([0]) + switch etag { + case CocoaMQTTReadTag.header: + data.copyBytes(to: &bytes, count: 1) + reader!.headerReady(bytes[0]) + case CocoaMQTTReadTag.length: + data.copyBytes(to: &bytes, count: 1) + reader!.lengthReady(bytes[0]) + case CocoaMQTTReadTag.payload: + reader!.payloadReady(data) + } + } + + public func socketDidDisconnect(_ socket: CocoaMQTTSocketProtocol, withError err: Error?) { + // Clean up + socket.setDelegate(nil, delegateQueue: nil) + if is_internal_disconnected || !autoReconnect { + resetAutoReconnectState() + } + + connState = .disconnected + + delegate?.mqtt5DidDisconnect(self, withError: err) + didDisconnect(self, err) + + guard !is_internal_disconnected else { + is_internal_disconnected = false + return + } + + guard autoReconnect else { + resetAutoReconnectState() + return + } + + prepareAutoReconnectAttempt() + + // Start reconnector once socket error occurred + printInfo("Try reconnect to server after \(reconnectTimeInterval)s") + notifyAutoReconnectScheduled() + autoReconnTimer = CocoaMQTTTimer.after(Double(reconnectTimeInterval), name: "autoReconnTimer", { [weak self] in + guard let self = self else { return } + self.updateAutoReconnectIntervalForNextAttempt() + _ = self.connect() + }) + } +} + +// MARK: - CocoaMQTTReaderDelegate +extension CocoaMQTT5: CocoaMQTTReaderDelegate { + + func didReceive(_ reader: CocoaMQTTReader, disconnect: FrameDisconnect) { + let reasonCode = disconnect.receiveReasonCode ?? .normalDisconnection + delegate?.mqtt5(self, didReceiveDisconnectReasonCode: reasonCode) + didDisconnectReasonCode(self, reasonCode) + } + + func didReceive(_ reader: CocoaMQTTReader, auth: FrameAuth) { + let reasonCode = auth.receiveReasonCode ?? .success + delegate?.mqtt5(self, didReceiveAuthReasonCode: reasonCode) + didAuthReasonCode(self, reasonCode) + } + + func didReceive(_ reader: CocoaMQTTReader, connack: FrameConnAck) { + printDebug("RECV: \(connack)") + + if connack.reasonCode == .success { + + // Disable auto-reconnect + + resetAutoReconnectState() + is_internal_disconnected = false + + // Start keepalive timer + + let interval = Double(keepAlive <= 0 ? 60: keepAlive) + + aliveTimer = CocoaMQTTTimer.every(interval, name: "aliveTimer") { [weak self] in + guard let self = self else { return } + self.delegateQueue.async { + guard self.connState == .connected else { + self.aliveTimer = nil + return + } + self.ping() + } + } + + // recover session if enable + + if cleanSession { + deliver.cleanAll() + } else { + if let storage = CocoaMQTTStorage(by: clientID) { + deliver.recoverSessionBy(storage) + } else { + printWarning("Localstorage initial failed for key: \(clientID)") + } + } + + connState = .connected + + } else { + connState = .disconnected + expected_disconnect(reasonCode: .normalDisconnection) + } + + delegate?.mqtt5(self, didConnectAck: connack.reasonCode ?? CocoaMQTTCONNACKReasonCode.unspecifiedError, connAckData: connack.connackProperties ?? nil) + didConnectAck(self, connack.reasonCode ?? CocoaMQTTCONNACKReasonCode.unspecifiedError, connack.connackProperties ?? nil) + } + + func didReceive(_ reader: CocoaMQTTReader, publish: FramePublish) { + printDebug("RECV: \(publish)") + + let message = CocoaMQTT5Message(topic: publish.mqtt5Topic, payload: publish.payload5(), qos: publish.qos, retained: publish.retained) + + message.duplicated = publish.dup + message.contentType = publish.publishRecProperties?.contentType + + printInfo("Received message: \(message)") + delegate?.mqtt5(self, didReceiveMessage: message, id: publish.msgid, publishData: publish.publishRecProperties ?? nil) + didReceiveMessage(self, message, publish.msgid, publish.publishRecProperties ?? nil) + + if message.qos == .qos1 { + puback(FrameType.puback, msgid: publish.msgid) + } else if message.qos == .qos2 { + puback(FrameType.pubrec, msgid: publish.msgid) + } + } + + func didReceive(_ reader: CocoaMQTTReader, puback: FramePubAck) { + printDebug("RECV: \(puback)") + + deliver.ack(by: puback) + + delegate?.mqtt5(self, didPublishAck: puback.msgid, pubAckData: puback.pubAckProperties ?? nil) + didPublishAck(self, puback.msgid, puback.pubAckProperties ?? nil) + } + + func didReceive(_ reader: CocoaMQTTReader, pubrec: FramePubRec) { + printDebug("RECV: \(pubrec)") + + deliver.ack(by: pubrec) + + delegate?.mqtt5(self, didPublishRec: pubrec.msgid, pubRecData: pubrec.pubRecProperties ?? nil) + didPublishRec(self, pubrec.msgid, pubrec.pubRecProperties ?? nil) + } + + func didReceive(_ reader: CocoaMQTTReader, pubrel: FramePubRel) { + printDebug("RECV: \(pubrel)") + + puback(FrameType.pubcomp, msgid: pubrel.msgid) + } + + func didReceive(_ reader: CocoaMQTTReader, pubcomp: FramePubComp) { + printDebug("RECV: \(pubcomp)") + + deliver.ack(by: pubcomp) + + delegate?.mqtt5?(self, didPublishComplete: pubcomp.msgid, pubCompData: pubcomp.pubCompProperties ?? nil) + didCompletePublish(self, pubcomp.msgid, pubcomp.pubCompProperties ?? nil) + } + + func didReceive(_ reader: CocoaMQTTReader, suback: FrameSubAck) { + printDebug("RECV: \(suback)") + guard let topicsAndQos = subscriptionsWaitingAck.removeValue(forKey: suback.msgid) else { + printWarning("UNEXPECT SUBACK Received: \(suback)") + return + } + + guard topicsAndQos.count == suback.grantedQos.count else { + printWarning("UNEXPECT SUBACK Recivied: \(suback)") + return + } + + let success: NSMutableDictionary = NSMutableDictionary() + var failed = [String]() + for (idx, subscriptionList) in topicsAndQos.enumerated() { + if suback.grantedQos[idx] != .FAILURE { + subscriptions[subscriptionList.topic] = suback.grantedQos[idx] + success[subscriptionList.topic] = suback.grantedQos[idx].rawValue + } else { + failed.append(subscriptionList.topic) + } + } + + delegate?.mqtt5(self, didSubscribeTopics: success, failed: failed, subAckData: suback.subAckProperties ?? nil) + didSubscribeTopics(self, success, failed, suback.subAckProperties ?? nil) + } + + func didReceive(_ reader: CocoaMQTTReader, unsuback: FrameUnsubAck) { + printDebug("RECV: \(unsuback)") + + guard let topics = unsubscriptionsWaitingAck.removeValue(forKey: unsuback.msgid) else { + printWarning("UNEXPECT UNSUBACK Received: \(unsuback.msgid)") + return + } + // Remove local subscription + var removeTopics: [String] = [] + for t in topics { + removeTopics.append(t.topic) + subscriptions.removeValue(forKey: t.topic) + } + + delegate?.mqtt5(self, didUnsubscribeTopics: removeTopics, unsubAckData: unsuback.unSubAckProperties ?? nil) + didUnsubscribeTopics(self, removeTopics, unsuback.unSubAckProperties ?? nil) + } + + func didReceive(_ reader: CocoaMQTTReader, pingresp: FramePingResp) { + printDebug("RECV: \(pingresp)") + + delegate?.mqtt5DidReceivePong(self) + didReceivePong(self) + } +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTT5Message.swift b/Pods/CocoaMQTT/Source/CocoaMQTT5Message.swift new file mode 100644 index 0000000..121f7d0 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTT5Message.swift @@ -0,0 +1,155 @@ +// +// CocoaMQTT5Message.swift +// CocoaMQTT +// +// Created by Created by liwei wang on 2021/11/10. +// Copyright (c) 2015 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT Message +public class CocoaMQTT5Message: NSObject { + + public var qos = CocoaMQTTQoS.qos1 + + public var topic: String + + public var payload: [UInt8] + + public var retained = false + + /// The `duplicated` property show that this message maybe has be received before + /// + /// - note: Readonly property + public var duplicated = false + + /// 3.1.3.2.3 Payload Format Indicator + public var isUTF8EncodedData: Bool = true + /// 3.1.3.2.2 Will Delay Interval + public var willDelayInterval: UInt32? = 0 + /// 3.1.3.2.4 Message Expiry Interval + public var willExpiryInterval: UInt32? = .max + /// 3.1.3.2.5 Content Type + public var contentType: String? + /// 3.1.3.2.6 Response Topic + public var willResponseTopic: String? + /// 3.1.3.2.7 Correlation Data + public var willCorrelationData: [UInt8]? + /// 3.1.3.2.8 User Property + public var willUserProperty: [String: String]? + + /// Return the payload as a utf8 string if possible + /// + /// It will return nil if the payload is not a valid utf8 string + public var string: String? { + NSString(bytes: payload, length: payload.count, encoding: String.Encoding.utf8.rawValue) as String? + } + + public var properties: [UInt8] { + + var properties = [UInt8]() + var retVal = [UInt8]() + + /// 3.1.3.2.2 Property Length + if let willDelayInterval = self.willDelayInterval { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.willDelayInterval.rawValue, value: willDelayInterval.byteArrayLittleEndian) + } + + /// 3.1.3.2.4 Message Expiry Interval + if let willExpiryInterval = self.willExpiryInterval { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.willExpiryInterval.rawValue, value: willExpiryInterval.byteArrayLittleEndian) + } + + /// 3.1.3.2.3 Payload Format Indicator + if isUTF8EncodedData { + properties += [1, 1] + } else { + properties += [1, 0] + } + + /// 3.1.3.2.5 Content Type + if var contentType = self.contentType { + if isUTF8EncodedData { + contentType = contentType.stringUTF8 + } + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.contentType.rawValue, value: contentType.bytesWithLength) + } + + /// 3.1.3.2.6 Response Topic + if var willResponseTopic = self.willResponseTopic { + if isUTF8EncodedData { + willResponseTopic = willResponseTopic.stringUTF8 + } + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.responseTopic.rawValue, value: willResponseTopic.bytesWithLength) + } + + /// 3.1.3.2.7 Correlation Data + if let willCorrelationData = self.willCorrelationData { + let buff = UInt16(willCorrelationData.count).hlBytes + willCorrelationData + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.correlationData.rawValue, value: buff) + } + + /// 3.1.3.2.8 User Property + if let willUserProperty = self.willUserProperty { + willUserProperty.forEach { element in + properties.append(UInt8(CocoaMQTTPropertyName.userProperty.rawValue)) + if isUTF8EncodedData { + let key = element.key.stringUTF8 + properties += key .bytesWithLength + let value = element.value.stringUTF8 + properties += value.bytesWithLength + } else { + properties += element.key.bytesWithLength + properties += element.value.bytesWithLength + } + } + } + + retVal += properties + return retVal + } + + public init(topic: String, string: String, qos: CocoaMQTTQoS = .qos1, retained: Bool = false) { + + self.topic = topic + self.payload = [UInt8](string.utf8) + self.qos = qos + self.retained = retained + } + + public init(topic: String, payload: [UInt8], qos: CocoaMQTTQoS = .qos1, retained: Bool = false) { + + self.topic = topic + self.payload = payload + self.qos = qos + self.retained = retained + } + + public init(topic: String, payload: [String: Any], qos: CocoaMQTTQoS = .qos1, retained: Bool = false) throws { + let data = try JSONSerialization.data(withJSONObject: payload) + self.topic = topic + self.payload = [UInt8](data) + self.qos = qos + self.retained = retained + } +} + +extension CocoaMQTT5Message { + + public override var description: String { + return "CocoaMQTT5Message(topic: \(topic), qos: \(qos), payload: \(payload.summary))" + } +} + +// For test +extension CocoaMQTT5Message { + + var t_pub_frame: FramePublish { + var frame = FramePublish(topic: topic, payload: payload, qos: qos, msgid: 0) + frame.retained = retained + frame.dup = duplicated + return frame + } + +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTDeliver.swift b/Pods/CocoaMQTT/Source/CocoaMQTTDeliver.swift new file mode 100644 index 0000000..d693fe4 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTDeliver.swift @@ -0,0 +1,353 @@ +// +// CocoaMQTTDeliver.swift +// CocoaMQTT +// +// Created by HJianBo on 2019/5/2. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation +import Dispatch + +protocol CocoaMQTTDeliverProtocol: AnyObject { + + var delegateQueue: DispatchQueue { get set } + + func deliver(_ deliver: CocoaMQTTDeliver, wantToSend frame: Frame) +} + +private struct InflightFrame { + + /// The infligth frame maybe a `FramePublish` or `FramePubRel` + var frame: Frame + + /// Monotonic time (Dispatch uptime) at which this frame should be retried next. + var nextRetryAtUptimeNs: UInt64 + +} + +extension Array where Element == InflightFrame { + + func filterMap(isIncluded: (Element) -> (Bool, Element)) -> [Element] { + var tmp = [Element]() + for e in self { + let res = isIncluded(e) + if res.0 { + tmp.append(res.1) + } + } + return tmp + } +} + +// CocoaMQTTDeliver +class CocoaMQTTDeliver: NSObject { + + /// The dispatch queue is used by delivering frames in serially + private var deliverQueue = DispatchQueue.init(label: "deliver.cocoamqtt.emqx", qos: .default) + + weak var delegate: CocoaMQTTDeliverProtocol? + + fileprivate var inflight = [InflightFrame]() + + fileprivate var mqueue = [Frame]() + + var mqueueSize: UInt = 1000 + + var inflightWindowSize: UInt = 10 + + /// Retry time interval millisecond + var retryTimeInterval: Double = 5000 + + private var awaitingTimer: CocoaMQTTTimer? + + var isQueueEmpty: Bool { mqueue.isEmpty } + var isQueueFull: Bool { mqueue.count >= mqueueSize } + var isInflightFull: Bool { inflight.count >= inflightWindowSize } + var isInflightEmpty: Bool { inflight.isEmpty } + + var storage: CocoaMQTTStorage? + + func recoverSessionBy(_ storage: CocoaMQTTStorage) { + let frames = storage.readAll() + // Sync to push the frame to mqueue for avoiding overcommit + deliverQueue.sync { + self.storage = storage + for f in frames { + mqueue.append(f) + } + if !frames.isEmpty { + printInfo("Deliver recover \(frames.count) msgs") + printDebug("Recover message \(frames)") + } + } + + guard !frames.isEmpty else { + return + } + + deliverQueue.async { [weak self] in + guard let self = self else { return } + self.tryTransport() + } + } + + /// Add a FramePublish to the message queue to wait for sending + /// + /// return false means the frame is rejected because of the buffer is full + func add(_ frame: FramePublish) -> Bool { + guard !isQueueFull else { + printError("Sending buffer is full, frame \(frame) has been rejected to add.") + return false + } + + // Sync to push the frame to mqueue for avoiding overcommit + deliverQueue.sync { + mqueue.append(frame) + _ = storage?.write(frame) + } + + deliverQueue.async { [weak self] in + guard let self = self else { return } + self.tryTransport() + } + + return true + } + + /// Acknowledge a PUBLISH/PUBREL by msgid + func ack(by frame: Frame) { + let msgid: UInt16 + if let puback = frame as? FramePubAck { + msgid = puback.msgid + } else if let pubrec = frame as? FramePubRec { + msgid = pubrec.msgid + } else if let pubcom = frame as? FramePubComp { + msgid = pubcom.msgid + } else { + return + } + + let ackType = frame.type + let shouldRemoveFromStorage = frame is FramePubAck || frame is FramePubComp + let ackFrameDescription = String(describing: frame) + + deliverQueue.async { [weak self] in + guard let self = self else { return } + let acked = self.ackInflightFrame(withMsgid: msgid, type: ackType) + if acked.count == 0 { + printWarning("Acknowledge by \(ackFrameDescription), but not found in inflight window") + } else { + // TODO: ACK DONT DELETE PUBREL + for f in acked where shouldRemoveFromStorage { + self.storage?.remove(f) + } + printDebug("Acknowledge frame id \(msgid) success, acked: \(acked)") + self.tryTransport() + } + } + } + + /// Clean Inflight content to prevent message blocked, when next connection established + /// + /// !!Warning: it's a temporary method for hotfix #221 + func cleanAll() { + deliverQueue.sync { [weak self] in + guard let self = self else { return } + self.mqueue.removeAll() + self.inflight.removeAll() + } + } +} + +// MARK: Private Funcs +extension CocoaMQTTDeliver { + + // try transport a frame from mqueue to inflight + private func tryTransport() { + if isQueueEmpty || isInflightFull { return } + + // take out the earliest frame + if mqueue.isEmpty { return } + let frame = mqueue.remove(at: 0) + + deliver(frame) + + // keep trying after a transport + self.tryTransport() + } + + /// Try to deliver a frame + private func deliver(_ frame: Frame) { + if frame.qos == .qos0 { + // Send Qos0 message, whatever the in-flight queue is full + // TODO: A retrict deliver mode is need? + sendfun(frame) + } else { + + sendfun(frame) + let nowUptimeNs = DispatchTime.now().uptimeNanoseconds + inflight.append(InflightFrame(frame: frame, nextRetryAtUptimeNs: nextRetryDeadline(from: nowUptimeNs))) + + // Start a retry timer for resending it if it not receive PUBACK or PUBREC + if awaitingTimer == nil { + awaitingTimer = CocoaMQTTTimer.every(retryTimeInterval / 1000.0, name: "awaitingTimer") { [weak self] in + guard let self = self else { return } + self.deliverQueue.async { + self.redeliver() + } + } + } + } + } + + /// Attempt to redeliver in-flight messages + private func redeliver(nowUptimeNs: UInt64 = DispatchTime.now().uptimeNanoseconds) { + if isInflightEmpty { + // Revoke the awaiting timer + awaitingTimer = nil + return + } + for (idx, frame) in inflight.enumerated() where nowUptimeNs >= frame.nextRetryAtUptimeNs { + var duplicatedFrame = frame + duplicatedFrame.frame.dup = true + duplicatedFrame.nextRetryAtUptimeNs = nextRetryDeadline(after: frame.nextRetryAtUptimeNs, nowUptimeNs: nowUptimeNs) + + inflight[idx] = duplicatedFrame + + printInfo("Re-delivery frame \(duplicatedFrame.frame)") + sendfun(duplicatedFrame.frame) + } + } + + private func retryIntervalNanoseconds() -> UInt64 { + let intervalNs = retryTimeInterval * 1_000_000 + guard intervalNs.isFinite, intervalNs > 0 else { + return 1 + } + if intervalNs >= Double(UInt64.max) { + return UInt64.max + } + return UInt64(intervalNs.rounded()) + } + + private func nextRetryDeadline(from nowUptimeNs: UInt64) -> UInt64 { + let (nextDeadline, overflow) = nowUptimeNs.addingReportingOverflow(retryIntervalNanoseconds()) + return overflow ? UInt64.max : nextDeadline + } + + private func nextRetryDeadline(after currentDeadline: UInt64, nowUptimeNs: UInt64) -> UInt64 { + let intervalNs = retryIntervalNanoseconds() + guard nowUptimeNs >= currentDeadline else { + return currentDeadline + } + + let missedIntervals = ((nowUptimeNs - currentDeadline) / intervalNs) + 1 + let (advance, multiplyOverflow) = intervalNs.multipliedReportingOverflow(by: missedIntervals) + if multiplyOverflow { + return UInt64.max + } + let (nextDeadline, addOverflow) = currentDeadline.addingReportingOverflow(advance) + return addOverflow ? UInt64.max : nextDeadline + } + + @discardableResult + private func ackInflightFrame(withMsgid msgid: UInt16, type: FrameType) -> [Frame] { + var ackedFrames = [Frame]() + inflight = inflight.filterMap { frame in + + // -- ACK for PUBLISH + if let publish = frame.frame as? FramePublish, + publish.msgid == msgid { + + if publish.qos == .qos2 && type == .pubrec { // -- Replace PUBLISH with PUBREL + let pubrel = FramePubRel(msgid: publish.msgid) + + var nframe = frame + nframe.frame = pubrel + nframe.nextRetryAtUptimeNs = nextRetryDeadline(from: DispatchTime.now().uptimeNanoseconds) + + _ = storage?.write(pubrel) + sendfun(pubrel) + + ackedFrames.append(publish) + return (true, nframe) + } else if publish.qos == .qos1 && type == .puback { + ackedFrames.append(publish) + return (false, frame) + } + } + + // -- ACK for PUBREL + if let pubrel = frame.frame as? FramePubRel, + pubrel.msgid == msgid && type == .pubcomp { + + ackedFrames.append(pubrel) + return (false, frame) + } + return (true, frame) + } + + return ackedFrames + } + + private func sendfun(_ frame: Frame) { + guard let delegate = self.delegate else { + printError("The deliver delegate is nil!!! the frame will be drop: \(frame)") + return + } + + if frame.qos == .qos0 { + if let p = frame as? FramePublish { storage?.remove(p) } + } + + delegate.delegateQueue.async { + delegate.deliver(self, wantToSend: frame) + } + } +} + +// For tests +extension CocoaMQTTDeliver { + + func t_inflightFrames() -> [Frame] { + var frames = [Frame]() + for f in inflight { + frames.append(f.frame) + } + return frames + } + + func t_queuedFrames() -> [Frame] { + return mqueue + } + + @discardableResult + func t_setInflightNextRetryTime(_ nextRetryAtUptimeNs: UInt64, forMsgid msgid: UInt16) -> Bool { + return deliverQueue.sync { + for idx in inflight.indices { + if let publish = inflight[idx].frame as? FramePublish, publish.msgid == msgid { + inflight[idx].nextRetryAtUptimeNs = nextRetryAtUptimeNs + return true + } + if let pubrel = inflight[idx].frame as? FramePubRel, pubrel.msgid == msgid { + inflight[idx].nextRetryAtUptimeNs = nextRetryAtUptimeNs + return true + } + } + return false + } + } + + func t_retryIntervalNanoseconds() -> UInt64 { + return deliverQueue.sync { + retryIntervalNanoseconds() + } + } + + func t_redeliver(atUptimeNanoseconds uptimeNs: UInt64) { + deliverQueue.sync { + self.redeliver(nowUptimeNs: uptimeNs) + } + } +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTLogger.swift b/Pods/CocoaMQTT/Source/CocoaMQTTLogger.swift new file mode 100644 index 0000000..3408782 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTLogger.swift @@ -0,0 +1,71 @@ +// +// CocoaMQTTLogger.swift +// CocoaMQTT +// +// Created by HJianBo on 2019/5/2. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +// Convenience functions +func printDebug(_ message: String) { + CocoaMQTTLogger.logger.debug(message) +} + +func printInfo(_ message: String) { + CocoaMQTTLogger.logger.info(message) +} + +func printWarning(_ message: String) { + CocoaMQTTLogger.logger.warning(message) +} + +func printError(_ message: String) { + CocoaMQTTLogger.logger.error(message) +} + +// Enum log levels +public enum CocoaMQTTLoggerLevel: Int { + case debug = 0, info, warning, error, off +} + +open class CocoaMQTTLogger: NSObject { + + // Singleton + // Keep mutable global logger for backward compatibility. + // Accesses are intentionally marked as unsafe-isolated for Swift 6 readiness. + #if swift(>=6) + public nonisolated(unsafe) static var logger = CocoaMQTTLogger() + #else + public static var logger = CocoaMQTTLogger() + #endif + public override init() { super.init() } + + // min level + @ConcurrentAtomic(wrappedValue: .warning, label: "CocoaMQTTLogger.minLevel") + public var minLevel: CocoaMQTTLoggerLevel + + // logs + open func log(level: CocoaMQTTLoggerLevel, message: String) { + guard level.rawValue >= minLevel.rawValue else { return } + print("CocoaMQTT(\(level)): \(message)") + } + + func debug(_ message: String) { + log(level: .debug, message: message) + } + + func info(_ message: String) { + log(level: .info, message: message) + } + + func warning(_ message: String) { + log(level: .warning, message: message) + } + + func error(_ message: String) { + log(level: .error, message: message) + } + +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTMessage.swift b/Pods/CocoaMQTT/Source/CocoaMQTTMessage.swift new file mode 100644 index 0000000..b17a972 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTMessage.swift @@ -0,0 +1,66 @@ +// +// CocoaMQTTMessage.swift +// CocoaMQTT +// +// Created by Feng Lee on 14/8/3. +// Copyright (c) 2015 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT Message +public class CocoaMQTTMessage: NSObject { + + public var qos = CocoaMQTTQoS.qos1 + + public var topic: String + + public var payload: [UInt8] + + public var retained = false + + /// The `duplicated` property show that this message maybe has be received before + /// + /// - note: Readonly property + public var duplicated = false + + /// Return the payload as a utf8 string if possible + /// + /// It will return nil if the payload is not a valid utf8 string + public var string: String? { + NSString(bytes: payload, length: payload.count, encoding: String.Encoding.utf8.rawValue) as String? + } + + public init(topic: String, string: String, qos: CocoaMQTTQoS = .qos1, retained: Bool = false) { + self.topic = topic + self.payload = [UInt8](string.utf8) + self.qos = qos + self.retained = retained + } + + public init(topic: String, payload: [UInt8], qos: CocoaMQTTQoS = .qos1, retained: Bool = false) { + self.topic = topic + self.payload = payload + self.qos = qos + self.retained = retained + } +} + +extension CocoaMQTTMessage { + + public override var description: String { + return "CocoaMQTTMessage(topic: \(topic), qos: \(qos), payload: \(payload.summary))" + } +} + +// For test +extension CocoaMQTTMessage { + + var t_pub_frame: FramePublish { + var frame = FramePublish(topic: topic, payload: payload, qos: qos, msgid: 0) + frame.retained = retained + frame.dup = duplicated + return frame + } + +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTProperty.swift b/Pods/CocoaMQTT/Source/CocoaMQTTProperty.swift new file mode 100644 index 0000000..474d263 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTProperty.swift @@ -0,0 +1,189 @@ +// +// CocoaMQTTPropertyType.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/7/6. +// + +import Foundation + +public enum CocoaMQTTPropertyName: UInt8 { + case payloadFormatIndicator = 0x01 + case willExpiryInterval = 0x02 + case contentType = 0x03 + case responseTopic = 0x08 + case correlationData = 0x09 + case subscriptionIdentifier = 0x0B + case sessionExpiryInterval = 0x11 + case assignedClientIdentifier = 0x12 + case serverKeepAlive = 0x13 + case authenticationMethod = 0x15 + case authenticationData = 0x16 + case requestProblemInformation = 0x17 + case willDelayInterval = 0x18 + case requestResponseInformation = 0x19 + case responseInformation = 0x1A + case serverReference = 0x1C + case reasonString = 0x1F + case receiveMaximum = 0x21 + case topicAliasMaximum = 0x22 + case topicAlias = 0x23 + case maximumQoS = 0x24 + case retainAvailable = 0x25 + case userProperty = 0x26 + case maximumPacketSize = 0x27 + case wildcardSubscriptionAvailable = 0x28 + case subscriptionIdentifiersAvailable = 0x29 + case sharedSubscriptionAvailable = 0x2A +} + +public enum formatInt: Int { + case formatUint8 = 0x11 + case formatUint16 = 0x12 + case formatUint32 = 0x14 + case formatSint8 = 0x21 + case formatSint16 = 0x22 + case formatSint32 = 0x24 +} + +func getMQTTPropertyData(type: UInt8, value: [UInt8]) -> [UInt8] { + var properties = [UInt8]() + properties.append(UInt8(type)) + properties += value + return properties +} + +func getMQTTPropertyLength(type: UInt8, value: [UInt8]) -> [UInt8] { + var properties = [UInt8]() + properties.append(UInt8(type)) + properties += value + return properties +} + +func integerCompute(data: [UInt8], formatType: Int, offset: Int) -> (res: Int, newOffset: Int)? { + + switch formatType { + case formatInt.formatUint8.rawValue: + return (unsignedByteToInt(data: data[offset]), offset + 1) + case formatInt.formatUint16.rawValue: + return (unsignedBytesToInt(data0: data[offset], data1: data[offset + 1]), offset + 2) + case formatInt.formatUint32.rawValue: + return (unsignedBytesToInt(data0: data[offset], data1: data[offset + 1], data2: data[offset + 2], data3: data[offset + 3]), offset + 4) + case formatInt.formatSint8.rawValue: + return (unsignedToSigned(unsign: unsignedByteToInt(data: data[offset]), size: 8), offset + 1) + case formatInt.formatSint16.rawValue: + return (unsignedToSigned(unsign: unsignedBytesToInt(data0: data[offset], data1: data[offset + 1]), size: 16), offset + 2) + case formatInt.formatSint32.rawValue: + return (unsignedToSigned(unsign: unsignedBytesToInt(data0: data[offset], data1: data[offset + 1], data2: data[offset + 2], data3: data[offset + 3]), size: 32), offset + 4) + default: + printDebug("integerCompute nothing") + } + + return nil +} + +func unsignedByteToInt(data: UInt8) -> (Int) { + return (Int)(data & 0xFF) +} + +func unsignedBytesToInt(data0: UInt8, data1: UInt8) -> (Int) { + return (unsignedByteToInt(data: data0) << 8) + unsignedByteToInt(data: data1) +} + +func unsignedBytesToInt(data0: UInt8, data1: UInt8, data2: UInt8, data3: UInt8) -> (Int) { + return unsignedByteToInt(data: data3) + (unsignedByteToInt(data: data2) << 8) + (unsignedByteToInt(data: data1) << 16) + (unsignedByteToInt(data: data0) << 24) +} + +func unsignedToSigned(unsign: NSInteger, size: NSInteger) -> (Int) { + var res = unsign + if (res & (1 << size-1)) != 0 { + res = -1 * ((1 << size-1) - (res & ((1 << size-1) - 1))) + } + return res +} + +func unsignedByteToString(data: [UInt8], offset: Int) -> (resStr: String, newOffset: Int)? { + var newOffset = offset + + if offset + 1 > data.count { + return nil + } + + var length = 0 + let comRes = integerCompute(data: data, formatType: formatInt.formatUint16.rawValue, offset: newOffset) + length = comRes!.res + newOffset = comRes!.newOffset + + var stringData = Data() + for _ in 0 ..< length { + stringData.append(data[newOffset]) + newOffset += 1 + } + guard let res = String(data: stringData, encoding: .utf8) else { + return nil + } + + return (res, newOffset) +} + +func unsignedByteToBinary(data: [UInt8], offset: Int) -> (resStr: [UInt8], newOffset: Int)? { + var newOffset = offset + + if offset + 1 > data.count { + return nil + } + + var length = 0 + let comRes = integerCompute(data: data, formatType: formatInt.formatUint16.rawValue, offset: newOffset) + length = comRes!.res + newOffset = comRes!.newOffset + + var res = [UInt8]() + for _ in 0 ..< length { + res.append(data[newOffset]) + newOffset += 1 + } + + return (res, newOffset) +} + +// 1.5.5 Variable Byte Integer +// The Variable Byte Integer is encoded using an encoding scheme which uses a single byte for values up to 127. Larger values are handled as follows. The least significant seven bits of each byte encode the data, and the most significant bit is used to indicate whether there are bytes following in the representation. Thus, each byte encodes 128 values and a "continuation bit". The maximum number of bytes in the Variable Byte Integer field is four. The encoded value MUST use the minimum number of bytes necessary to represent the value [MQTT-1.5.5-1]. This is shown in Table 1‑1 Size of Variable Byte Integer. +func decodeVariableByteInteger(data: [UInt8], offset: Int) -> (res: Int, newOffset: Int) { + var newOffset = offset + var count = 0 + var res: Int = 0 + while newOffset < data.count { + let newValue = Int(data[newOffset] & 0x7f) << count + res += newValue + if (data[newOffset] & 0x80) == 0 || count >= 21 { + newOffset += 1 + break + } + newOffset += 1 + count += 7 + } + return (res, newOffset) +} + +func beVariableByteInteger(length: Int) -> [UInt8] { + var res = [UInt8]() + var tmpLen: Int = length + repeat { + var d: UInt8 = UInt8(tmpLen % 128) + tmpLen /= 128 + if tmpLen > 0 { + d |= 0x80 + } + res.append(d) + } while(tmpLen > 0) + + return res +} + +func beVariableByteInteger(_ data: UInt32) -> [UInt8]? { + if data > 0x0fffffff { + return nil + } + return beVariableByteInteger(length: Int(data)) +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTReader.swift b/Pods/CocoaMQTT/Source/CocoaMQTTReader.swift new file mode 100644 index 0000000..b075ffc --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTReader.swift @@ -0,0 +1,220 @@ +// +// CocoaMQTTReader.swift +// CocoaMQTT +// +// Created by HJianBo on 2019/5/21. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// Read tag for AsyncSocket +enum CocoaMQTTReadTag: Int { + case header = 0 + case length + case payload +} + +/// +protocol CocoaMQTTReaderDelegate: AnyObject { + + func didReceive(_ reader: CocoaMQTTReader, connack: FrameConnAck) + + func didReceive(_ reader: CocoaMQTTReader, publish: FramePublish) + + func didReceive(_ reader: CocoaMQTTReader, puback: FramePubAck) + + func didReceive(_ reader: CocoaMQTTReader, pubrec: FramePubRec) + + func didReceive(_ reader: CocoaMQTTReader, pubrel: FramePubRel) + + func didReceive(_ reader: CocoaMQTTReader, pubcomp: FramePubComp) + + func didReceive(_ reader: CocoaMQTTReader, suback: FrameSubAck) + + func didReceive(_ reader: CocoaMQTTReader, unsuback: FrameUnsubAck) + + func didReceive(_ reader: CocoaMQTTReader, pingresp: FramePingResp) + + func didReceive(_ reader: CocoaMQTTReader, disconnect: FrameDisconnect) + + func didReceive(_ reader: CocoaMQTTReader, auth: FrameAuth) +} + +class CocoaMQTTReader { + + private var socket: CocoaMQTTSocketProtocol + + private weak var delegate: CocoaMQTTReaderDelegate? + + private let timeout: TimeInterval = 30_000 + + /* -- Reader states -- */ + private var header: UInt8 = 0 + private var length: UInt = 0 + private var data: [UInt8] = [] + private var multiply = 1 + /* -- Reader states -- */ + + init(socket: CocoaMQTTSocketProtocol, delegate: CocoaMQTTReaderDelegate?) { + self.socket = socket + self.delegate = delegate + } + + func start() { + readHeader() + } + + func headerReady(_ header: UInt8) { + self.header = header + readLength() + } + + func lengthReady(_ byte: UInt8) { + length += (UInt)((Int)(byte & 127) * multiply) + // done + if byte & 0x80 == 0 { + if length == 0 { + frameReady() + } else { + readPayload() + } + // more + } else { + let result = multiply.multipliedReportingOverflow(by: 128) + if !result.overflow { + multiply = result.partialValue + } else { + reset() + } + readLength() + } + } + + func payloadReady(_ data: Data) { + self.data = [UInt8](repeating: 0, count: data.count) + data.copyBytes(to: &(self.data), count: data.count) + frameReady() + } + + private func readHeader() { + reset() + socket.readData(toLength: 1, withTimeout: -1, tag: CocoaMQTTReadTag.header.rawValue) + } + + private func readLength() { + socket.readData(toLength: 1, withTimeout: timeout, tag: CocoaMQTTReadTag.length.rawValue) + } + + private func readPayload() { + socket.readData(toLength: length, withTimeout: timeout, tag: CocoaMQTTReadTag.payload.rawValue) + } + + private func frameReady() { + + guard let frameType = FrameType(rawValue: UInt8(header & 0xF0)) else { + protocolError("Received unknown frame type, header: \(header), data:\(data)") + return + } + + // XXX: stupid implement + + switch frameType { + case .connack: + guard let connack = FrameConnAck(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, connack: connack) + case .publish: + guard let publish = FramePublish(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, publish: publish) + case .puback: + guard let puback = FramePubAck(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, puback: puback) + case .pubrec: + guard let pubrec = FramePubRec(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, pubrec: pubrec) + case .pubrel: + guard let pubrel = FramePubRel(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, pubrel: pubrel) + case .pubcomp: + guard let pubcomp = FramePubComp(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, pubcomp: pubcomp) + case .suback: + guard let frame = FrameSubAck(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, suback: frame) + case .unsuback: + guard let frame = FrameUnsubAck(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, unsuback: frame) + case .pingresp: + guard let frame = FramePingResp(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, pingresp: frame) + case .disconnect: + guard isMQTT5ProtocolVersion() else { + protocolError("Reader received MQTT5-only frame \(frameType) in non-MQTT5 mode, data: \(data)") + return + } + guard let frame = FrameDisconnect(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, disconnect: frame) + case .auth: + guard isMQTT5ProtocolVersion() else { + protocolError("Reader received MQTT5-only frame \(frameType) in non-MQTT5 mode, data: \(data)") + return + } + guard let frame = FrameAuth(packetFixedHeaderType: header, bytes: data) else { + protocolError("Reader parse \(frameType) failed, data: \(data)") + return + } + delegate?.didReceive(self, auth: frame) + default: + protocolError("Received unsupported frame type \(frameType), data: \(data)") + return + } + + readHeader() + } + + private func protocolError(_ reason: String) { + printError(reason) + socket.disconnect() + } + + private func isMQTT5ProtocolVersion() -> Bool { + return CocoaMQTTStorage()?.queryMQTTVersion() == "5.0" + } + + private func reset() { + length = 0 + multiply = 1 + header = 0 + data = [] + } +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTReasonCode.swift b/Pods/CocoaMQTT/Source/CocoaMQTTReasonCode.swift new file mode 100644 index 0000000..e677e3e --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTReasonCode.swift @@ -0,0 +1,141 @@ +// +// CocoaMQTTReasonCode.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/7/4. +// + +import Foundation + +@objc public enum CocoaMQTTAUTHReasonCode: UInt8 { + case success = 0x00 + case continueAuthentication = 0x18 + case ReAuthenticate = 0x19 +} + +@objc public enum CocoaMQTTCONNACKReasonCode: UInt8 { + case success = 0x00 + case unspecifiedError = 0x80 + case malformedPacket = 0x81 + case protocolError = 0x82 + case implementationSpecificError = 0x83 + case unsupportedProtocolVersion = 0x84 + case clientIdentifierNotValid = 0x85 + case badUsernameOrPassword = 0x86 + case notAuthorized = 0x87 + case serverUnavailable = 0x88 + case serverBusy = 0x89 + case banned = 0x8A + case badAuthenticationMethod = 0x8C + case topicNameInvalid = 0x90 + case packetTooLarge = 0x95 + case quotaExceeded = 0x97 + case payloadFormatInvalid = 0x99 + case retainNotSupported = 0x9A + case qosNotSupported = 0x9B + case useAnotherServer = 0x9C + case serverMoved = 0x9D + case connectionRateExceeded = 0x9F +} + +@objc public enum CocoaMQTTDISCONNECTReasonCode: UInt8 { + case normalDisconnection = 0x00 + case disconnectWithWillMessage = 0x04 + case unspecifiedError = 0x80 + case malformedPacket = 0x81 + case protocolError = 0x82 + case implementationSpecificError = 0x83 + case notAuthorized = 0x87 + case serverBusy = 0x89 + case serverShuttingDown = 0x8B + case keepAliveTimeout = 0x8D + case sessionTakenOver = 0x8E + case topicFilterInvalid = 0x8F + case topicNameInvalid = 0x90 + case receiveMaximumExceeded = 0x93 + case topicAliasInvalid = 0x94 + case packetTooLarge = 0x95 + case messageRateTooHigh = 0x96 + case quotaExceeded = 0x97 + case administrativeAction = 0x98 + case payloadFormatInvalid = 0x99 + case retainNotSupported = 0x9A + case qosNotSupported = 0x9B + case useAnotherServer = 0x9C + case serverMoved = 0x9D + case sharedSubscriptionsNotSupported = 0x9E + case connectionRateExceeded = 0x9F + case maximumConnectTime = 0xA0 + case subscriptionIdentifiersNotSupported = 0xA1 + case wildcardSubscriptionsNotSupported = 0xA2 +} + +@objc public enum CocoaMQTTPUBACKReasonCode: UInt8 { + case success = 0x00 + case noMatchingSubscribers = 0x10 + case unspecifiedError = 0x80 + case implementationSpecificError = 0x83 + case notAuthorized = 0x87 + case topicNameInvalid = 0x90 + case packetIdentifierInUse = 0x91 + case quotaExceeded = 0x97 + case payloadFormatInvalid = 0x99 +} + +@objc public enum CocoaMQTTPUBCOMPReasonCode: UInt8 { + case success = 0x00 + case packetIdentifierNotFound = 0x92 +} + +@objc public enum CocoaMQTTPUBRECReasonCode: UInt8 { + case success = 0x00 + case noMatchingSubscribers = 0x10 + case unspecifiedError = 0x80 + case implementationSpecificError = 0x83 + case notAuthorized = 0x87 + case topicNameInvalid = 0x90 + case packetIdentifierInUse = 0x91 + case quotaExceeded = 0x97 + case payloadFormatInvalid = 0x99 +} + +@objc public enum CocoaMQTTPUBRELReasonCode: UInt8 { + case success = 0x00 + case packetIdentifierNotFound = 0x92 +} + +@objc public enum CocoaMQTTSUBACKReasonCode: UInt8 { + case grantedQoS0 = 0x00 + case grantedQoS1 = 0x01 + case grantedQoS2 = 0x02 + case unspecifiedError = 0x80 + case implementationSpecificError = 0x83 + case notAuthorized = 0x87 + case topicFilterInvalid = 0x8F + case packetIdentifierInUse = 0x91 + case quotaExceeded = 0x97 + case sharedSubscriptionsNotSupported = 0x9E + case subscriptionIdentifiersNotSupported = 0xA1 + case wildcardSubscriptionsNotSupported = 0xA2 +} + +@objc public enum CocoaMQTTUNSUBACKReasonCode: UInt8 { + case success = 0x00 + case noSubscriptionExisted = 0x11 + case unspecifiedError = 0x80 + case implementationSpecificError = 0x83 + case notAuthorized = 0x87 + case topicFilterInvalid = 0x8F + case packetIdentifierInUse = 0x91 +} + +@objc public enum CocoaRetainHandlingOption: UInt8 { + case sendOnSubscribe = 0 + case sendOnlyWhenSubscribeIsNew = 1 + case none = 2 +} + +@objc public enum PayloadFormatIndicator: UInt8 { + case unspecified = 0x00 + case utf8 = 0x01 +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTSocket.swift b/Pods/CocoaMQTT/Source/CocoaMQTTSocket.swift new file mode 100644 index 0000000..21ad0fc --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTSocket.swift @@ -0,0 +1,136 @@ +// +// CocoaMQTTSocket.swift +// CocoaMQTT +// +// Created by Cyrus Ingraham on 12/13/19. +// + +import Foundation +import MqttCocoaAsyncSocket + +// MARK: - Interfaces + +public protocol CocoaMQTTSocketDelegate: AnyObject { + func socketConnected(_ socket: CocoaMQTTSocketProtocol) + func socket(_ socket: CocoaMQTTSocketProtocol, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Swift.Void) + func socketUrlSession(_ socket: CocoaMQTTSocketProtocol, didReceiveTrust trust: SecTrust, didReceiveChallenge challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) + func socket(_ socket: CocoaMQTTSocketProtocol, didWriteDataWithTag tag: Int) + func socket(_ socket: CocoaMQTTSocketProtocol, didRead data: Data, withTag tag: Int) + func socketDidDisconnect(_ socket: CocoaMQTTSocketProtocol, withError err: Error?) +} + +public protocol CocoaMQTTSocketProtocol { + + var enableSSL: Bool { get set } + + func setDelegate(_ theDelegate: CocoaMQTTSocketDelegate?, delegateQueue: DispatchQueue?) + func connect(toHost host: String, onPort port: UInt16) throws + func connect(toHost host: String, onPort port: UInt16, withTimeout timeout: TimeInterval) throws + func disconnect() + func readData(toLength length: UInt, withTimeout timeout: TimeInterval, tag: Int) + func write(_ data: Data, withTimeout timeout: TimeInterval, tag: Int) +} + +// MARK: - CocoaMQTTSocket + +public class CocoaMQTTSocket: NSObject { + + public var backgroundOnSocket = true + + public var enableSSL = false + + /// + public var sslSettings: [String: NSObject]? + + /// Allow self-signed ca certificate. + /// + /// Default is false + public var allowUntrustCACertificate = false + + fileprivate let reference = MGCDAsyncSocket() + fileprivate weak var delegate: CocoaMQTTSocketDelegate? + + public override init() { super.init() } +} + +extension CocoaMQTTSocket: CocoaMQTTSocketProtocol { + public func setDelegate(_ theDelegate: CocoaMQTTSocketDelegate?, delegateQueue: DispatchQueue?) { + delegate = theDelegate + reference.setDelegate((delegate != nil ? self : nil), delegateQueue: delegateQueue) + } + + public func connect(toHost host: String, onPort port: UInt16) throws { + try connect(toHost: host, onPort: port, withTimeout: -1) + } + + public func connect(toHost host: String, onPort port: UInt16, withTimeout timeout: TimeInterval) throws { + try reference.connect(toHost: host, onPort: port, withTimeout: timeout) + } + + public func disconnect() { + reference.disconnect() + } + + public func readData(toLength length: UInt, withTimeout timeout: TimeInterval, tag: Int) { + reference.readData(toLength: length, withTimeout: timeout, tag: tag) + } + + public func write(_ data: Data, withTimeout timeout: TimeInterval, tag: Int) { + reference.write(data, withTimeout: timeout, tag: tag) + } +} + +extension CocoaMQTTSocket: MGCDAsyncSocketDelegate { + public func socket(_ sock: MGCDAsyncSocket, didConnectToHost host: String, port: UInt16) { + printInfo("Connected to \(host) : \(port)") + + #if os(iOS) + if backgroundOnSocket { + sock.perform { + guard sock.enableBackgroundingOnSocket() else { + printWarning("Enable backgrounding socket failed, please check related permissions") + return + } + printInfo("Enable backgrounding socket successfully") + } + } + #endif + + if enableSSL { + var setting = sslSettings ?? [:] + if allowUntrustCACertificate { + setting[MGCDAsyncSocketManuallyEvaluateTrust as String] = NSNumber(value: true) + } + sock.startTLS(setting) + } else { + delegate?.socketConnected(self) + } + } + + public func socket(_ sock: MGCDAsyncSocket, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Swift.Void) { + if let theDelegate = delegate { + theDelegate.socket(self, didReceive: trust, completionHandler: completionHandler) + } else { + completionHandler(false) + } + } + + public func socketDidSecure(_ sock: MGCDAsyncSocket) { + printDebug("socket did secure") + delegate?.socketConnected(self) + } + + public func socket(_ sock: MGCDAsyncSocket, didWriteDataWithTag tag: Int) { + printDebug("socket wrote data \(tag)") + delegate?.socket(self, didWriteDataWithTag: tag) + } + + public func socket(_ sock: MGCDAsyncSocket, didRead data: Data, withTag tag: Int) { + delegate?.socket(self, didRead: data, withTag: tag) + } + + public func socketDidDisconnect(_ sock: MGCDAsyncSocket, withError err: Error?) { + printDebug("socket disconnected") + delegate?.socketDidDisconnect(self, withError: err) + } +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTStorage.swift b/Pods/CocoaMQTT/Source/CocoaMQTTStorage.swift new file mode 100644 index 0000000..86a8658 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTStorage.swift @@ -0,0 +1,161 @@ +// +// CocoaMQTTStorage.swift +// CocoaMQTT +// +// Created by JianBo on 2019/10/6. +// Copyright © 2019 emqtt.io. All rights reserved. +// + +import Foundation + +protocol CocoaMQTTStorageProtocol { + + var clientId: String { get set } + + init?(by clientId: String) + + func write(_ frame: FramePublish) -> Bool + + func write(_ frame: FramePubRel) -> Bool + + func remove(_ frame: FramePublish) + + func remove(_ frame: FramePubRel) + + func synchronize() -> Bool + + /// Read all stored messages by saving order + func readAll() -> [Frame] +} + +final class CocoaMQTTStorage: CocoaMQTTStorageProtocol { + + var clientId: String = "" + + var userDefault: UserDefaults = UserDefaults() + + var versionDefault: UserDefaults = UserDefaults() + + init?() { + versionDefault = UserDefaults() + } + + init?(by clientId: String) { + guard let userDefault = UserDefaults(suiteName: CocoaMQTTStorage.name(clientId)) else { + return nil + } + + self.clientId = clientId + self.userDefault = userDefault + } + + deinit { + userDefault.synchronize() + versionDefault.synchronize() + } + + func setMQTTVersion(_ version: String) { + versionDefault.set(version, forKey: "cocoamqtt.emqx.version") + } + + func queryMQTTVersion() -> String { + return versionDefault.string(forKey: "cocoamqtt.emqx.version") ?? "3.1.1" + } + + func write(_ frame: FramePublish) -> Bool { + guard frame.qos > .qos0 else { + return false + } + userDefault.set(frame.bytes(version: queryMQTTVersion()), forKey: key(frame.msgid)) + return true + } + + func write(_ frame: FramePubRel) -> Bool { + userDefault.set(frame.bytes( version: queryMQTTVersion()), forKey: key(frame.msgid)) + return true + } + + func remove(_ frame: FramePublish) { + userDefault.removeObject(forKey: key(frame.msgid)) + } + + func remove(_ frame: FramePubRel) { + userDefault.removeObject(forKey: key(frame.msgid)) + } + + func remove(_ frame: Frame) { + if let pub = frame as? FramePublish { + userDefault.removeObject(forKey: key(pub.msgid)) + } else if let rel = frame as? FramePubRel { + userDefault.removeObject(forKey: key(rel.msgid)) + } + } + + func synchronize() -> Bool { + return userDefault.synchronize() + } + + func readAll() -> [Frame] { + return __read(needDelete: false) + } + + func takeAll() -> [Frame] { + return __read(needDelete: true) + } + + private func key(_ msgid: UInt16) -> String { + return "\(msgid)" + } + + private static func name(_ clientId: String) -> String { + return "cocomqtt-\(clientId)" + } + + private func parse(_ bytes: [UInt8]) -> (UInt8, [UInt8])? { + // FramePubRel is 4 bytes long + guard bytes.count > 3 else { + return nil + } + // bytes 1..<5 may be 'Remaining Length' + for i in 1 ..< min(5, bytes.count) where (bytes[i] & 0x80) == 0 { + return (bytes[0], Array(bytes.suffix(from: i + 1))) + } + + return nil + } + + private func __read(needDelete: Bool) -> [Frame] { + var frames = [Frame]() + let allObjs = userDefault.dictionaryRepresentation().sorted { (k1, k2) in + let left = UInt16(k1.key) + let right = UInt16(k2.key) + + switch (left, right) { + case let (l?, r?): + return l < r + case (_?, nil): + return true + case (nil, _?): + return false + case (nil, nil): + return k1.key < k2.key + } + } + for (k, v) in allObjs { + guard let bytes = v as? [UInt8] else { continue } + guard let parsed = parse(bytes) else { continue } + + if needDelete { + userDefault.removeObject(forKey: k) + } + + if let f = FramePublish(packetFixedHeaderType: parsed.0, bytes: parsed.1) { + frames.append(f) + } else if let f = FramePubRel(packetFixedHeaderType: parsed.0, bytes: parsed.1) { + frames.append(f) + } + } + return frames + } + +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTTimer.swift b/Pods/CocoaMQTT/Source/CocoaMQTTTimer.swift new file mode 100644 index 0000000..31d2fb6 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTTimer.swift @@ -0,0 +1,110 @@ +// +// CocoaMQTTTimer.swift +// CocoaMQTT +// +// Contributed by Jens(https://github.com/jmiltner) +// +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +// modeled after RepeatingTimer by Daniel Galasko: https://medium.com/@danielgalasko/a-background-repeating-timer-in-swift-412cecfd2ef9 +/// RepeatingTimer mimics the API of DispatchSourceTimer but in a way that prevents +/// crashes that occur from calling resume multiple times on a timer that is +/// already resumed (noted by https://github.com/SiftScience/sift-ios/issues/52) +class CocoaMQTTTimer { + + let timeInterval: TimeInterval + let startDelay: TimeInterval + let name: String + + init(delay: TimeInterval?=nil, name: String, timeInterval: TimeInterval) { + self.name = name + self.timeInterval = timeInterval + if let delay = delay { + self.startDelay = delay + } else { + self.startDelay = timeInterval + } + } + + class func every(_ interval: TimeInterval, name: String, _ block: @escaping () -> Void) -> CocoaMQTTTimer { + let timer = CocoaMQTTTimer(name: name, timeInterval: interval) + timer.eventHandler = block + timer.resume() + return timer + } + + @discardableResult + class func after(_ interval: TimeInterval, name: String, _ block: @escaping () -> Void) -> CocoaMQTTTimer { + let timer: CocoaMQTTTimer? = CocoaMQTTTimer(delay: interval, name: name, timeInterval: 0) + timer?.eventHandler = { [weak timer] in + block() + timer?.suspend() + timer = nil + } + timer?.resume() + return timer! + } + + /// Execute the tasks concurrently on the target_queue with default QOS + private static let target_queue = DispatchQueue(label: "io.emqx.CocoaMQTT.TimerQueue", qos: .default, attributes: .concurrent) + + /// Execute each timer tasks serially and use the target queue for concurrency among timers + private lazy var timer: DispatchSourceTimer = { + let queue = DispatchQueue(label: "io.emqx.CocoaMQTT." + name, target: CocoaMQTTTimer.target_queue) + let t = DispatchSource.makeTimerSource(flags: .strict, queue: queue) + t.schedule(deadline: .now() + self.startDelay, repeating: self.timeInterval > 0 ? Double(self.timeInterval) : Double.infinity) + t.setEventHandler(handler: { [weak self] in + self?.eventHandler?() + }) + return t + }() + + var eventHandler: (() -> Void)? + + private enum State { + case suspended + case resumed + case canceled + } + + private var state: State = .suspended + + deinit { + timer.setEventHandler {} + timer.cancel() + /* + If the timer is suspended, calling cancel without resuming + triggers a crash. This is documented here https://forums.developer.apple.com/thread/15902 + */ + resume() + eventHandler = nil + } + + func resume() { + if state == .resumed { + return + } + state = .resumed + timer.resume() + } + + func suspend() { + if state == .suspended { + return + } + state = .suspended + timer.suspend() + } + + /// Manually cancel timer + func cancel() { + if state == .canceled { + return + } + state = .canceled + timer.cancel() + } +} diff --git a/Pods/CocoaMQTT/Source/CocoaMQTTTypes.swift b/Pods/CocoaMQTT/Source/CocoaMQTTTypes.swift new file mode 100644 index 0000000..d007192 --- /dev/null +++ b/Pods/CocoaMQTT/Source/CocoaMQTTTypes.swift @@ -0,0 +1,166 @@ +// +// CocoaMQTTTypes.swift +// CocoaMQTT +// +// Created by HJianBo on 2019/6/9. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// Encode and Decode big-endian UInt16 +extension UInt16 { + /// Most Significant Byte (MSB) + private var highByte: UInt8 { + return UInt8( (self & 0xFF00) >> 8) + } + + /// Least Significant Byte (LSB) + private var lowByte: UInt8 { + return UInt8(self & 0x00FF) + } + + var hlBytes: [UInt8] { + return [highByte, lowByte] + } +} + +extension String { + /// String with two bytes length + var bytesWithLength: [UInt8] { + return UInt16(utf8.count).hlBytes + utf8 + } + + var stringUTF8: String { + let data = self.data(using: .nonLossyASCII) + return String(data: data!, encoding: .utf8) ?? "" + } +} + +extension Bool { + /// Bool to bit of UInt8 + var bit: UInt8 { + return self ? 1 : 0 + } + + /// Initial a bool with a bit + init(bit: UInt8) { + self = (bit == 0) ? false : true + } +} + +extension UInt8 { + /// Read a bit value + func bitAt(_ offset: UInt8) -> UInt8 { + return (self >> offset) & 0x01 + } +} + +public enum CocoaMQTTError: Error { + case invalidURL + case readTimeout + case writeTimeout + @available(OSX 10.15, iOS 13.0, watchOS 6.0, tvOS 13.0, *) + public enum FoundationConnection: Error { + case closed(URLSessionWebSocketTask.CloseCode) + } +} + +extension Array where Element == UInt8 { + var summary: String { + if self.count <= 10 { + return "\(self)" + } else { + var descr = "[\(self[0])" + for i in self[1..<10] { + descr += ", \(i)" + } + return "\(descr), ...]" + } + } +} + +extension Data { + var uint8: UInt8 { + var number: UInt8 = 0 + self.copyBytes(to: &number, count: MemoryLayout.size) + return number + } + + var uint16: UInt16 { + let i16array = self.withUnsafeBytes { $0.load(as: UInt16.self) } + return i16array + } + + var uint32: UInt32 { + let i32array = self.withUnsafeBytes { $0.load(as: UInt32.self) } + return i32array + } + + var uuid: NSUUID? { + var bytes = [UInt8](repeating: 0, count: self.count) + self.copyBytes(to: &bytes, count: self.count * MemoryLayout.size) + return NSUUID(uuidBytes: bytes) + } + var stringASCII: String? { + return NSString(data: self, encoding: String.Encoding.ascii.rawValue) as String? + } + + var stringUTF8: String? { + return NSString(data: self, encoding: String.Encoding.utf8.rawValue) as String? + } + + struct HexEncodingOptions: OptionSet { + let rawValue: Int + static let upperCase = HexEncodingOptions(rawValue: 1 << 0) + } + + func hexEncodedString(options: HexEncodingOptions = []) -> String { + let format = options.contains(.upperCase) ? "%02hhX" : "%02hhx" + return map { String(format: format, $0) }.joined() + } + +} + +extension Int { + var data: Data { + var int = self + return Data(bytes: &int, count: MemoryLayout.size) + } +} + +extension UInt8 { + var data: Data { + var int = self + return Data(bytes: &int, count: MemoryLayout.size) + } +} + +extension UInt16 { + var data: Data { + var int = self + return Data(bytes: &int, count: MemoryLayout.size) + } +} + +extension UInt32 { + var data: Data { + var int = self + return Data(bytes: &int, count: MemoryLayout.size) + } + + var byteArrayLittleEndian: [UInt8] { + return [ + UInt8((self & 0xFF000000) >> 24), + UInt8((self & 0x00FF0000) >> 16), + UInt8((self & 0x0000FF00) >> 8), + UInt8(self & 0x000000FF) + ] + } +} + +extension Dictionary where Key == String, Value == String { + var userPropertyBytes: [UInt8] { + return reduce([UInt8](), { $0 + getMQTTPropertyData(type: CocoaMQTTPropertyName.userProperty.rawValue, value: $1.key.bytesWithLength + $1.value.bytesWithLength) }) + } +} diff --git a/Pods/CocoaMQTT/Source/Frame.swift b/Pods/CocoaMQTT/Source/Frame.swift new file mode 100644 index 0000000..02c9f48 --- /dev/null +++ b/Pods/CocoaMQTT/Source/Frame.swift @@ -0,0 +1,215 @@ +// +// Frame.swift +// CocoaMQTT +// +// Created by Feng Lee on 14/8/3. +// Copyright (c) 2015 emqx.io. All rights reserved. +// + +import Foundation + +/// Quality of Service levels +@objc public enum CocoaMQTTQoS: UInt8, CustomStringConvertible { + /// At most once delivery + case qos0 = 0 + + /// At least once delivery + case qos1 + + /// Exactly once delivery + case qos2 + + /// !!! Used SUBACK frame only + case FAILURE = 0x80 + + public var description: String { + switch self { + case .qos0: return "qos0" + case .qos1: return "qos1" + case .qos2: return "qos2" + case .FAILURE: return "Failure" + } + } +} + +extension CocoaMQTTQoS: Comparable { + + public static func < (lhs: CocoaMQTTQoS, rhs: CocoaMQTTQoS) -> Bool { + return lhs.rawValue < rhs.rawValue + } + + public static func <= (lhs: CocoaMQTTQoS, rhs: CocoaMQTTQoS) -> Bool { + return lhs.rawValue <= rhs.rawValue + } + + public static func > (lhs: CocoaMQTTQoS, rhs: CocoaMQTTQoS) -> Bool { + return lhs.rawValue > rhs.rawValue + } + + public static func >= (lhs: CocoaMQTTQoS, rhs: CocoaMQTTQoS) -> Bool { + return lhs.rawValue >= rhs.rawValue + } +} + +/// MQTT Frame Type +enum FrameType: UInt8 { + case reserved = 0x00 + case connect = 0x10 + case connack = 0x20 + case publish = 0x30 + case puback = 0x40 + case pubrec = 0x50 + case pubrel = 0x60 + case pubcomp = 0x70 + case subscribe = 0x80 + case suback = 0x90 + case unsubscribe = 0xA0 + case unsuback = 0xB0 + case pingreq = 0xC0 + case pingresp = 0xD0 + case disconnect = 0xE0 + case auth = 0xF0 +} + +/// The frame can be initialized with a bytes +protocol InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) +} + +/// MQTT Frame protocol +protocol Frame { + + /// Each MQTT Control Packet contains a fixed header + /// MQTT 3.1.1 + var packetFixedHeaderType: UInt8 {get set} + /// MQTT 5.0 + func fixedHeader() -> [UInt8] + + /// Some types of MQTT Control Packets contain a variable header component + /// MQTT 3.1.1 + func variableHeader() -> [UInt8] + + /// MQTT 5.0 + func variableHeader5() -> [UInt8] + + /// MQTT 5.0 The last field in the Variable Header of the CONNECT, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, DISCONNECT, and AUTH packet is a set of Properties. In the CONNECT packet there is also an optional set of Properties in the Will Properties field with the Payload. + func properties() -> [UInt8] + + /// Some MQTT Control Packets contain a payload as the final part of the packet + /// MQTT 3.1.1 + func payload() -> [UInt8] + + /// MQTT 5.0 + func payload5() -> [UInt8] + + /// fixedHeader + variableHeader + properties + payload + func allData() -> [UInt8] +} + +extension Frame { + + /// Pack struct to binary + func bytes(version: String) -> [UInt8] { + + if version == "5.0" { + let fixedHeader = self.fixedHeader() + let variableHeader5 = self.variableHeader5() + let payload5 = self.payload5() + let properties = self.properties() + let len5 = UInt32(variableHeader5.count + properties.count + payload5.count) + + printDebug("==========================MQTT 5.0==========================") + printDebug("packetFixedHeaderType \(packetFixedHeaderType)") + printDebug("fixedHeader \(fixedHeader)") + printDebug("remainingLen(len: len) \(remainingLen(len: len5))") + printDebug("variableHeader \(variableHeader5)") + printDebug("properties \(properties)") + printDebug("payload \(payload5)") + printDebug("=============================================================") + + return [packetFixedHeaderType] + remainingLen(len: len5) + variableHeader5 + properties + payload5 + } else { + + let variableHeader = self.variableHeader() + let payload = self.payload() + + let len = UInt32(variableHeader.count + payload.count) + + printDebug("=========================MQTT 3.1.1=========================") + printDebug("packetFixedHeaderType \(packetFixedHeaderType)") + printDebug("remainingLen(len: len) \(remainingLen(len: len))") + printDebug("variableHeader \(variableHeader)") + printDebug("payload \(payload)") + printDebug("=============================================================") + + return [packetFixedHeaderType] + remainingLen(len: len) + variableHeader + payload + } + + } + + private func remainingLen(len: UInt32) -> [UInt8] { + var bytes: [UInt8] = [] + var digit: UInt8 = 0 + + var len = len + repeat { + digit = UInt8(len % 128) + len /= 128 + // if there are more digits to encode, set the top bit of this digit + if len > 0 { + digit |= 0x80 + } + bytes.append(digit) + } while len > 0 + + return bytes + } +} + +/// Fixed Header Attributes +extension Frame { + + /// The Fixed Header consist of the following attritutes + /// + /// +---------+----------+-------+--------+ + /// | 7 6 5 4 | 3 | 2 1 | 0 | + /// +---------+----------+-------+--------+ + /// | Type | DUP flag | QoS | RETAIN | + /// +-------------------------------------+ + + /// The type of the Frame + var type: FrameType { + return FrameType(rawValue: packetFixedHeaderType & 0xF0)! + } + + /// Dup flag + var dup: Bool { + get { + return ((packetFixedHeaderType & 0x08) >> 3) == 0 ? false : true + } + set { + packetFixedHeaderType = (packetFixedHeaderType & 0xF7) | (newValue.bit << 3) + } + } + + /// Qos level + var qos: CocoaMQTTQoS { + get { + return CocoaMQTTQoS(rawValue: (packetFixedHeaderType & 0x06) >> 1)! + } + set { + packetFixedHeaderType = (packetFixedHeaderType & 0xF9) | (newValue.rawValue << 1) + } + } + + /// Retained flag + var retained: Bool { + get { + return (packetFixedHeaderType & 0x01) == 0 ? false : true + } + set { + packetFixedHeaderType = (packetFixedHeaderType & 0xFE) | newValue.bit + } + } +} diff --git a/Pods/CocoaMQTT/Source/FrameAuth.swift b/Pods/CocoaMQTT/Source/FrameAuth.swift new file mode 100644 index 0000000..957f270 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FrameAuth.swift @@ -0,0 +1,87 @@ +// +// FrameAuth.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/7/4. +// + +import Foundation + +struct FrameAuth: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.auth.rawValue + + // 3.15.2.1 Authenticate Reason Code + var sendReasonCode: CocoaMQTTAUTHReasonCode? + var receiveReasonCode: CocoaMQTTAUTHReasonCode? + + // 3.15.2.2 AUTH Properties + var authProperties: MqttAuthProperties? + + init(reasonCode: CocoaMQTTAUTHReasonCode, authProperties: MqttAuthProperties) { + self.sendReasonCode = reasonCode + self.authProperties = authProperties + } + +} + +extension FrameAuth { + + func fixedHeader() -> [UInt8] { + var header = [UInt8]() + header += [FrameType.auth.rawValue] + // header += [UInt8(variableHeader5().count)] + + return header + } + + func variableHeader5() -> [UInt8] { + var header = [UInt8]() + header += [sendReasonCode!.rawValue] + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { return []} + + func properties() -> [UInt8] { + return authProperties?.properties ?? [] + + } + + func allData() -> [UInt8] { + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return [] } + + func payload() -> [UInt8] { return [] } +} + +extension FrameAuth: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + guard protocolVersion == "5.0" else { + return nil + } + if bytes.isEmpty { + receiveReasonCode = .success + } else { + receiveReasonCode = CocoaMQTTAUTHReasonCode(rawValue: bytes[0]) + } + } + +} diff --git a/Pods/CocoaMQTT/Source/FrameConnAck.swift b/Pods/CocoaMQTT/Source/FrameConnAck.swift new file mode 100644 index 0000000..0c20905 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FrameConnAck.swift @@ -0,0 +1,110 @@ +// +// FrameConnack.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +struct FrameConnAck: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.connack.rawValue + + // --- Attributes + + /// MQTT 3.1.1 + var returnCode: CocoaMQTTConnAck? + + /// MQTT 5.0 + var reasonCode: CocoaMQTTCONNACKReasonCode? + + // 3.2.2.1.1 Session Present + var sessPresent: Bool = false + + // --- Attributes End + + // 3.2.2.3 CONNACK Properties + var connackProperties: MqttDecodeConnAck? + var propertiesBytes: [UInt8]? + // 3.2.3 CONNACK Payload + // The CONNACK packet has no Payload. + + /// MQTT 3.1.1 + init(returnCode: CocoaMQTTConnAck) { + self.returnCode = returnCode + } + + /// MQTT 5.0 + init(code: CocoaMQTTCONNACKReasonCode) { + reasonCode = code + } + +} + +extension FrameConnAck { + + func fixedHeader() -> [UInt8] { + var header = [UInt8]() + header += [FrameType.connack.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + return [sessPresent.bit, reasonCode!.rawValue] + } + + func payload5() -> [UInt8] { return [] } + + func properties() -> [UInt8] { return propertiesBytes ?? [] } + + func allData() -> [UInt8] { + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { + return [sessPresent.bit, returnCode!.rawValue] + } + + func payload() -> [UInt8] { return [] } +} + +extension FrameConnAck: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + guard packetFixedHeaderType == FrameType.connack.rawValue else { + return nil + } + + guard bytes.count >= 2 else { + return nil + } + + sessPresent = Bool(bit: bytes[0] & 0x01) + + let mqtt5ack = CocoaMQTTCONNACKReasonCode(rawValue: bytes[1]) + reasonCode = mqtt5ack + + let ack = CocoaMQTTConnAck(byte: bytes[1]) + returnCode = ack + + propertiesBytes = bytes + self.connackProperties = MqttDecodeConnAck() + self.connackProperties!.properties(connackData: bytes) + } +} + +extension FrameConnAck: CustomStringConvertible { + var description: String { + return "CONNACK(code: \(String(describing: reasonCode)), sp: \(sessPresent))" + } +} diff --git a/Pods/CocoaMQTT/Source/FrameConnect.swift b/Pods/CocoaMQTT/Source/FrameConnect.swift new file mode 100644 index 0000000..6341c3e --- /dev/null +++ b/Pods/CocoaMQTT/Source/FrameConnect.swift @@ -0,0 +1,288 @@ +// +// ConnectFrame.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT CONNECT Frame +struct FrameConnect: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.connect.rawValue + + /// MQTT 3.1.1 + private let PROTOCOL_LEVEL = UInt8(4) + private let PROTOCOL_VERSION: String = "MQTT/3.1.1" + private let PROTOCOL_MAGIC: String = "MQTT" + + // --- Attributes + + // 3.1.2.1 + + let protocolName: String = "MQTT" + // 3.1.2.2 Protocol Version + let protocolVersion = UInt8(5) + + // 3.1.2.5 Will Flag + var willMsg: CocoaMQTTMessage? + var willMsg5: CocoaMQTT5Message? + // 3.1.2.6 Will QoS + var willQoS: UInt8? + // 3.1.2.7 Will Retain + var willRetain: Bool = true + // 3.1.2.8 User Name Flag + var username: String? + // 3.1.2.9 Password Flag + var password: String? + // 3.1.2.10 Keep Alive + var keepAlive: UInt16 = 10 + var cleansess: Bool = true + + // 3.1.2 + // 3.1.2.11 CONNECT Properties + var connectProperties: MqttConnectProperties? + + var authenticationData: Data? + + // 3.1.3.1 Client Identifier (ClientID) + var clientID: String + + // --- Attributes End + + init(clientID: String) { + self.clientID = clientID + } +} + +extension FrameConnect { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.connect.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + var header = [UInt8]() + var flags = ConnFlags() + + // 3.1.2.1 Protocol Name + header += protocolName.bytesWithLength + + // 3.1.2.2 Protocol Version + header.append(protocolVersion) + + // 3.1.2.3 Connect Flags + if let will = willMsg5 { + flags.flagWill = true + flags.flagWillQoS = will.qos.rawValue + flags.flagWillRetain = will.retained + } + + if username != nil { + flags.flagUsername = true + + // Append password attribute if username presented + if password != nil { + flags.flagPassword = true + } + } + + flags.flagCleanSession = cleansess + + header.append(flags.rawValue) + header += keepAlive.hlBytes + + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func properties() -> [UInt8] { + return connectProperties?.properties ?? [] + } + + func payload5() -> [UInt8] { + var payload = [UInt8]() + + payload += clientID.bytesWithLength + + if let will = willMsg5 { + + payload += beVariableByteInteger(length: willMsg5!.properties.count) + payload += will.properties + payload += will.topic.bytesWithLength + payload += UInt16(will.payload.count).hlBytes + payload += will.payload + } + + if let username = username { + + payload += username.bytesWithLength + + // Append password attribute if username presented + if let password = password { + payload += password.bytesWithLength + } + } + + return payload + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { + + var header = [UInt8]() + var flags = ConnFlags() + + // variable header + header += PROTOCOL_MAGIC.bytesWithLength + header.append(PROTOCOL_LEVEL) + + if let will = willMsg { + flags.flagWill = true + flags.flagWillQoS = will.qos.rawValue + flags.flagWillRetain = will.retained + } + + if username != nil { + flags.flagUsername = true + + // Append password attribute if username presented + if password != nil { + flags.flagPassword = true + } + } + + flags.flagCleanSession = cleansess + + header.append(flags.rawValue) + header += keepAlive.hlBytes + + return header + } + + func payload() -> [UInt8] { + + var payload = [UInt8]() + + payload += clientID.bytesWithLength + + if let will = willMsg { + payload += will.topic.bytesWithLength + payload += UInt16(will.payload.count).hlBytes + payload += will.payload + } + if let username = username { + payload += username.bytesWithLength + + // Append password attribute if username presented + if let password = password { + payload += password.bytesWithLength + } + } + + return payload + } +} + +extension FrameConnect: CustomStringConvertible { + var description: String { + return "CONNECT(id: \(clientID), username: \(username ?? "nil"), " + + "password: \(password ?? "nil"), keepAlive : \(keepAlive), " + + "cleansess: \(cleansess))" + } +} + +/// Connect Flags +private struct ConnFlags { + + /// These Flags consist of following flags: + /// + /// +----------+----------+------------+--------------------+--------------+----------+ + /// | 7 | 6 | 5 | 4 3 | 2 | 1 | 0 | + /// +----------+----------+------------+---------+----------+--------------+----------+ + /// | username | password | willretain | willqos | willflag | cleansession | reserved | + /// +----------+----------+------------+---------+----------+--------------+----------+ + /// + var rawValue: UInt8 = 0 + + var flagUsername: Bool { + get { + return Bool(bit: (rawValue >> 7) & 0x01) + } + + set { + rawValue = (rawValue & 0x7F) | (newValue.bit << 7) + } + } + + var flagPassword: Bool { + get { + return Bool(bit: (rawValue >> 6) & 0x01) + } + + set { + rawValue = (rawValue & 0xBF) | (newValue.bit << 6) + } + } + + var flagWillRetain: Bool { + get { + return Bool(bit: (rawValue >> 5) & 0x01) + } + + set { + rawValue = (rawValue & 0xDF) | (newValue.bit << 5) + } + } + + var flagWillQoS: UInt8 { + get { + return (rawValue >> 3) & 0x03 + } + + set { + rawValue = (rawValue & 0xE7) | (newValue << 3) + } + } + + var flagWill: Bool { + get { + return Bool(bit: (rawValue >> 2) & 0x01) + } + + set { + rawValue = (rawValue & 0xFB) | (newValue.bit << 2) + } + } + + var flagCleanSession: Bool { + get { + return Bool(bit: (rawValue >> 1) & 0x01) + } + + set { + rawValue = (rawValue & 0xFD) | (newValue.bit << 1) + + } + } +} diff --git a/Pods/CocoaMQTT/Source/FrameDisconnect.swift b/Pods/CocoaMQTT/Source/FrameDisconnect.swift new file mode 100644 index 0000000..268ec51 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FrameDisconnect.swift @@ -0,0 +1,128 @@ +// +// FrameDisconnect.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT Disconnect packet +struct FrameDisconnect: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.disconnect.rawValue + + // 3.14.2 DISCONNECT Variable Header + public var sendReasonCode: CocoaMQTTDISCONNECTReasonCode? + public var receiveReasonCode: CocoaMQTTDISCONNECTReasonCode? + + // 3.14.2.2.2 Session Expiry Interval + public var sessionExpiryInterval: UInt32? + + // 3.14.2.2.3 Reason String + public var reasonString: String? + // 3.14.2.2.4 User Property + public var userProperties: [String: String]? + // 3.14.2.2.5 Server Reference + public var serverReference: String? + + /// MQTT 3.1.1 + init() { /* Nothing to do */ } + + /// MQTT 5.0 + init(disconnectReasonCode: CocoaMQTTDISCONNECTReasonCode) { + self.sendReasonCode = disconnectReasonCode + } +} + +extension FrameDisconnect { + + func fixedHeader() -> [UInt8] { + var header = [UInt8]() + header += [FrameType.disconnect.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + var header = [UInt8]() + header += [sendReasonCode!.rawValue] + + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { return [] } + + func properties() -> [UInt8] { + + var properties = [UInt8]() + + // 3.14.2.2.2 Session Expiry Interval + if let sessionExpiryInterval = self.sessionExpiryInterval { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.sessionExpiryInterval.rawValue, value: sessionExpiryInterval.byteArrayLittleEndian) + } + // 3.14.2.2.3 Reason String + if let reasonString = self.reasonString { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.reasonString.rawValue, value: reasonString.bytesWithLength) + } + // 3.14.2.2.4 User Property + if let userProperty = self.userProperties { + properties += userProperty.userPropertyBytes + } + // 3.14.2.2.5 Server Reference + if let serverReference = self.serverReference { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.serverReference.rawValue, value: serverReference.bytesWithLength) + } + + return properties + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return [] } + + func payload() -> [UInt8] { return [] } +} + +extension FrameDisconnect: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + if bytes.isEmpty { + receiveReasonCode = .normalDisconnection + } else { + receiveReasonCode = CocoaMQTTDISCONNECTReasonCode(rawValue: bytes[0]) + } + } else { + return nil + } + } + +} + +extension FrameDisconnect: CustomStringConvertible { + var description: String { + return "DISCONNECT" + } +} diff --git a/Pods/CocoaMQTT/Source/FramePingReq.swift b/Pods/CocoaMQTT/Source/FramePingReq.swift new file mode 100644 index 0000000..90e9fae --- /dev/null +++ b/Pods/CocoaMQTT/Source/FramePingReq.swift @@ -0,0 +1,54 @@ +// +// FramePingReq.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +struct FramePingReq: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.pingreq.rawValue +} + +extension FramePingReq { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.pingreq.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { return [] } + + func payload5() -> [UInt8] { return [] } + + func properties() -> [UInt8] { return [] } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return [] } + + func payload() -> [UInt8] { return [] } + +} + +extension FramePingReq: CustomStringConvertible { + var description: String { + return "PING" + } +} diff --git a/Pods/CocoaMQTT/Source/FramePingResp.swift b/Pods/CocoaMQTT/Source/FramePingResp.swift new file mode 100644 index 0000000..c2b2165 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FramePingResp.swift @@ -0,0 +1,68 @@ +// +// FramePingResp.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT PINGRESP packet +struct FramePingResp: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.pingresp.rawValue +} + +extension FramePingResp { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.pingresp.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { return [] } + + func payload5() -> [UInt8] { return [] } + + func properties() -> [UInt8] { return [] } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return [] } + + func payload() -> [UInt8] { return [] } +} + +extension FramePingResp: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + + guard packetFixedHeaderType == FrameType.pingresp.rawValue else { + return nil + } + + guard bytes.count == 0 else { + return nil + } + } +} + +extension FramePingResp: CustomStringConvertible { + var description: String { + return "PONG" + } +} diff --git a/Pods/CocoaMQTT/Source/FramePubAck.swift b/Pods/CocoaMQTT/Source/FramePubAck.swift new file mode 100644 index 0000000..35936e0 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FramePubAck.swift @@ -0,0 +1,129 @@ +// +// FramePuback.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT PUBACK packet +struct FramePubAck: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.puback.rawValue + + // --- Attributes + + var msgid: UInt16 + + // --- Attributes End + + // 3.4.2.1 PUBACK Reason Code + public var reasonCode: CocoaMQTTPUBACKReasonCode? + + // 3.4.2.2 PUBACK Properties + public var pubAckProperties: MqttDecodePubAck? + // 3.4.2.2.2 Reason String + public var reasonString: String? + // 3.4.2.2.3 User Property + public var userProperties: [String: String]? + + /// MQTT 3.1.1 + init(msgid: UInt16) { + self.msgid = msgid + } + + /// MQTT 5.0 + init(msgid: UInt16, reasonCode: CocoaMQTTPUBACKReasonCode) { + self.msgid = msgid + self.reasonCode = reasonCode + } +} + +extension FramePubAck { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.puback.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + // 3.4.2 MSB+LSB + var header = msgid.hlBytes + // 3.4.2.1 PUBACK Reason Code + header += [reasonCode!.rawValue] + + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { return [] } + + func properties() -> [UInt8] { + + var properties = [UInt8]() + + // 3.4.2.2.2 Reason String + if let reasonString = self.reasonString { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.reasonString.rawValue, value: reasonString.bytesWithLength) + } + + // 3.4.2.2.3 User Property + if let userProperty = self.userProperties { + properties += userProperty.userPropertyBytes + } + + return properties + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return msgid.hlBytes } + + func payload() -> [UInt8] { return [] } +} + +extension FramePubAck: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + guard packetFixedHeaderType == FrameType.puback.rawValue else { + return nil + } + + // MQTT 5.0 bytes.count == 4 + guard bytes.count >= 2 else { + return nil + } + + if bytes.count > 2 { + self.reasonCode = CocoaMQTTPUBACKReasonCode(rawValue: bytes[2]) + self.pubAckProperties = MqttDecodePubAck() + self.pubAckProperties!.decodePubAck(fixedHeader: packetFixedHeaderType, pubAckData: bytes) + } + + msgid = UInt16(bytes[0]) << 8 + UInt16(bytes[1]) + } +} + +extension FramePubAck: CustomStringConvertible { + var description: String { + return "PUBACK(id: \(msgid))" + } +} diff --git a/Pods/CocoaMQTT/Source/FramePubComp.swift b/Pods/CocoaMQTT/Source/FramePubComp.swift new file mode 100644 index 0000000..bc740ad --- /dev/null +++ b/Pods/CocoaMQTT/Source/FramePubComp.swift @@ -0,0 +1,127 @@ +// +// FramePubCom.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// ublish complete (QoS 2 delivery part 3) +/// The PUBCOMP packet is the response to a PUBREL packet. It is the fourth and final packet of the QoS 2 protocol exchange. +struct FramePubComp: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.pubcomp.rawValue + + // --- Attributes + + var msgid: UInt16 + + // --- Attributes End + + // 3.7.2.1 PUBCOMP Reason Code + public var reasonCode: CocoaMQTTPUBCOMPReasonCode? + + // 3.7.2.2 PUBCOMP Properties + public var pubCompProperties: MqttDecodePubComp? + // 3.7.2.2.2 Reason String + public var reasonString: String? + // 3.7.2.2.3 User Property + public var userProperties: [String: String]? + + /// MQTT 3.1.1 + init(msgid: UInt16) { + self.msgid = msgid + } + + /// MQTT 5.0 + init(msgid: UInt16, reasonCode: CocoaMQTTPUBCOMPReasonCode) { + self.msgid = msgid + self.reasonCode = reasonCode + } +} + +extension FramePubComp { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.pubcomp.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + // 3.7.2 MSB+LSB + var header = msgid.hlBytes + // 3.7.2.1 PUBACK Reason Code + header += [reasonCode!.rawValue] + + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { return [] } + + func properties() -> [UInt8] { + + var properties = [UInt8]() + + // 3.7.2.2.2 Reason String + if let reasonString = self.reasonString { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.reasonString.rawValue, value: reasonString.bytesWithLength) + } + + // 3.7.2.2.3 User Property + if let userProperty = self.userProperties { + properties += userProperty.userPropertyBytes + } + + return properties + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return msgid.hlBytes } + + func payload() -> [UInt8] { return [] } +} + +extension FramePubComp: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + + guard packetFixedHeaderType == FrameType.pubcomp.rawValue else { + return nil + } + + guard bytes.count >= 2 else { + return nil + } + + msgid = UInt16(bytes[0]) << 8 + UInt16(bytes[1]) + + self.pubCompProperties = MqttDecodePubComp() + self.pubCompProperties!.decodePubComp(fixedHeader: packetFixedHeaderType, pubAckData: bytes) + } +} + +extension FramePubComp: CustomStringConvertible { + var description: String { + return "PUBCOMP(id: \(msgid))" + } +} diff --git a/Pods/CocoaMQTT/Source/FramePubRec.swift b/Pods/CocoaMQTT/Source/FramePubRec.swift new file mode 100644 index 0000000..222ae44 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FramePubRec.swift @@ -0,0 +1,125 @@ +// +// FramePubRec.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT PUBREC packet +struct FramePubRec: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.pubrec.rawValue + + // --- Attributes + + var msgid: UInt16 + + // --- Attributes End + + // 3.5.2.1 PUBREC Reason Code + public var reasonCode: CocoaMQTTPUBRECReasonCode? + + // 3.5.2.2 PUBREC Properties + public var pubRecProperties: MqttDecodePubRec? + // 3.5.2.2.2 Reason String + public var reasonString: String? + // 3.5.2.2.3 User Property + public var userProperties: [String: String]? + + /// MQTT 3.1.1 + init(msgid: UInt16) { + self.msgid = msgid + } + + /// MQTT 5.0 + init(msgid: UInt16, reasonCode: CocoaMQTTPUBRECReasonCode) { + self.msgid = msgid + self.reasonCode = reasonCode + } +} + +extension FramePubRec { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.pubrec.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + // 3.5.2 MSB+LSB + var header = msgid.hlBytes + // 3.5.2.1 PUBACK Reason Code + header += [reasonCode!.rawValue] + + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { return [] } + + func properties() -> [UInt8] { + + var properties = [UInt8]() + + // 3.5.2.2.2 Reason String + if let reasonString = self.reasonString { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.reasonString.rawValue, value: reasonString.bytesWithLength) + } + + // 3.5.2.2.3 User Property + if let userProperty = self.userProperties { + properties += userProperty.userPropertyBytes + } + + return properties + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return msgid.hlBytes } + + func payload() -> [UInt8] { return [] } +} + +extension FramePubRec: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + + guard packetFixedHeaderType == FrameType.pubrec.rawValue else { + return nil + } + guard bytes.count >= 2 else { + return nil + } + + msgid = UInt16(bytes[0]) << 8 + UInt16(bytes[1]) + + self.pubRecProperties = MqttDecodePubRec() + self.pubRecProperties!.decodePubRec(fixedHeader: packetFixedHeaderType, pubAckData: bytes) + } +} + +extension FramePubRec: CustomStringConvertible { + var description: String { + return "PUBREC(id: \(msgid))" + } +} diff --git a/Pods/CocoaMQTT/Source/FramePubRel.swift b/Pods/CocoaMQTT/Source/FramePubRel.swift new file mode 100644 index 0000000..4f650ef --- /dev/null +++ b/Pods/CocoaMQTT/Source/FramePubRel.swift @@ -0,0 +1,120 @@ +// +// FramePubRel.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT PUBREL packet +/// A PUBREL packet is the response to a PUBREC packet. It is the third packet of the QoS 2 protocol exchange. +struct FramePubRel: Frame { + + var packetFixedHeaderType: UInt8 = UInt8(FrameType.pubrel.rawValue + 2) + + // --- Attributes + + var msgid: UInt16 + + // --- Attributes End + + // 3.6.2.1 PUBREL Reason Code + public var reasonCode: CocoaMQTTPUBRELReasonCode = .success + + // 3.6.2.2 PUBREL Properties + public var pubRelProperties: MqttDecodePubRel? + // 3.6.2.2.2 Reason String + public var reasonString: String? + // 3.6.2.2.3 User Property + public var userProperties: [String: String]? + + init(msgid: UInt16) { + self.msgid = msgid + + qos = .qos1 + } +} + +extension FramePubRel { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.pubrel.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + // 3.6.2 MSB+LSB + var header = msgid.hlBytes + // 3.6.2.1 PUBACK Reason Code + header += [reasonCode.rawValue] + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { return [] } + + func properties() -> [UInt8] { + + var properties = [UInt8]() + + // 3.6.2.2.2 Reason String + if let reasonString = self.reasonString { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.reasonString.rawValue, value: reasonString.bytesWithLength) + } + + // 3.6.2.2.3 User Property + if let userProperty = self.userProperties { + properties += userProperty.userPropertyBytes + } + + return properties + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return msgid.hlBytes } + + func payload() -> [UInt8] { return [] } +} + +extension FramePubRel: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + guard packetFixedHeaderType == 0x62 else { + return nil + } + guard bytes.count >= 2 else { + return nil + } + + self.packetFixedHeaderType = packetFixedHeaderType + msgid = UInt16(bytes[0]) << 8 + UInt16(bytes[1]) + + self.pubRelProperties = MqttDecodePubRel() + self.pubRelProperties!.decodePubRel(fixedHeader: packetFixedHeaderType, pubAckData: bytes) + } +} + +extension FramePubRel: CustomStringConvertible { + var description: String { + return "PUBREL(id: \(msgid))" + } +} diff --git a/Pods/CocoaMQTT/Source/FramePublish.swift b/Pods/CocoaMQTT/Source/FramePublish.swift new file mode 100644 index 0000000..1121e08 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FramePublish.swift @@ -0,0 +1,237 @@ +// +// FramePublish.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +// MQTT PUBLISH Frame +struct FramePublish: Frame { + + // 3.3.1.4 Remaining Length + public var remainingLength: UInt32? + + // 3.3.2.1 Topic Name + public var topicName: String? + // 3.3.2.2 Packet Identifier + public var packetIdentifier: UInt16? + + // 3.3.2.3 PUBLISH Properties + public var publishProperties: MqttPublishProperties? + public var publishRecProperties: MqttDecodePublish? + + var packetFixedHeaderType: UInt8 = FrameType.publish.rawValue + + // --- Attributes + + var msgid: UInt16 + + var topic: String = "" + + var _payload: [UInt8] = [] + + var mqtt5Topic: String = "" + + // --- Attributes End + + init(topic: String, payload: [UInt8], qos: CocoaMQTTQoS = .qos0, msgid: UInt16 = 0) { + + self.topic = topic + self._payload = payload + self.msgid = msgid + self.qos = qos + } +} + +extension FramePublish { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.publish.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + // 3.3.2.1 Topic Name + var header = self.topic.bytesWithLength + // 3.3.2.2 Packet Identifier qos1 or qos2 + if qos > .qos0 { + header += msgid.hlBytes + // header.append(UInt8(0)) + // header.append(QoS.rawValue) + } + + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { return _payload } + + func properties() -> [UInt8] { + + // Properties + return publishProperties?.properties ?? [] + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { + + var header = topic.bytesWithLength + + if qos > .qos0 { + header += msgid.hlBytes + } + + return header + } + + func payload() -> [UInt8] { return _payload } +} + +extension FramePublish: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + + guard packetFixedHeaderType & 0xF0 == FrameType.publish.rawValue else { + return nil + } + let recDup = ((packetFixedHeaderType & 0b0000_1000) >> 3) > 0 + + guard let recQos = CocoaMQTTQoS(rawValue: (packetFixedHeaderType & 0b0000_0110) >> 1) else { + return nil + } + + let recRetain = (packetFixedHeaderType & 0b0000_0001) > 0 + // Reserved + var flags: UInt8 = 0 + + if recRetain { + flags = flags | 0b0000_0001 + } else { + flags = flags | 0b0000_0000 + } + + if recDup { + flags = flags | 0b0011_1000 + } else { + flags = flags | 0b0011_0000 + } + + switch recQos { + case .qos0: + flags = flags | 0b0011_0000 + case .qos1: + flags = flags | 0b0011_0010 + case .qos2: + flags = flags | 0b0011_0100 + case .FAILURE: + printDebug("FAILTURE") + } + self.packetFixedHeaderType = flags + + // Packet Identifier + // The Packet Identifier field is only present in PUBLISH packets where the QoS level is 1 or 2. + + // parse topic + if bytes.count < 2 { + return nil + } + + let topicLength = Int(UInt16(bytes[0]) << 8 | UInt16(bytes[1])) + let topicStart = 2 + let topicEnd = topicStart + topicLength + + if bytes.count < topicEnd { + return nil + } + var pos = topicEnd + + // msgid + if (packetFixedHeaderType & 0x06) >> 1 == CocoaMQTTQoS.qos0.rawValue { + msgid = 0 + } else { + if bytes.count < pos + 2 { + return nil + } + msgid = UInt16(bytes[pos]) << 8 + UInt16(bytes[pos+1]) + pos += 2 + } + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + let data = MqttDecodePublish() + data.decodePublish(fixedHeader: packetFixedHeaderType, publishData: bytes) + pos = data.mqtt5DataIndex + + if data.propertyLength != 0 { + pos += data.propertyLength! + } + if pos > bytes.count { + return nil + } + + // MQTT 5.0: Topic Name may be empty only when Topic Alias is present. + if data.topic.isEmpty && data.topicAlias == nil { + return nil + } + + // MQTT 5.0 + self.mqtt5Topic = data.topic + self.topic = data.topic + self.packetIdentifier = data.packetIdentifier + if let packetIdentifier = data.packetIdentifier { + self.msgid = packetIdentifier + } + self.publishRecProperties = data + + } else { + // MQTT 3.1.1 + guard topicLength > 0 else { + return nil + } + guard let recTopic = String(bytes: bytes[topicStart.. [UInt8] { + + var header = [UInt8]() + header += [FrameType.suback.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { return msgid.hlBytes } + + func payload5() -> [UInt8] { + + var payload = [UInt8]() + + for qos in grantedQos { + payload.append(qos.rawValue) + } + + return payload + } + + func properties() -> [UInt8] { return [] } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return msgid.hlBytes } + + func payload() -> [UInt8] { + + var payload = [UInt8]() + + for qos in grantedQos { + payload.append(qos.rawValue) + } + + return payload + } +} + +extension FrameSubAck: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + + self.packetFixedHeaderType = packetFixedHeaderType + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // the bytes length must bigger than 3 + guard bytes.count >= 4 else { + return nil + } + + self.msgid = UInt16(bytes[0]) << 8 + UInt16(bytes[1]) + self.grantedQos = [] + self.reasonCodes = [CocoaMQTTSUBACKReasonCode]() + + let propertyLength = decodeVariableByteInteger(data: bytes, offset: 2) + let reasonCodesStartIndex = propertyLength.newOffset + propertyLength.res + guard reasonCodesStartIndex < bytes.count else { + return nil + } + + for i in reasonCodesStartIndex ..< bytes.count { + guard let reasonCode = CocoaMQTTSUBACKReasonCode(rawValue: bytes[i]) else { + return nil + } + self.reasonCodes! += [reasonCode] + + switch reasonCode { + case .grantedQoS0: + self.grantedQos.append(.qos0) + case .grantedQoS1: + self.grantedQos.append(.qos1) + case .grantedQoS2: + self.grantedQos.append(.qos2) + default: + self.grantedQos.append(.FAILURE) + } + } + + self.subAckProperties = MqttDecodeSubAck() + self.subAckProperties!.decodeSubAck(fixedHeader: packetFixedHeaderType, pubAckData: bytes) + + } else { + // the bytes length must bigger than 3 + guard bytes.count >= 3 else { + return nil + } + + self.msgid = UInt16(bytes[0]) << 8 + UInt16(bytes[1]) + self.grantedQos = [] + for i in 2 ..< bytes.count { + guard let qos = CocoaMQTTQoS(rawValue: bytes[i]) else { + return nil + } + self.grantedQos.append(qos) + } + + } + + } +} + +extension FrameSubAck: CustomStringConvertible { + var description: String { + return "SUBACK(id: \(msgid))" + } +} diff --git a/Pods/CocoaMQTT/Source/FrameSubscribe.swift b/Pods/CocoaMQTT/Source/FrameSubscribe.swift new file mode 100644 index 0000000..144f17f --- /dev/null +++ b/Pods/CocoaMQTT/Source/FrameSubscribe.swift @@ -0,0 +1,174 @@ +// +// FrameSubscribe.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT SUBSCRIBE Frame +struct FrameSubscribe: Frame { + + var packetFixedHeaderType: UInt8 = UInt8(FrameType.subscribe.rawValue + 2) + + // --- Attributes + + var msgid: UInt16? + + var topics: [(String, CocoaMQTTQoS)]? + + // --- Attributes End + + // 3.8.2 SUBSCRIBE Variable Header + public var packetIdentifier: UInt16? + + // 3.8.2.1.2 Subscription Identifier + public var subscriptionIdentifier: UInt32? + + // 3.8.2.1.3 User Property + public var userProperty: [String: String]? + + // 3.8.3 SUBSCRIBE Payload + public var topicFilters: [MqttSubscription]? + + /// MQTT 3.1.1 + init(msgid: UInt16, topic: String, reqos: CocoaMQTTQoS) { + self.init(msgid: msgid, topics: [(topic, reqos)]) + } + + init(msgid: UInt16, topics: [(String, CocoaMQTTQoS)]) { + packetFixedHeaderType = FrameType.subscribe.rawValue + self.msgid = msgid + self.topics = topics + + qos = CocoaMQTTQoS.qos1 + } + + /// MQTT 5.0 + init(msgid: UInt16, subscriptionList: [MqttSubscription]) { + self.msgid = msgid + self.topicFilters = subscriptionList + } + + /// MQTT 5.0 + init(msgid: UInt16, subscriptionList: [MqttSubscription], packetIdentifier: UInt16? = nil, subscriptionIdentifier: UInt32? = nil, userProperty: [String: String] = [:]) { + self.msgid = msgid + self.topicFilters = subscriptionList + if packetIdentifier != nil { + self.packetIdentifier = packetIdentifier + } + if subscriptionIdentifier != nil { + self.subscriptionIdentifier = subscriptionIdentifier + } + if !userProperty.isEmpty { + self.userProperty = userProperty + } + + } + +} + +extension FrameSubscribe { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.subscribe.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + // 3.8.2 SUBSCRIBE Variable Header + // The Variable Header of the SUBSCRIBE Packet contains the following fields in the order: Packet Identifier, and Properties. + + // MQTT 5.0 + var header = [UInt8]() + header = msgid!.hlBytes + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { + + var payload = [UInt8]() + + for subscription in self.topicFilters! { + subscription.subscriptionOptions = true + payload += subscription.subscriptionData + } + + return payload + } + + func properties() -> [UInt8] { + + var properties = [UInt8]() + + // 3.8.2.1.2 Subscription Identifier + if let subscriptionIdentifier = self.subscriptionIdentifier, + let subscriptionIdentifier = beVariableByteInteger(subscriptionIdentifier) { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.subscriptionIdentifier.rawValue, value: subscriptionIdentifier) + } + + // 3.8.2.1.3 User Property + if let userProperty = self.userProperty { + properties += userProperty.userPropertyBytes + } + + return properties + + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return msgid!.hlBytes } + + func payload() -> [UInt8] { + + var payload = [UInt8]() + + for (topic, qos) in topics! { + payload += topic.bytesWithLength + payload.append(qos.rawValue) + } + + return payload + } +} + +extension FrameSubscribe: CustomStringConvertible { + + var description: String { + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + var desc = "" + if let unwrappedList = topicFilters, !unwrappedList.isEmpty { + for subscription in unwrappedList { + desc += "SUBSCRIBE(id: \(String(describing: msgid)), topics: \(subscription.topic)) " + } + } + return desc + } else { + return "SUBSCRIBE(id: \(String(describing: msgid)), topics: \(String(describing: topics)))" + } + } +} diff --git a/Pods/CocoaMQTT/Source/FrameUnsubAck.swift b/Pods/CocoaMQTT/Source/FrameUnsubAck.swift new file mode 100644 index 0000000..057b3d1 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FrameUnsubAck.swift @@ -0,0 +1,117 @@ +// +// FrameUnsubAck.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT UNSUBACK packet +struct FrameUnsubAck: Frame { + + var packetFixedHeaderType: UInt8 = FrameType.unsuback.rawValue + + // --- Attributes + + var msgid: UInt16 + + // --- Attributes End + + // 3.10.2.1 UNSUBSCRIBE Properties + public var unSubAckProperties: MqttDecodeUnsubAck? + // 3.11.2 Property + public var userProperty: [String: String]? + // 3.11.2.1.2 Reason String + public var reasonString: String? + + var _payload: [UInt8] = [] + + init(msgid: UInt16, payload: [UInt8]) { + self.msgid = msgid + self._payload = payload + } +} + +extension FrameUnsubAck { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.unsuback.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + // 3.11.2 MSB+LSB + var header = msgid.hlBytes + + // MQTT 5.0 + header += beVariableByteInteger(length: self.properties().count) + + return header + } + + func payload5() -> [UInt8] { return _payload } + + func properties() -> [UInt8] { + + var properties = [UInt8]() + + // 3.11.2.1.2 Reason String + if let reasonString = self.reasonString { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.reasonString.rawValue, value: reasonString.bytesWithLength) + } + + // 3.11.2.1.3 User Property + if let userProperty = self.userProperty { + properties += userProperty.userPropertyBytes + } + + return properties + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return msgid.hlBytes } + + func payload() -> [UInt8] { return [] } +} + +extension FrameUnsubAck: InitialWithBytes { + + init?(packetFixedHeaderType: UInt8, bytes: [UInt8]) { + guard packetFixedHeaderType == FrameType.unsuback.rawValue else { + return nil + } + + guard bytes.count >= 2 else { + return nil + } + + msgid = UInt16(bytes[0]) << 8 + UInt16(bytes[1]) + + self.unSubAckProperties = MqttDecodeUnsubAck() + self.unSubAckProperties!.decodeUnSubAck(fixedHeader: packetFixedHeaderType, pubAckData: bytes) + + } +} + +extension FrameUnsubAck: CustomStringConvertible { + var description: String { + return "UNSUBSACK(id: \(msgid))" + } +} diff --git a/Pods/CocoaMQTT/Source/FrameUnsubscribe.swift b/Pods/CocoaMQTT/Source/FrameUnsubscribe.swift new file mode 100644 index 0000000..db81c10 --- /dev/null +++ b/Pods/CocoaMQTT/Source/FrameUnsubscribe.swift @@ -0,0 +1,139 @@ +// +// FrameUnsubscribe.swift +// CocoaMQTT +// +// Created by JianBo on 2019/8/7. +// Copyright © 2019 emqx.io. All rights reserved. +// + +import Foundation + +/// MQTT UNSUBSCRIBE packet +struct FrameUnsubscribe: Frame { + + var packetFixedHeaderType: UInt8 = UInt8(FrameType.unsubscribe.rawValue + 2) + + // --- Attributes + + var msgid: UInt16? + + /// MQTT 3.1.1 + var topics: [String]? + + /// MQTT 5.0 + var topicFilters: [MqttSubscription]? + + // --- Attribetes end + + // 3.10.2.1.2 User Property + public var userProperty: [String: String]? + + /// MQTT 3.1.1 + init(msgid: UInt16, topics: [String]) { + self.msgid = msgid + self.topics = topics + + qos = CocoaMQTTQoS.qos1 + } + + /// MQTT 5.0 + init(msgid: UInt16, topics: [MqttSubscription]) { + self.msgid = msgid + self.topicFilters = topics + + qos = CocoaMQTTQoS.qos1 + } + +} + +extension FrameUnsubscribe { + + func fixedHeader() -> [UInt8] { + + var header = [UInt8]() + header += [FrameType.unsubscribe.rawValue] + + return header + } + + func variableHeader5() -> [UInt8] { + + // MQTT 5.0 + var header = [UInt8]() + header = msgid!.hlBytes + header += beVariableByteInteger(length: self.properties().count) + return header + } + + func payload5() -> [UInt8] { + + var payload = [UInt8]() + + for subscription in topicFilters! { + subscription.subscriptionOptions = false + payload += subscription.subscriptionData + } + + return payload + } + + func properties() -> [UInt8] { + + var properties = [UInt8]() + + // 3.10.2.1.2 User Property + if let userProperty = self.userProperty { + properties += userProperty.userPropertyBytes + } + + return properties + } + + func allData() -> [UInt8] { + + var allData = [UInt8]() + + allData += fixedHeader() + allData += variableHeader5() + allData += properties() + allData += payload5() + + return allData + } + + func variableHeader() -> [UInt8] { return msgid!.hlBytes } + + func payload() -> [UInt8] { + + var payload = [UInt8]() + + for t in topics! { + payload += t.bytesWithLength + } + + return payload + } + +} + +extension FrameUnsubscribe: CustomStringConvertible { + + var description: String { + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + var desc = "" + if let unwrappedList = topicFilters, !unwrappedList.isEmpty { + for subscription in unwrappedList { + desc += "UNSUBSCRIBE(id: \(String(describing: subscription.topic)), topics: \(subscription.topic)) " + } + } + return desc + } else { + return "UNSUBSCRIBE(id: \(String(describing: msgid)), topics: \(String(describing: topics)))" + } + } +} diff --git a/Pods/CocoaMQTT/Source/MqttAuthProperties.swift b/Pods/CocoaMQTT/Source/MqttAuthProperties.swift new file mode 100644 index 0000000..657e5ce --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttAuthProperties.swift @@ -0,0 +1,44 @@ +// +// MqttAuthProperties.swift +// CocoaMQTT +// +// Created by liwei wang on 1/9/2021. +// + +import Foundation + +public class MqttAuthProperties: NSObject { + + // 3.15.2.2.2 Authentication Method + public var authenticationMethod: String? + // 3.15.2.2.3 Authentication Data + public var authenticationData: [UInt8]? + // 3.15.2.2.4 Reason String + public var reasonString: String? + // 3.15.2.2.5 User Property + public var userProperties: [String: String]? + + public var properties: [UInt8] { + var properties = [UInt8]() + + // 3.15.2.2.2 Authentication Method + if let authenticationMethod = self.authenticationMethod { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.authenticationMethod.rawValue, value: authenticationMethod.bytesWithLength) + } + // 3.15.2.2.3 Authentication Data + if let authenticationData = self.authenticationData { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.authenticationData.rawValue, value: authenticationData) + } + // 3.15.2.2.4 Reason String + if let reasonString = self.reasonString { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.reasonString.rawValue, value: reasonString.bytesWithLength) + } + // 3.15.2.2.5 User Property + if let userProperty = self.userProperties { + properties += userProperty.userPropertyBytes + } + + return properties + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttConnectProperties.swift b/Pods/CocoaMQTT/Source/MqttConnectProperties.swift new file mode 100644 index 0000000..5a4281c --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttConnectProperties.swift @@ -0,0 +1,80 @@ +// +// MqttConnectProperties.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/7/25. +// + +import Foundation + +public class MqttConnectProperties: NSObject { + + // 3.1.2.11.1 Property Length + // public var propertyLength: UInt8? + // 3.1.2.11.2 Session Expiry Interval + public var sessionExpiryInterval: UInt32? + // 3.1.2.11.3 Receive Maximum + public var receiveMaximum: UInt16? + // 3.1.2.11.4 Maximum Packet Size + public var maximumPacketSize: UInt32? + // 3.1.2.11.5 Topic Alias Maximum + public var topicAliasMaximum: UInt16? + // 3.1.2.11.6 Request Response Information + public var requestResponseInformation: UInt8? + // 3.1.2.11.7 Request Problem Information + public var requestProblemInfomation: UInt8? + // 3.1.2.11.8 User Property + public var userProperties: [String: String]? + // 3.1.2.11.9 Authentication Method + public var authenticationMethod: String? + // 3.1.2.11.10 Authentication Data + public var authenticationData: [UInt8]? + + public var properties: [UInt8] { + var properties = [UInt8]() + + // 3.1.2.11.2 Session Expiry Interval + if let sessionExpiryInterval = self.sessionExpiryInterval { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.sessionExpiryInterval.rawValue, value: sessionExpiryInterval.byteArrayLittleEndian) + } + + // 3.1.2.11.3 Receive Maximum + if let receiveMaximum = self.receiveMaximum { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.receiveMaximum.rawValue, value: receiveMaximum.hlBytes) + } + + // 3.1.2.11.4 Maximum Packet Size + if let maximumPacketSize = self.maximumPacketSize { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.maximumPacketSize.rawValue, value: maximumPacketSize.byteArrayLittleEndian) + } + + // 3.1.2.11.5 Topic Alias Maximum + if let topicAliasMaximum = self.topicAliasMaximum { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.topicAliasMaximum.rawValue, value: topicAliasMaximum.hlBytes) + } + + // 3.1.2.11.6 Request Response Information + if let requestResponseInformation = self.requestResponseInformation { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.requestResponseInformation.rawValue, value: [requestResponseInformation]) + } + // 3.1.2.11.7 Request Problem Information + if let requestProblemInfomation = self.requestProblemInfomation { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.requestProblemInformation.rawValue, value: [requestProblemInfomation]) + } + // 3.1.2.11.8 User Property + if let userProperty = self.userProperties { + properties += userProperty.userPropertyBytes + } + // 3.1.2.11.9 Authentication Method + if let authenticationMethod = self.authenticationMethod { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.authenticationMethod.rawValue, value: authenticationMethod.bytesWithLength) + } + // 3.1.2.11.10 Authentication Data + if let authenticationData = self.authenticationData { + properties += authenticationData + } + + return properties + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttDecodeConnAck.swift b/Pods/CocoaMQTT/Source/MqttDecodeConnAck.swift new file mode 100644 index 0000000..8a41d73 --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttDecodeConnAck.swift @@ -0,0 +1,237 @@ +// +// MqttDecodeConnAck.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/7/26. +// + +import Foundation + +public class MqttDecodeConnAck: NSObject { + + // var connackData: [UInt8] + // + // init(connackData: [UInt8]) { + // connackData = connackData + // } + + // 3.2.2.3 CONNACK Properties + // 3.2.2.3.1 Property Length + public var propertyLength: Int? + // 3.2.2.3.2 Session Expiry Interval + public var sessionExpiryInterval: UInt32? + // 3.2.2.3.3 Receive Maximum + public var receiveMaximum: UInt16? + // 3.2.2.3.4 Maximum QoS + public var maximumQoS: CocoaMQTTQoS? + // 3.2.2.3.5 Retain Available + public var retainAvailable: Bool? + // 3.2.2.3.6 Maximum Packet Size + public var maximumPacketSize: UInt32? + // 3.2.2.3.7 Assigned Client Identifier + public var assignedClientIdentifier: String? + // 3.2.2.3.8 Topic Alias Maximum + public var topicAliasMaximum: UInt16? + // 3.2.2.3.9 Reason String + public var reasonString: String? + // 3.2.2.3.10 User Property + public var userProperty: [String: String]? + // 3.2.2.3.11 Wildcard Subscription Available + public var wildcardSubscriptionAvailable: Bool? + // 3.2.2.3.12 Subscription Identifiers Available + public var subscriptionIdentifiersAvailable: Bool? + // 3.2.2.3.13 Shared Subscription Available + public var sharedSubscriptionAvailable: Bool? + // 3.2.2.3.14 Server Keep Alive + public var serverKeepAlive: UInt16? + // 3.2.2.3.15 Response Information + public var responseInformation: String? + // 3.2.2.3.16 Server Reference + public var serverReference: String? + // 3.2.2.3.17 Authentication Method + public var authenticationMethod: String? + // 3.2.2.3.18 Authentication Data + public var authenticationData = [UInt8]() + + public func properties(connackData: [UInt8]) { + // 3.2.2.3 CONNACK Properties + var index = 2 // sessPresent 0 reasonCode 1 + let propertyLengthVariableByteInteger = decodeVariableByteInteger(data: connackData, offset: index) + propertyLength = propertyLengthVariableByteInteger.res + index = propertyLengthVariableByteInteger.newOffset + let occupyIndex = index + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // properties + while index - occupyIndex < propertyLength! { + let resVariableByteInteger = decodeVariableByteInteger(data: connackData, offset: index) + index = resVariableByteInteger.newOffset + let propertyNameByte = resVariableByteInteger.res + guard let propertyName = CocoaMQTTPropertyName(rawValue: UInt8(propertyNameByte)) else { + break + } + + switch propertyName.rawValue { + + case CocoaMQTTPropertyName.sessionExpiryInterval.rawValue: + + let comRes = integerCompute(data: connackData, formatType: formatInt.formatUint32.rawValue, offset: index) + sessionExpiryInterval = UInt32(comRes!.res) + index = comRes!.newOffset + + case CocoaMQTTPropertyName.receiveMaximum.rawValue: + + let comRes = integerCompute(data: connackData, formatType: formatInt.formatUint16.rawValue, offset: index) + receiveMaximum = UInt16(comRes!.res) + index = comRes!.newOffset + + case CocoaMQTTPropertyName.maximumQoS.rawValue: + if index > connackData.count { + break + } + if connackData[index] & 0x01 > 0 { + maximumQoS = .qos0 + } else { + maximumQoS = .qos1 + } + + index += 1 + + case CocoaMQTTPropertyName.retainAvailable.rawValue: + if index > connackData.count { + break + } + if connackData[index] & 0x01 > 0 { + retainAvailable = true + } else { + retainAvailable = false + } + + index += 1 + + case CocoaMQTTPropertyName.maximumPacketSize.rawValue: + + let comRes = integerCompute(data: connackData, formatType: formatInt.formatUint32.rawValue, offset: index) + maximumPacketSize = UInt32(comRes!.res) + index = comRes!.newOffset + + case CocoaMQTTPropertyName.assignedClientIdentifier.rawValue: + guard let result = unsignedByteToString(data: connackData, offset: index) else { + break + } + assignedClientIdentifier = result.resStr + index = result.newOffset + + case CocoaMQTTPropertyName.topicAliasMaximum.rawValue: + + let comRes = integerCompute(data: connackData, formatType: formatInt.formatUint16.rawValue, offset: index) + topicAliasMaximum = UInt16(comRes!.res) + index = comRes!.newOffset + + case CocoaMQTTPropertyName.reasonString.rawValue: + guard let result = unsignedByteToString(data: connackData, offset: index) else { + break + } + reasonString = result.resStr + index = result.newOffset + + case CocoaMQTTPropertyName.userProperty.rawValue: + var key: String? + var value: String? + guard let keyRes = unsignedByteToString(data: connackData, offset: index) else { + break + } + key = keyRes.resStr + index = keyRes.newOffset + + guard let valRes = unsignedByteToString(data: connackData, offset: index) else { + break + } + value = valRes.resStr + index = valRes.newOffset + + userProperty![key!] = value + + case CocoaMQTTPropertyName.wildcardSubscriptionAvailable.rawValue: + if index > connackData.count { + break + } + if connackData[index] & 0x01 > 0 { + wildcardSubscriptionAvailable = true + } else { + wildcardSubscriptionAvailable = false + } + index += 1 + + case CocoaMQTTPropertyName.subscriptionIdentifiersAvailable.rawValue: + if index > connackData.count { + break + } + if connackData[index] & 0x01 > 0 { + subscriptionIdentifiersAvailable = true + } else { + subscriptionIdentifiersAvailable = false + } + index += 1 + + case CocoaMQTTPropertyName.sharedSubscriptionAvailable.rawValue: + if index > connackData.count { + break + } + if connackData[index] & 0x01 > 0 { + sharedSubscriptionAvailable = true + } else { + sharedSubscriptionAvailable = false + } + index += 1 + + case CocoaMQTTPropertyName.serverKeepAlive.rawValue: + + let comRes = integerCompute(data: connackData, formatType: formatInt.formatUint16.rawValue, offset: index) + serverKeepAlive = UInt16(comRes!.res) + index = comRes!.newOffset + + case CocoaMQTTPropertyName.responseInformation.rawValue: + guard let valRes = unsignedByteToString(data: connackData, offset: index) else { + break + } + responseInformation = valRes.resStr + index = valRes.newOffset + + case CocoaMQTTPropertyName.serverReference.rawValue: + guard let valRes = unsignedByteToString(data: connackData, offset: index) else { + break + } + serverReference = valRes.resStr + index = valRes.newOffset + + case CocoaMQTTPropertyName.authenticationMethod.rawValue: + guard let valRes = unsignedByteToString(data: connackData, offset: index) else { + break + } + authenticationMethod = valRes.resStr + index = valRes.newOffset + + case CocoaMQTTPropertyName.authenticationData.rawValue: + guard let valRes = unsignedByteToBinary(data: connackData, offset: index) else { + break + } + authenticationData = valRes.resStr + index = valRes.newOffset + + default: + break + } + + } + + } + + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttDecodePubAck.swift b/Pods/CocoaMQTT/Source/MqttDecodePubAck.swift new file mode 100644 index 0000000..c8478df --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttDecodePubAck.swift @@ -0,0 +1,101 @@ +// +// MqttDecodePuback.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/8/3. +// + +import Foundation + +public class MqttDecodePubAck: NSObject { + + var totalCount = 0 + var dataIndex = 0 + var propertyLength: Int = 0 + + public var reasonCode: CocoaMQTTPUBACKReasonCode? + public var msgid: UInt16 = 0 + public var reasonString: String? + public var userProperty: [String: String]? + + public func decodePubAck(fixedHeader: UInt8, pubAckData: [UInt8]) { + totalCount = pubAckData.count + dataIndex = 0 + // msgid + let msgidResult = integerCompute(data: pubAckData, formatType: formatInt.formatUint16.rawValue, offset: dataIndex) + msgid = UInt16(msgidResult!.res) + dataIndex = msgidResult!.newOffset + + // 3.4.2.1 PUBACK Reason Code + + // The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Success) and there are no Properties. In this case the PUBACK has a Remaining Length of 2. + if dataIndex + 1 > pubAckData.count { + return + } + + guard let ack = CocoaMQTTPUBACKReasonCode(rawValue: pubAckData[dataIndex]) else { + return + } + reasonCode = ack + dataIndex += 1 + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // 3.4.2.2 PUBACK Properties + // 3.4.2.2.1 Property Length + let propertyLengthVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + propertyLength = propertyLengthVariableByteInteger.res + dataIndex = propertyLengthVariableByteInteger.newOffset + + let occupyIndex = dataIndex + + while dataIndex < occupyIndex + propertyLength { + + let resVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + dataIndex = resVariableByteInteger.newOffset + let propertyNameByte = resVariableByteInteger.res + guard let propertyName = CocoaMQTTPropertyName(rawValue: UInt8(propertyNameByte)) else { + break + } + + switch propertyName.rawValue { + // 3.4.2.2.2 Reason String + case CocoaMQTTPropertyName.reasonString.rawValue: + guard let result = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + reasonString = result.resStr + dataIndex = result.newOffset + + // 3.4.2.2.3 User Property + case CocoaMQTTPropertyName.userProperty.rawValue: + var key: String? + var value: String? + guard let keyRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + key = keyRes.resStr + dataIndex = keyRes.newOffset + + guard let valRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + value = valRes.resStr + dataIndex = valRes.newOffset + + userProperty![key!] = value + + default: + return + } + + } + + } + + } +} diff --git a/Pods/CocoaMQTT/Source/MqttDecodePubComp.swift b/Pods/CocoaMQTT/Source/MqttDecodePubComp.swift new file mode 100644 index 0000000..d02a22b --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttDecodePubComp.swift @@ -0,0 +1,101 @@ +// +// MqttDecodePubComp.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/8/9. +// + +import Foundation + +public class MqttDecodePubComp: NSObject { + + var totalCount = 0 + var dataIndex = 0 + var propertyLength: Int = 0 + + public var reasonCode: CocoaMQTTPUBCOMPReasonCode? + public var msgid: UInt16 = 0 + public var reasonString: String? + public var userProperty: [String: String]? + + public func decodePubComp(fixedHeader: UInt8, pubAckData: [UInt8]) { + totalCount = pubAckData.count + dataIndex = 0 + // msgid + let msgidResult = integerCompute(data: pubAckData, formatType: formatInt.formatUint16.rawValue, offset: dataIndex) + msgid = UInt16(msgidResult!.res) + dataIndex = msgidResult!.newOffset + + // 3.6.2.1 PUBREL Reason Code + + // The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Success) and there are no Properties. In this case the PUBACK has a Remaining Length of 2. + if dataIndex + 1 > pubAckData.count { + return + } + + guard let ack = CocoaMQTTPUBCOMPReasonCode(rawValue: pubAckData[dataIndex]) else { + return + } + reasonCode = ack + dataIndex += 1 + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // 3.6.2.2 PUBREL Properties + // 3.6.2.2.1 Property Length + let propertyLengthVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + propertyLength = propertyLengthVariableByteInteger.res + dataIndex = propertyLengthVariableByteInteger.newOffset + + let occupyIndex = dataIndex + + while dataIndex < occupyIndex + propertyLength { + + let resVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + dataIndex = resVariableByteInteger.newOffset + let propertyNameByte = resVariableByteInteger.res + guard let propertyName = CocoaMQTTPropertyName(rawValue: UInt8(propertyNameByte)) else { + break + } + + switch propertyName.rawValue { + // 3.6.2.2.2 Reason String + case CocoaMQTTPropertyName.reasonString.rawValue: + guard let result = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + reasonString = result.resStr + dataIndex = result.newOffset + + // 3.6.2.2.3 User Property + var key: String? + var value: String? + guard let keyRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + key = keyRes.resStr + dataIndex = keyRes.newOffset + + guard let valRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + value = valRes.resStr + dataIndex = valRes.newOffset + + userProperty![key!] = value + + default: + return + } + + } + + } + + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttDecodePubRec.swift b/Pods/CocoaMQTT/Source/MqttDecodePubRec.swift new file mode 100644 index 0000000..37465c9 --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttDecodePubRec.swift @@ -0,0 +1,100 @@ +// +// MqttDecodePubRec.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/8/4. +// + +import Foundation + +public class MqttDecodePubRec: NSObject { + + var totalCount = 0 + var dataIndex = 0 + var propertyLength: Int = 0 + + public var reasonCode: CocoaMQTTPUBACKReasonCode? + public var msgid: UInt16 = 0 + public var reasonString: String? + public var userProperty: [String: String]? + + public func decodePubRec(fixedHeader: UInt8, pubAckData: [UInt8]) { + totalCount = pubAckData.count + dataIndex = 0 + // msgid + let msgidResult = integerCompute(data: pubAckData, formatType: formatInt.formatUint16.rawValue, offset: dataIndex) + msgid = UInt16(msgidResult!.res) + dataIndex = msgidResult!.newOffset + + // 3.5.2.1 PUBREC Reason Code + + // The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Success) and there are no Properties. In this case the PUBACK has a Remaining Length of 2. + if dataIndex + 1 > pubAckData.count { + return + } + + guard let ack = CocoaMQTTPUBACKReasonCode(rawValue: pubAckData[dataIndex]) else { + return + } + reasonCode = ack + dataIndex += 1 + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // 3.5.2.2 PUBACK Properties + // 3.5.2.2.1 Property Length + let propertyLengthVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + propertyLength = propertyLengthVariableByteInteger.res + dataIndex = propertyLengthVariableByteInteger.newOffset + + let occupyIndex = dataIndex + + while dataIndex < occupyIndex + propertyLength { + + let resVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + dataIndex = resVariableByteInteger.newOffset + let propertyNameByte = resVariableByteInteger.res + guard let propertyName = CocoaMQTTPropertyName(rawValue: UInt8(propertyNameByte)) else { + break + } + + switch propertyName.rawValue { + // 3.5.2.2.2 Reason String + case CocoaMQTTPropertyName.reasonString.rawValue: + guard let result = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + reasonString = result.resStr + dataIndex = result.newOffset + + // 3.5.2.2.3 User Property + case CocoaMQTTPropertyName.userProperty.rawValue: + var key: String? + var value: String? + guard let keyRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + key = keyRes.resStr + dataIndex = keyRes.newOffset + + guard let valRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + value = valRes.resStr + dataIndex = valRes.newOffset + + userProperty![key!] = value + + default: + return + } + } + } + + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttDecodePubRel.swift b/Pods/CocoaMQTT/Source/MqttDecodePubRel.swift new file mode 100644 index 0000000..0f1d629 --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttDecodePubRel.swift @@ -0,0 +1,101 @@ +// +// MqttDecodePubRel.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/8/9. +// + +import Foundation + +public class MqttDecodePubRel: NSObject { + + var totalCount = 0 + var dataIndex = 0 + var propertyLength: Int = 0 + + public var reasonCode: CocoaMQTTPUBRELReasonCode? + public var msgid: UInt16 = 0 + public var reasonString: String? + public var userProperty: [String: String]? + + public func decodePubRel(fixedHeader: UInt8, pubAckData: [UInt8]) { + totalCount = pubAckData.count + dataIndex = 0 + // msgid + let msgidResult = integerCompute(data: pubAckData, formatType: formatInt.formatUint16.rawValue, offset: dataIndex) + msgid = UInt16(msgidResult!.res) + dataIndex = msgidResult!.newOffset + + // 3.6.2.1 PUBREL Reason Code + + // The Reason Code and Property Length can be omitted if the Reason Code is 0x00 (Success) and there are no Properties. In this case the PUBACK has a Remaining Length of 2. + if dataIndex + 1 > pubAckData.count { + return + } + + guard let ack = CocoaMQTTPUBRELReasonCode(rawValue: pubAckData[dataIndex]) else { + return + } + reasonCode = ack + dataIndex += 1 + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // 3.6.2.2 PUBREL Properties + // 3.6.2.2.1 Property Length + let propertyLengthVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + propertyLength = propertyLengthVariableByteInteger.res + dataIndex = propertyLengthVariableByteInteger.newOffset + + let occupyIndex = dataIndex + + while dataIndex < occupyIndex + propertyLength { + + let resVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + dataIndex = resVariableByteInteger.newOffset + let propertyNameByte = resVariableByteInteger.res + guard let propertyName = CocoaMQTTPropertyName(rawValue: UInt8(propertyNameByte)) else { + break + } + + switch propertyName.rawValue { + // 3.6.2.2.2 Reason String + case CocoaMQTTPropertyName.reasonString.rawValue: + guard let result = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + reasonString = result.resStr + dataIndex = result.newOffset + + // 3.6.2.2.3 User Property + var key: String? + var value: String? + guard let keyRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + key = keyRes.resStr + dataIndex = keyRes.newOffset + + guard let valRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + value = valRes.resStr + dataIndex = valRes.newOffset + + userProperty![key!] = value + + default: + return + } + + } + + } + + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttDecodePublish.swift b/Pods/CocoaMQTT/Source/MqttDecodePublish.swift new file mode 100644 index 0000000..bacfe61 --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttDecodePublish.swift @@ -0,0 +1,171 @@ +// +// MqttDecodePublish.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/7/27. +// + +import Foundation + +public class MqttDecodePublish: NSObject { + + // 3.3.2.3 PUBLISH Properties + // 3.3.2.3.1 Property Length + public var propertyLength: Int? + // 3.3.2.3.2 Payload Format Indicator + public var payloadFormatIndicator: PayloadFormatIndicator? + // 3.3.2.3.3 Message Expiry Interval + public var messageExpiryInterval: UInt32? + // 3.3.2.3.4 Topic Alias + public var topicAlias: UInt16? + // 3.3.2.3.5 Response Topic + public var responseTopic: String? + // 3.3.2.3.6 Correlation Data + public var correlationData: [UInt8]? + // 3.3.2.3.7 Property + public var userProperty: [String: String]? + // 3.3.2.3.8 Subscription Identifier + public var subscriptionIdentifier: Int = 0 + // 3.3.2.3.9 Content Type + public var contentType: String? + + // public var applicationMessage: [UInt8]? + + // 3.3.2.1 Topic Name + public var topic: String = "" + // 3.3.2.2 Packet Identifier + public var packetIdentifier: UInt16? + public var mqtt5DataIndex = 0 + + public func decodePublish(fixedHeader: UInt8, publishData: [UInt8]) { + // Topic Name + // 3.3.2.1 Topic Name + var dataIndex = 0 + guard let result = unsignedByteToString(data: publishData, offset: dataIndex) else { + return + } + self.topic = result.resStr + dataIndex = result.newOffset + mqtt5DataIndex = dataIndex + + printDebug("topic = \(topic)") + + guard let recQos = CocoaMQTTQoS(rawValue: (fixedHeader & 0b0000_0110) >> 1) else { + return + } + + // 3.3.2.2 Packet Identifier + // Packet Identifier + if recQos == .qos1 || recQos == .qos2 { + let IdentifierResult = integerCompute(data: publishData, formatType: formatInt.formatUint16.rawValue, offset: dataIndex) + packetIdentifier = UInt16(IdentifierResult!.res) + dataIndex = IdentifierResult!.newOffset + } + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // 3.3.2.3.1 Property Length + // propertyLength + let propertyLengthVariableByteInteger = decodeVariableByteInteger(data: publishData, offset: dataIndex) + propertyLength = propertyLengthVariableByteInteger.res + dataIndex = propertyLengthVariableByteInteger.newOffset + mqtt5DataIndex = propertyLengthVariableByteInteger.newOffset + + let occupyIndex = dataIndex + + while dataIndex < occupyIndex + (propertyLength ?? 0) { + + let resVariableByteInteger = decodeVariableByteInteger(data: publishData, offset: dataIndex) + dataIndex = resVariableByteInteger.newOffset + let propertyNameByte = resVariableByteInteger.res + guard let propertyName = CocoaMQTTPropertyName(rawValue: UInt8(propertyNameByte)) else { + break + } + switch propertyName.rawValue { + // 3.3.2.3.2 Payload Format Indicator + case CocoaMQTTPropertyName.payloadFormatIndicator.rawValue: + if publishData[dataIndex] & 0b0000_0001 > 0 { + payloadFormatIndicator = .utf8 + } else { + payloadFormatIndicator = .unspecified + } + dataIndex += 1 + + // 3.3.2.3.3 Message Expiry Interval + case CocoaMQTTPropertyName.willExpiryInterval.rawValue: + let comRes = integerCompute(data: publishData, formatType: formatInt.formatUint32.rawValue, offset: dataIndex) + messageExpiryInterval = UInt32(comRes!.res) + dataIndex = comRes!.newOffset + + // 3.3.2.3.4 Topic Alias + case CocoaMQTTPropertyName.topicAlias.rawValue: + let comRes = integerCompute(data: publishData, formatType: formatInt.formatUint16.rawValue, offset: dataIndex) + topicAlias = UInt16(comRes!.res) + dataIndex = comRes!.newOffset + + // 3.3.2.3.5 Response Topic + case CocoaMQTTPropertyName.responseTopic.rawValue: + guard let result = unsignedByteToString(data: publishData, offset: dataIndex) else { + break + } + responseTopic = result.resStr + dataIndex = result.newOffset + + // 3.3.2.3.6 Correlation Data + case CocoaMQTTPropertyName.correlationData.rawValue: + guard let result = unsignedByteToBinary(data: publishData, offset: dataIndex) else { + break + } + correlationData = result.resStr + dataIndex = result.newOffset + + // 3.3.2.3.7 User Property + case CocoaMQTTPropertyName.userProperty.rawValue: + var key: String? + var value: String? + guard let keyRes = unsignedByteToString(data: publishData, offset: dataIndex) else { + break + } + key = keyRes.resStr + dataIndex = keyRes.newOffset + + guard let valRes = unsignedByteToString(data: publishData, offset: dataIndex) else { + break + } + value = valRes.resStr + dataIndex = valRes.newOffset + + if userProperty == nil { + userProperty = [:] + } + + userProperty![key!] = value + + // 3.3.2.3.8 Subscription Identifier + case CocoaMQTTPropertyName.subscriptionIdentifier.rawValue: + let valRes = decodeVariableByteInteger(data: publishData, offset: dataIndex) + subscriptionIdentifier = valRes.res + dataIndex = valRes.newOffset + + // 3.3.2.3.9 Content Type + case CocoaMQTTPropertyName.contentType.rawValue: + guard let valRes = unsignedByteToString(data: publishData, offset: dataIndex) else { + break + } + contentType = valRes.resStr + dataIndex = valRes.newOffset + + default: + return + } + + } + } + + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttDecodeSubAck.swift b/Pods/CocoaMQTT/Source/MqttDecodeSubAck.swift new file mode 100644 index 0000000..911f646 --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttDecodeSubAck.swift @@ -0,0 +1,100 @@ +// +// MqttDecodeSubAck.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/8/12. +// + +import Foundation + +public class MqttDecodeSubAck: NSObject { + + var totalCount = 0 + var dataIndex = 0 + var propertyLength: Int = 0 + + public var reasonCodes: [CocoaMQTTSUBACKReasonCode] = [] + // public var reasonCode: CocoaMQTTSUBACKReasonCode? + public var msgid: UInt16 = 0 + public var reasonString: String? + public var userProperty: [String: String]? + + public func decodeSubAck(fixedHeader: UInt8, pubAckData: [UInt8]) { + totalCount = pubAckData.count + dataIndex = 0 + // msgid + let msgidResult = integerCompute(data: pubAckData, formatType: formatInt.formatUint16.rawValue, offset: dataIndex) + msgid = UInt16(msgidResult!.res) + dataIndex = msgidResult!.newOffset + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // 3.9.2.1 SUBACK Properties + // 3.9.2.1.1 Property Length + let propertyLengthVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + propertyLength = propertyLengthVariableByteInteger.res + dataIndex = propertyLengthVariableByteInteger.newOffset + let occupyIndex = dataIndex + + while dataIndex < occupyIndex + propertyLength { + let resVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + dataIndex = resVariableByteInteger.newOffset + let propertyNameByte = resVariableByteInteger.res + guard let propertyName = CocoaMQTTPropertyName(rawValue: UInt8(propertyNameByte)) else { + break + } + + switch propertyName.rawValue { + // 3.9.2.1.2 Reason String + case CocoaMQTTPropertyName.reasonString.rawValue: + guard let result = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + reasonString = result.resStr + dataIndex = result.newOffset + + // 3.9.2.1.3 User Property + case CocoaMQTTPropertyName.userProperty.rawValue: + var key: String? + var value: String? + if userProperty == nil { + userProperty = [:] + } + + guard let keyRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + key = keyRes.resStr + dataIndex = keyRes.newOffset + + guard let valRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + value = valRes.resStr + dataIndex = valRes.newOffset + + userProperty![key!] = value + + default: + return + } + } + } + + if dataIndex < totalCount { + while dataIndex < totalCount { + guard let reasonCode = CocoaMQTTSUBACKReasonCode(rawValue: pubAckData[dataIndex]) else { + return + } + reasonCodes.append(reasonCode) + dataIndex += 1 + } + } + + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttDecodeUnsubAck.swift b/Pods/CocoaMQTT/Source/MqttDecodeUnsubAck.swift new file mode 100644 index 0000000..ce0d3c6 --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttDecodeUnsubAck.swift @@ -0,0 +1,96 @@ +// +// MqttDecodeUnsubAck.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/8/16. +// + +import Foundation + +public class MqttDecodeUnsubAck: NSObject { + + var totalCount = 0 + var dataIndex = 0 + var propertyLength: Int = 0 + + public var reasonCodes: [CocoaMQTTUNSUBACKReasonCode] = [] + + public var msgid: UInt16 = 0 + public var reasonString: String? + public var userProperty: [String: String]? + + public func decodeUnSubAck(fixedHeader: UInt8, pubAckData: [UInt8]) { + totalCount = pubAckData.count + dataIndex = 0 + // msgid + let msgidResult = integerCompute(data: pubAckData, formatType: formatInt.formatUint16.rawValue, offset: dataIndex) + msgid = UInt16(msgidResult!.res) + dataIndex = msgidResult!.newOffset + + var protocolVersion = "" + if let storage = CocoaMQTTStorage() { + protocolVersion = storage.queryMQTTVersion() + } + + if protocolVersion == "5.0" { + // 3.11.2.1 UNSUBACK Properties + // 3.11.2.1.1 Property Length + let propertyLengthVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + propertyLength = propertyLengthVariableByteInteger.res + dataIndex = propertyLengthVariableByteInteger.newOffset + let occupyIndex = dataIndex + + while dataIndex < occupyIndex + propertyLength { + let resVariableByteInteger = decodeVariableByteInteger(data: pubAckData, offset: dataIndex) + dataIndex = resVariableByteInteger.newOffset + let propertyNameByte = resVariableByteInteger.res + guard let propertyName = CocoaMQTTPropertyName(rawValue: UInt8(propertyNameByte)) else { + break + } + + switch propertyName.rawValue { + // 3.11.2.1.2 Reason String + case CocoaMQTTPropertyName.reasonString.rawValue: + guard let result = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + reasonString = result.resStr + dataIndex = result.newOffset + + // 3.11.2.1.3 User Property + case CocoaMQTTPropertyName.userProperty.rawValue: + var key: String? + var value: String? + guard let keyRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + key = keyRes.resStr + dataIndex = keyRes.newOffset + + guard let valRes = unsignedByteToString(data: pubAckData, offset: dataIndex) else { + break + } + value = valRes.resStr + dataIndex = valRes.newOffset + + userProperty![key!] = value + + default: + return + } + } + } + + if dataIndex < totalCount { + while dataIndex < totalCount { + guard let reasonCode = CocoaMQTTUNSUBACKReasonCode(rawValue: pubAckData[dataIndex]) else { + return + } + reasonCodes.append(reasonCode) + dataIndex += 1 + } + } + + } + +} diff --git a/Pods/CocoaMQTT/Source/MqttPublishProperties.swift b/Pods/CocoaMQTT/Source/MqttPublishProperties.swift new file mode 100644 index 0000000..c772065 --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttPublishProperties.swift @@ -0,0 +1,93 @@ +// +// MqttPublishProperties.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/7/27. +// + +import Foundation + +public class MqttPublishProperties: NSObject { + + // 3.3.2.3 PUBLISH Properties + // 3.3.2.3.1 Property Length + public var propertyLength: Int? + // 3.3.2.3.2 Payload Format Indicator + public var payloadFormatIndicator: PayloadFormatIndicator? + // 3.3.2.3.3 Message Expiry Interval + public var messageExpiryInterval: UInt32? + // 3.3.2.3.4 Topic Alias + public var topicAlias: UInt16? + // 3.3.2.3.5 Response Topic + public var responseTopic: String? + // 3.3.2.3.6 Correlation Data + public var correlationData: [UInt8]? + // 3.3.2.3.7 Property + public var userProperty: [String: String]? + // 3.3.2.3.8 Subscription Identifier + public var subscriptionIdentifier: UInt32? + // 3.3.2.3.9 Content Type + public var contentType: String? + + public init( + propertyLength: Int? = nil, + payloadFormatIndicator: PayloadFormatIndicator? = nil, + messageExpiryInterval: UInt32? = nil, + topicAlias: UInt16? = nil, + responseTopic: String? = nil, + correlation: String? = nil, + userProperty: [String: String]? = nil, + subscriptionIdentifier: UInt32? = nil, + contentType: String? = nil + ) { + self.propertyLength = propertyLength + self.payloadFormatIndicator = payloadFormatIndicator + self.messageExpiryInterval = messageExpiryInterval + self.topicAlias = topicAlias + self.responseTopic = responseTopic + self.correlationData = correlation?.bytesWithLength + self.userProperty = userProperty + self.subscriptionIdentifier = subscriptionIdentifier + self.contentType = contentType + } + + public var properties: [UInt8] { + var properties = [UInt8]() + + // 3.3.2.3.2 Payload Format Indicator + if let payloadFormatIndicator = self.payloadFormatIndicator { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.payloadFormatIndicator.rawValue, value: [payloadFormatIndicator.rawValue]) + } + // 3.3.2.3.3 Message Expiry Interval + if let messageExpiryInterval = self.messageExpiryInterval { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.willExpiryInterval.rawValue, value: messageExpiryInterval.byteArrayLittleEndian) + } + // 3.3.2.3.4 Topic Alias + if let topicAlias = self.topicAlias { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.topicAlias.rawValue, value: topicAlias.hlBytes) + } + // 3.3.2.3.5 Response Topic + if let responseTopic = self.responseTopic { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.responseTopic.rawValue, value: responseTopic.bytesWithLength) + } + // 3.3.2.3.6 Correlation Data + if let correlationData = self.correlationData { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.correlationData.rawValue, value: correlationData) + } + // 3.3.2.3.7 Property Length User Property + if let userProperty = self.userProperty { + properties += userProperty.userPropertyBytes + } + // 3.3.2.3.8 Subscription Identifier + if let subscriptionIdentifier = self.subscriptionIdentifier, + let subscriptionIdentifier = beVariableByteInteger(subscriptionIdentifier) { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.subscriptionIdentifier.rawValue, value: subscriptionIdentifier) + } + // 3.3.2.3.9 Content Type + if let contentType = self.contentType { + properties += getMQTTPropertyData(type: CocoaMQTTPropertyName.contentType.rawValue, value: contentType.bytesWithLength) + } + + return properties + } +} diff --git a/Pods/CocoaMQTT/Source/MqttSubscription.swift b/Pods/CocoaMQTT/Source/MqttSubscription.swift new file mode 100644 index 0000000..721178b --- /dev/null +++ b/Pods/CocoaMQTT/Source/MqttSubscription.swift @@ -0,0 +1,76 @@ +// +// MqttSubscription.swift +// CocoaMQTT +// +// Created by liwei wang on 2021/7/15. +// + +import Foundation + +/// 3.8.3.1 Subscription Options +public class MqttSubscription { + + public var topic: String + public var qos = CocoaMQTTQoS.qos1 + public var noLocal: Bool = false + public var retainAsPublished: Bool = false + public var retainHandling: CocoaRetainHandlingOption = .sendOnSubscribe + public var subscriptionOptions: Bool = false + + public init(topic: String) { + self.topic = topic + } + + public init(topic: String, qos: CocoaMQTTQoS) { + self.topic = topic + self.qos = qos + } + + var subscriptionData: [UInt8] { + var data = [UInt8]() + + data += topic.bytesWithLength + + var options: Int = 0 + switch self.qos { + case .qos0: + options = options | 0b0000_0000 + case .qos1: + options = options | 0b0000_0001 + case .qos2: + options = options | 0b0000_0010 + default: + printDebug("topicFilter qos failure") + } + + switch self.noLocal { + case true: + options = options | 0b0000_0100 + case false: + options = options | 0b0000_0000 + } + + switch self.retainAsPublished { + case true: + options = options | 0b0000_1000 + case false: + options = options | 0b0000_0000 + } + + switch self.retainHandling { + case CocoaRetainHandlingOption.none: + options = options | 0b0010_0000 + case CocoaRetainHandlingOption.sendOnlyWhenSubscribeIsNew: + options = options | 0b0001_0000 + case CocoaRetainHandlingOption.sendOnSubscribe: + options = options | 0b0000_0000 + } + + if subscriptionOptions { + data += [UInt8(options)] + } + + return data + } + +} diff --git a/Pods/CocoaMQTT/Source/ThreadSafeDictionary.swift b/Pods/CocoaMQTT/Source/ThreadSafeDictionary.swift new file mode 100644 index 0000000..19fbc83 --- /dev/null +++ b/Pods/CocoaMQTT/Source/ThreadSafeDictionary.swift @@ -0,0 +1,78 @@ +// +// Copyright © 2022. All rights reserved. +// + +import Foundation + +/// A thread-safe dictionary +public class ThreadSafeDictionary: Collection { + private var dictionary: [K: V] + private let concurrentQueue: DispatchQueue + + public var startIndex: Dictionary.Index { + concurrentQueue.sync { + return self.dictionary.startIndex + } + } + + public var endIndex: Dictionary.Index { + concurrentQueue.sync { + return self.dictionary.endIndex + } + } + + public init(label: String, dict: [K: V] = [K: V]()) { + self.dictionary = dict + concurrentQueue = DispatchQueue(label: label, attributes: .concurrent) + } + + public func index(after i: Dictionary.Index) -> Dictionary.Index { + concurrentQueue.sync { + self.dictionary.index(after: i) + } + } + + public subscript(key: K) -> V? { + get { + concurrentQueue.sync { + self.dictionary[key] + } + } + set(newValue) { + concurrentQueue.async(flags: .barrier) {[weak self] in + self?.dictionary[key] = newValue + } + } + } + + public subscript(index: Dictionary.Index) -> Dictionary.Element { + concurrentQueue.sync { + self.dictionary[index] + } + } + + @discardableResult + public func removeValue(forKey key: K) -> V? { + concurrentQueue.sync(flags: .barrier) { + self.dictionary.removeValue(forKey: key) + } + } + + public func removeAll() { + concurrentQueue.async(flags: .barrier) {[weak self] in + self?.dictionary.removeAll() + } + } + + public func snapshot() -> [K: V] { + concurrentQueue.sync { + dictionary + } + } + + public func replace(with newDictionary: [K: V]) { + concurrentQueue.sync(flags: .barrier) { + dictionary = newDictionary + } + } +} diff --git a/Pods/CocoaMQTT/Source/utilities/ConcurrentAtomic.swift b/Pods/CocoaMQTT/Source/utilities/ConcurrentAtomic.swift new file mode 100644 index 0000000..bb03ef7 --- /dev/null +++ b/Pods/CocoaMQTT/Source/utilities/ConcurrentAtomic.swift @@ -0,0 +1,73 @@ +import Foundation + +/// A thread-safe property wrapper that uses a concurrent dispatch queue for atomic operations. +/// +/// This wrapper provides both synchronous and asynchronous access to a wrapped value in a +/// thread-safe manner using `DispatchQueue` with `.concurrent` attributes and `.barrier` writes. +/// +/// - Important: Although this wrapper provides atomicity for access, it does not make the wrapped +/// value itself thread-safe if the type is not thread-safe. Avoid wrapping types that manage +/// internal shared state without their own synchronization. +/// +/// - Example: +/// ```swift +/// @ConcurrentAtomic var counter: Int = 0 +/// counter += 1 +/// print(counter) +/// ``` +@propertyWrapper +public class ConcurrentAtomic { + private var _value: T + private let queue: DispatchQueue + + /// Provides synchronous thread-safe access to the wrapped value. + /// + /// - Note: Reads use `queue.sync` and can happen concurrently. + /// - Warning: Writes are done asynchronously with `.barrier`, so a following read may + /// not reflect the new value immediately. + public var wrappedValue: T { + get { + queue.sync { _value } + } + set { + queue.async(flags: .barrier) { + self._value = newValue + } + } + } + + /// Returns the property wrapper instance itself for advanced usage, including mutation and transformation APIs. + public var projectedValue: ConcurrentAtomic { self } + + /// Initializes the property wrapper with an initial value and a custom queue label. + /// + /// - Parameters: + /// - wrappedValue: The initial value to store. + /// - label: A debug label for the underlying `DispatchQueue`. Default is `"ConcurrentAtomic.Queue"`. + public init(wrappedValue: T, label: String = "ConcurrentAtomic.Queue") { + self._value = wrappedValue + self.queue = DispatchQueue(label: label, attributes: .concurrent) + } + + /// Synchronously sets a new value in a thread-safe manner. + /// + /// This uses `.barrier` to ensure the new value is fully written before continuing. + /// + /// - Parameter newValue: The new value to be written. + public func setSync(_ newValue: T) { + queue.sync(flags: .barrier) { + self._value = newValue + } + } + + /// Asynchronously mutates the wrapped value using a transform closure. + /// + /// The mutation is performed with `.barrier`, ensuring it does not overlap with other reads or writes. + /// + /// - Parameter transform: A closure that receives `inout` access to the wrapped value. + public func mutate(_ transform: @escaping (inout T) -> Void) { + queue.async(flags: .barrier) { + transform(&self._value) + } + } +} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock index b5bfe45..75c9e6a 100644 --- a/Pods/Manifest.lock +++ b/Pods/Manifest.lock @@ -11,6 +11,10 @@ PODS: - CocoaLumberjack/Core (3.9.1) - CocoaLumberjack/Swift (3.9.1): - CocoaLumberjack/Core + - CocoaMQTT (2.2.5): + - CocoaMQTT/Core (= 2.2.5) + - CocoaMQTT/Core (2.2.5): + - MqttCocoaAsyncSocket (~> 1.0.8) - Differentiator (5.0.0) - GTCommonSDK (3.2.3.0): - ZXSDK @@ -89,6 +93,7 @@ PODS: - Moya/Core (= 15.0.0) - Moya/Core (15.0.0): - Alamofire (~> 5.0) + - MqttCocoaAsyncSocket (1.0.8) - ObjectMapper (4.4.2) - "OpenIMSDK (3.8.3+hotfix.3.1)": - MJExtension @@ -174,6 +179,7 @@ DEPENDENCIES: - AMapLocation - AMapSearch - CocoaLumberjack/Swift + - CocoaMQTT - GYSDK - HXPHPicker - IQKeyboardManagerSwift @@ -215,6 +221,7 @@ SPEC REPOS: - AMapLocation - AMapSearch - CocoaLumberjack + - CocoaMQTT - Differentiator - GTCommonSDK - GYSDK @@ -236,6 +243,7 @@ SPEC REPOS: - MJExtension - MJRefresh - Moya + - MqttCocoaAsyncSocket - ObjectMapper - OpenIMSDK - OpenIMSDKCore @@ -277,6 +285,7 @@ SPEC CHECKSUMS: AMapLocation: 6e44f50b044dc54c6b3dcb1dee5ffd6de2689e41 AMapSearch: 29224a399b56b17da1540e4312fc4d9dc37342bb CocoaLumberjack: e4ba3b414dfca8c1916c6303d37f63b3a95134c6 + CocoaMQTT: 1e2fa493d57045d66fb1eba2bb5ffb8d77039c60 Differentiator: e8497ceab83c1b10ca233716d547b9af21b9344d GTCommonSDK: 238c6735add91e654f8564638854686ee3dcb4ac GYSDK: db5f4b3aae8df06201be5e786076211ec11791be @@ -299,6 +308,7 @@ SPEC CHECKSUMS: MJExtension: e97d164cb411aa9795cf576093a1fa208b4a8dd8 MJRefresh: ff9e531227924c84ce459338414550a05d2aea78 Moya: 138f0573e53411fb3dc17016add0b748dfbd78ee + MqttCocoaAsyncSocket: 77d3b74f76228dd5a05d1f9526eab101d415b30c ObjectMapper: e6e4d91ff7f2861df7aecc536c92d8363f4c9677 OpenIMSDK: c1880296ead605bcac2a289ad0aef9170fe6e6df OpenIMSDKCore: 75caba22be8ee484011f367711178312bd64a17d @@ -323,6 +333,6 @@ SPEC CHECKSUMS: YYImage: 1e1b62a9997399593e4b9c4ecfbbabbf1d3f3b54 ZXSDK: 786338c0a18e98e03eda00699c3bfd2700b97117 -PODFILE CHECKSUM: 6ba8ada83ccc565c9bdcc418e9a936818640882c +PODFILE CHECKSUM: 861114200722c29adba98535aef6b0494d123b44 COCOAPODS: 1.16.2 diff --git a/Pods/MqttCocoaAsyncSocket/LICENSE.txt b/Pods/MqttCocoaAsyncSocket/LICENSE.txt new file mode 100644 index 0000000..ed3d60f --- /dev/null +++ b/Pods/MqttCocoaAsyncSocket/LICENSE.txt @@ -0,0 +1,35 @@ +This library is in the public domain. +However, not all organizations are allowed to use such a license. +For example, Germany doesn't recognize the Public Domain and one is not allowed to use libraries under such license (or similar). + +Thus, the library is now dual licensed, +and one is allowed to choose which license they would like to use. + +################################################## +License Option #1 : +################################################## + +Public Domain + +################################################## +License Option #2 : +################################################## + +Software License Agreement (BSD License) + +Copyright (c) 2017, Deusty, LLC +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Neither the name of Deusty LLC nor the names of its + contributors may be used to endorse or promote products + derived from this software without specific prior + written permission of Deusty LLC. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/Pods/MqttCocoaAsyncSocket/README.markdown b/Pods/MqttCocoaAsyncSocket/README.markdown new file mode 100644 index 0000000..6592dd7 --- /dev/null +++ b/Pods/MqttCocoaAsyncSocket/README.markdown @@ -0,0 +1,121 @@ +# CocoaAsyncSocket +[![Build Status](https://travis-ci.org/robbiehanson/CocoaAsyncSocket.svg?branch=master)](https://travis-ci.org/robbiehanson/CocoaAsyncSocket) [![Version Status](https://img.shields.io/cocoapods/v/CocoaAsyncSocket.svg?style=flat)](http://cocoadocs.org/docsets/CocoaAsyncSocket) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) [![Platform](http://img.shields.io/cocoapods/p/CocoaAsyncSocket.svg?style=flat)](http://cocoapods.org/?q=CocoaAsyncSocket) [![license Public Domain](https://img.shields.io/badge/license-Public%20Domain-orange.svg?style=flat)](https://en.wikipedia.org/wiki/Public_domain) + + +CocoaAsyncSocket provides easy-to-use and powerful asynchronous socket libraries for macOS, iOS, and tvOS. The classes are described below. + +## Installation + +#### CocoaPods + +Install using [CocoaPods](https://cocoapods.org) by adding this line to your Podfile: + +````ruby +use_frameworks! # Add this if you are targeting iOS 8+ or using Swift +pod 'CocoaAsyncSocket' +```` + +#### Carthage + +CocoaAsyncSocket is [Carthage](https://github.com/Carthage/Carthage) compatible. To include it add the following line to your `Cartfile` + +```bash +github "robbiehanson/CocoaAsyncSocket" "master" +``` + +The project is currently configured to build for **iOS**, **tvOS** and **Mac**. After building with carthage the resultant frameworks will be stored in: + +* `Carthage/Build/iOS/CocoaAsyncSocket.framework` +* `Carthage/Build/tvOS/CocoaAsyncSocket.framework` +* `Carthage/Build/Mac/CocoaAsyncSocket.framework` + +Select the correct framework(s) and drag it into your project. + +#### Swift Package Manager + +Simply add the package dependency to your Package.swift and depend on "CocoaAsyncSocket" in the necessary targets: +```swift +dependencies: [ + .package(url: "https://github.com/robbiehanson/CocoaAsyncSocket", from: "7.6.4") +] +``` + +#### Manual + +You can also include it into your project by adding the source files directly, but you should probably be using a dependency manager to keep up to date. + +### Importing + +Using Objective-C: + +```obj-c +// When using Clang Modules: +@import MqttCocoaAsyncSocket; + +// or when not: +#import "GCDAsyncSocket.h" // for TCP +#import "GCDAsyncUdpSocket.h" // for UDP +``` + +Using Swift: + +```swift +import MqttCocoaAsyncSocket +``` + +## TCP + +**GCDAsyncSocket** is a TCP/IP socket networking library built atop Grand Central Dispatch. Here are the key features available: + +- Native Objective-C, fully self-contained in one class.
+ _No need to muck around with sockets or streams. This class handles everything for you._ + +- Full delegate support
+ _Errors, connections, read completions, write completions, progress, and disconnections all result in a call to your delegate method._ + +- Queued non-blocking reads and writes, with optional timeouts.
+ _You tell it what to read or write, and it handles everything for you. Queueing, buffering, and searching for termination sequences within the stream - all handled for you automatically._ + +- Automatic socket acceptance.
+ _Spin up a server socket, tell it to accept connections, and it will call you with new instances of itself for each connection._ + +- Support for TCP streams over IPv4 and IPv6.
+ _Automatically connect to IPv4 or IPv6 hosts. Automatically accept incoming connections over both IPv4 and IPv6 with a single instance of this class. No more worrying about multiple sockets._ + +- Support for TLS / SSL
+ _Secure your socket with ease using just a single method call. Available for both client and server sockets._ + +- Fully GCD based and Thread-Safe
+ _It runs entirely within its own GCD dispatch_queue, and is completely thread-safe. Further, the delegate methods are all invoked asynchronously onto a dispatch_queue of your choosing. This means parallel operation of your socket code, and your delegate/processing code._ + +## UDP + +**GCDAsyncUdpSocket** is a UDP/IP socket networking library built atop Grand Central Dispatch. Here are the key features available: + +- Native Objective-C, fully self-contained in one class.
+ _No need to muck around with low-level sockets. This class handles everything for you._ + +- Full delegate support.
+ _Errors, send completions, receive completions, and disconnections all result in a call to your delegate method._ + +- Queued non-blocking send and receive operations, with optional timeouts.
+ _You tell it what to send or receive, and it handles everything for you. Queueing, buffering, waiting and checking errno - all handled for you automatically._ + +- Support for IPv4 and IPv6.
+ _Automatically send/recv using IPv4 and/or IPv6. No more worrying about multiple sockets._ + +- Fully GCD based and Thread-Safe
+ _It runs entirely within its own GCD dispatch_queue, and is completely thread-safe. Further, the delegate methods are all invoked asynchronously onto a dispatch_queue of your choosing. This means parallel operation of your socket code, and your delegate/processing code._ + +*** + +For those new(ish) to networking, it's recommended you **[read the wiki](https://github.com/robbiehanson/CocoaAsyncSocket/wiki)**.
_Sockets might not work exactly like you think they do..._ + +**Still got questions?** Try the **[CocoaAsyncSocket Mailing List](https://groups.google.com/group/cocoaasyncsocket)**. +*** + +Love the project? Wanna buy me a ☕️  ? (or a 🍺  😀 ): + +[![donation-bitcoin](https://bitpay.com/img/donate-sm.png)](https://onename.com/robbiehanson) +[![donation-paypal](https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2M8C699FQ8AW2) + diff --git a/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncSocket.h b/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncSocket.h new file mode 100644 index 0000000..8f1699c --- /dev/null +++ b/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncSocket.h @@ -0,0 +1,1226 @@ +// +// MGCDAsyncSocket.h +// +// This class is in the public domain. +// Originally created by Robbie Hanson in Q3 2010. +// Updated and maintained by Deusty LLC and the Apple development community. +// +// https://github.com/robbiehanson/CocoaAsyncSocket +// + +#import +#import +#import +#import +#import + +#include // AF_INET, AF_INET6 + +@class MGCDAsyncReadPacket; +@class MGCDAsyncWritePacket; +@class MGCDAsyncSocketPreBuffer; +@protocol MGCDAsyncSocketDelegate; + +NS_ASSUME_NONNULL_BEGIN + +extern NSString *const MGCDAsyncSocketException; +extern NSString *const MGCDAsyncSocketErrorDomain; + +extern NSString *const MGCDAsyncSocketQueueName; +extern NSString *const MGCDAsyncSocketThreadName; + +extern NSString *const MGCDAsyncSocketManuallyEvaluateTrust; +#if TARGET_OS_IPHONE +extern NSString *const MGCDAsyncSocketUseCFStreamForTLS; +#endif +#define MGCDAsyncSocketSSLPeerName (NSString *)kCFStreamSSLPeerName +#define MGCDAsyncSocketSSLCertificates (NSString *)kCFStreamSSLCertificates +#define MGCDAsyncSocketSSLIsServer (NSString *)kCFStreamSSLIsServer +extern NSString *const MGCDAsyncSocketSSLPeerID; +extern NSString *const MGCDAsyncSocketSSLProtocolVersionMin; +extern NSString *const MGCDAsyncSocketSSLProtocolVersionMax; +extern NSString *const MGCDAsyncSocketSSLSessionOptionFalseStart; +extern NSString *const MGCDAsyncSocketSSLSessionOptionSendOneByteRecord; +extern NSString *const MGCDAsyncSocketSSLCipherSuites; +extern NSString *const MGCDAsyncSocketSSLALPN; +#if !TARGET_OS_IPHONE +extern NSString *const MGCDAsyncSocketSSLDiffieHellmanParameters; +#endif + +#define MGCDAsyncSocketLoggingContext 65535 + + +typedef NS_ERROR_ENUM(MGCDAsyncSocketErrorDomain, MGCDAsyncSocketError) { + MGCDAsyncSocketNoError = 0, // Never used + MGCDAsyncSocketBadConfigError, // Invalid configuration + MGCDAsyncSocketBadParamError, // Invalid parameter was passed + MGCDAsyncSocketConnectTimeoutError, // A connect operation timed out + MGCDAsyncSocketReadTimeoutError, // A read operation timed out + MGCDAsyncSocketWriteTimeoutError, // A write operation timed out + MGCDAsyncSocketReadMaxedOutError, // Reached set maxLength without completing + MGCDAsyncSocketClosedError, // The remote peer closed the connection + MGCDAsyncSocketOtherError, // Description provided in userInfo +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +@interface MGCDAsyncSocket : NSObject + +/** + * MGCDAsyncSocket uses the standard delegate paradigm, + * but executes all delegate callbacks on a given delegate dispatch queue. + * This allows for maximum concurrency, while at the same time providing easy thread safety. + * + * You MUST set a delegate AND delegate dispatch queue before attempting to + * use the socket, or you will get an error. + * + * The socket queue is optional. + * If you pass NULL, MGCDAsyncSocket will automatically create it's own socket queue. + * If you choose to provide a socket queue, the socket queue must not be a concurrent queue. + * If you choose to provide a socket queue, and the socket queue has a configured target queue, + * then please see the discussion for the method markSocketQueueTargetQueue. + * + * The delegate queue and socket queue can optionally be the same. +**/ +- (instancetype)init; +- (instancetype)initWithSocketQueue:(nullable dispatch_queue_t)sq; +- (instancetype)initWithDelegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq; +- (instancetype)initWithDelegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq socketQueue:(nullable dispatch_queue_t)sq NS_DESIGNATED_INITIALIZER; + +/** + * Create MGCDAsyncSocket from already connect BSD socket file descriptor +**/ ++ (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD socketQueue:(nullable dispatch_queue_t)sq error:(NSError**)error; + ++ (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD delegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq error:(NSError**)error; + ++ (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD delegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq socketQueue:(nullable dispatch_queue_t)sq error:(NSError **)error; + +#pragma mark Configuration + +@property (atomic, weak, readwrite, nullable) id delegate; +#if OS_OBJECT_USE_OBJC +@property (atomic, strong, readwrite, nullable) dispatch_queue_t delegateQueue; +#else +@property (atomic, assign, readwrite, nullable) dispatch_queue_t delegateQueue; +#endif + +- (void)getDelegate:(id __nullable * __nullable)delegatePtr delegateQueue:(dispatch_queue_t __nullable * __nullable)delegateQueuePtr; +- (void)setDelegate:(nullable id)delegate delegateQueue:(nullable dispatch_queue_t)delegateQueue; + +/** + * If you are setting the delegate to nil within the delegate's dealloc method, + * you may need to use the synchronous versions below. +**/ +- (void)synchronouslySetDelegate:(nullable id)delegate; +- (void)synchronouslySetDelegateQueue:(nullable dispatch_queue_t)delegateQueue; +- (void)synchronouslySetDelegate:(nullable id)delegate delegateQueue:(nullable dispatch_queue_t)delegateQueue; + +/** + * By default, both IPv4 and IPv6 are enabled. + * + * For accepting incoming connections, this means MGCDAsyncSocket automatically supports both protocols, + * and can simulataneously accept incoming connections on either protocol. + * + * For outgoing connections, this means MGCDAsyncSocket can connect to remote hosts running either protocol. + * If a DNS lookup returns only IPv4 results, MGCDAsyncSocket will automatically use IPv4. + * If a DNS lookup returns only IPv6 results, MGCDAsyncSocket will automatically use IPv6. + * If a DNS lookup returns both IPv4 and IPv6 results, the preferred protocol will be chosen. + * By default, the preferred protocol is IPv4, but may be configured as desired. +**/ + +@property (atomic, assign, readwrite, getter=isIPv4Enabled) BOOL IPv4Enabled; +@property (atomic, assign, readwrite, getter=isIPv6Enabled) BOOL IPv6Enabled; + +@property (atomic, assign, readwrite, getter=isIPv4PreferredOverIPv6) BOOL IPv4PreferredOverIPv6; + +/** + * When connecting to both IPv4 and IPv6 using Happy Eyeballs (RFC 6555) https://tools.ietf.org/html/rfc6555 + * this is the delay between connecting to the preferred protocol and the fallback protocol. + * + * Defaults to 300ms. +**/ +@property (atomic, assign, readwrite) NSTimeInterval alternateAddressDelay; + +/** + * User data allows you to associate arbitrary information with the socket. + * This data is not used internally by socket in any way. +**/ +@property (atomic, strong, readwrite, nullable) id userData; + +#pragma mark Accepting + +/** + * Tells the socket to begin listening and accepting connections on the given port. + * When a connection is accepted, a new instance of MGCDAsyncSocket will be spawned to handle it, + * and the socket:didAcceptNewSocket: delegate method will be invoked. + * + * The socket will listen on all available interfaces (e.g. wifi, ethernet, etc) +**/ +- (BOOL)acceptOnPort:(uint16_t)port error:(NSError **)errPtr; + +/** + * This method is the same as acceptOnPort:error: with the + * additional option of specifying which interface to listen on. + * + * For example, you could specify that the socket should only accept connections over ethernet, + * and not other interfaces such as wifi. + * + * The interface may be specified by name (e.g. "en1" or "lo0") or by IP address (e.g. "192.168.4.34"). + * You may also use the special strings "localhost" or "loopback" to specify that + * the socket only accept connections from the local machine. + * + * You can see the list of interfaces via the command line utility "ifconfig", + * or programmatically via the getifaddrs() function. + * + * To accept connections on any interface pass nil, or simply use the acceptOnPort:error: method. +**/ +- (BOOL)acceptOnInterface:(nullable NSString *)interface port:(uint16_t)port error:(NSError **)errPtr; + +/** + * Tells the socket to begin listening and accepting connections on the unix domain at the given url. + * When a connection is accepted, a new instance of MGCDAsyncSocket will be spawned to handle it, + * and the socket:didAcceptNewSocket: delegate method will be invoked. + * + * The socket will listen on all available interfaces (e.g. wifi, ethernet, etc) + **/ +- (BOOL)acceptOnUrl:(NSURL *)url error:(NSError **)errPtr; + +#pragma mark Connecting + +/** + * Connects to the given host and port. + * + * This method invokes connectToHost:onPort:viaInterface:withTimeout:error: + * and uses the default interface, and no timeout. +**/ +- (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)errPtr; + +/** + * Connects to the given host and port with an optional timeout. + * + * This method invokes connectToHost:onPort:viaInterface:withTimeout:error: and uses the default interface. +**/ +- (BOOL)connectToHost:(NSString *)host + onPort:(uint16_t)port + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr; + +/** + * Connects to the given host & port, via the optional interface, with an optional timeout. + * + * The host may be a domain name (e.g. "deusty.com") or an IP address string (e.g. "192.168.0.2"). + * The host may also be the special strings "localhost" or "loopback" to specify connecting + * to a service on the local machine. + * + * The interface may be a name (e.g. "en1" or "lo0") or the corresponding IP address (e.g. "192.168.4.35"). + * The interface may also be used to specify the local port (see below). + * + * To not time out use a negative time interval. + * + * This method will return NO if an error is detected, and set the error pointer (if one was given). + * Possible errors would be a nil host, invalid interface, or socket is already connected. + * + * If no errors are detected, this method will start a background connect operation and immediately return YES. + * The delegate callbacks are used to notify you when the socket connects, or if the host was unreachable. + * + * Since this class supports queued reads and writes, you can immediately start reading and/or writing. + * All read/write operations will be queued, and upon socket connection, + * the operations will be dequeued and processed in order. + * + * The interface may optionally contain a port number at the end of the string, separated by a colon. + * This allows you to specify the local port that should be used for the outgoing connection. (read paragraph to end) + * To specify both interface and local port: "en1:8082" or "192.168.4.35:2424". + * To specify only local port: ":8082". + * Please note this is an advanced feature, and is somewhat hidden on purpose. + * You should understand that 99.999% of the time you should NOT specify the local port for an outgoing connection. + * If you think you need to, there is a very good chance you have a fundamental misunderstanding somewhere. + * Local ports do NOT need to match remote ports. In fact, they almost never do. + * This feature is here for networking professionals using very advanced techniques. +**/ +- (BOOL)connectToHost:(NSString *)host + onPort:(uint16_t)port + viaInterface:(nullable NSString *)interface + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr; + +/** + * Connects to the given address, specified as a sockaddr structure wrapped in a NSData object. + * For example, a NSData object returned from NSNetService's addresses method. + * + * If you have an existing struct sockaddr you can convert it to a NSData object like so: + * struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; + * struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; + * + * This method invokes connectToAddress:remoteAddr viaInterface:nil withTimeout:-1 error:errPtr. +**/ +- (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr; + +/** + * This method is the same as connectToAddress:error: with an additional timeout option. + * To not time out use a negative time interval, or simply use the connectToAddress:error: method. +**/ +- (BOOL)connectToAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr; + +/** + * Connects to the given address, using the specified interface and timeout. + * + * The address is specified as a sockaddr structure wrapped in a NSData object. + * For example, a NSData object returned from NSNetService's addresses method. + * + * If you have an existing struct sockaddr you can convert it to a NSData object like so: + * struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; + * struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; + * + * The interface may be a name (e.g. "en1" or "lo0") or the corresponding IP address (e.g. "192.168.4.35"). + * The interface may also be used to specify the local port (see below). + * + * The timeout is optional. To not time out use a negative time interval. + * + * This method will return NO if an error is detected, and set the error pointer (if one was given). + * Possible errors would be a nil host, invalid interface, or socket is already connected. + * + * If no errors are detected, this method will start a background connect operation and immediately return YES. + * The delegate callbacks are used to notify you when the socket connects, or if the host was unreachable. + * + * Since this class supports queued reads and writes, you can immediately start reading and/or writing. + * All read/write operations will be queued, and upon socket connection, + * the operations will be dequeued and processed in order. + * + * The interface may optionally contain a port number at the end of the string, separated by a colon. + * This allows you to specify the local port that should be used for the outgoing connection. (read paragraph to end) + * To specify both interface and local port: "en1:8082" or "192.168.4.35:2424". + * To specify only local port: ":8082". + * Please note this is an advanced feature, and is somewhat hidden on purpose. + * You should understand that 99.999% of the time you should NOT specify the local port for an outgoing connection. + * If you think you need to, there is a very good chance you have a fundamental misunderstanding somewhere. + * Local ports do NOT need to match remote ports. In fact, they almost never do. + * This feature is here for networking professionals using very advanced techniques. +**/ +- (BOOL)connectToAddress:(NSData *)remoteAddr + viaInterface:(nullable NSString *)interface + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr; +/** + * Connects to the unix domain socket at the given url, using the specified timeout. + */ +- (BOOL)connectToUrl:(NSURL *)url withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr; + +/** + * Iterates over the given NetService's addresses in order, and invokes connectToAddress:error:. Stops at the + * first invocation that succeeds and returns YES; otherwise returns NO. + */ +- (BOOL)connectToNetService:(NSNetService *)netService error:(NSError **)errPtr; + +#pragma mark Disconnecting + +/** + * Disconnects immediately (synchronously). Any pending reads or writes are dropped. + * + * If the socket is not already disconnected, an invocation to the socketDidDisconnect:withError: delegate method + * will be queued onto the delegateQueue asynchronously (behind any previously queued delegate methods). + * In other words, the disconnected delegate method will be invoked sometime shortly after this method returns. + * + * Please note the recommended way of releasing a MGCDAsyncSocket instance (e.g. in a dealloc method) + * [asyncSocket setDelegate:nil]; + * [asyncSocket disconnect]; + * [asyncSocket release]; + * + * If you plan on disconnecting the socket, and then immediately asking it to connect again, + * you'll likely want to do so like this: + * [asyncSocket setDelegate:nil]; + * [asyncSocket disconnect]; + * [asyncSocket setDelegate:self]; + * [asyncSocket connect...]; +**/ +- (void)disconnect; + +/** + * Disconnects after all pending reads have completed. + * After calling this, the read and write methods will do nothing. + * The socket will disconnect even if there are still pending writes. +**/ +- (void)disconnectAfterReading; + +/** + * Disconnects after all pending writes have completed. + * After calling this, the read and write methods will do nothing. + * The socket will disconnect even if there are still pending reads. +**/ +- (void)disconnectAfterWriting; + +/** + * Disconnects after all pending reads and writes have completed. + * After calling this, the read and write methods will do nothing. +**/ +- (void)disconnectAfterReadingAndWriting; + +#pragma mark Diagnostics + +/** + * Returns whether the socket is disconnected or connected. + * + * A disconnected socket may be recycled. + * That is, it can be used again for connecting or listening. + * + * If a socket is in the process of connecting, it may be neither disconnected nor connected. +**/ +@property (atomic, readonly) BOOL isDisconnected; +@property (atomic, readonly) BOOL isConnected; + +/** + * Returns the local or remote host and port to which this socket is connected, or nil and 0 if not connected. + * The host will be an IP address. +**/ +@property (atomic, readonly, nullable) NSString *connectedHost; +@property (atomic, readonly) uint16_t connectedPort; +@property (atomic, readonly, nullable) NSURL *connectedUrl; + +@property (atomic, readonly, nullable) NSString *localHost; +@property (atomic, readonly) uint16_t localPort; + +/** + * Returns the local or remote address to which this socket is connected, + * specified as a sockaddr structure wrapped in a NSData object. + * + * @seealso connectedHost + * @seealso connectedPort + * @seealso localHost + * @seealso localPort +**/ +@property (atomic, readonly, nullable) NSData *connectedAddress; +@property (atomic, readonly, nullable) NSData *localAddress; + +/** + * Returns whether the socket is IPv4 or IPv6. + * An accepting socket may be both. +**/ +@property (atomic, readonly) BOOL isIPv4; +@property (atomic, readonly) BOOL isIPv6; + +/** + * Returns whether or not the socket has been secured via SSL/TLS. + * + * See also the startTLS method. +**/ +@property (atomic, readonly) BOOL isSecure; + +#pragma mark Reading + +// The readData and writeData methods won't block (they are asynchronous). +// +// When a read is complete the socket:didReadData:withTag: delegate method is dispatched on the delegateQueue. +// When a write is complete the socket:didWriteDataWithTag: delegate method is dispatched on the delegateQueue. +// +// You may optionally set a timeout for any read/write operation. (To not timeout, use a negative time interval.) +// If a read/write opertion times out, the corresponding "socket:shouldTimeout..." delegate method +// is called to optionally allow you to extend the timeout. +// Upon a timeout, the "socket:didDisconnectWithError:" method is called +// +// The tag is for your convenience. +// You can use it as an array index, step number, state id, pointer, etc. + +/** + * Reads the first available bytes that become available on the socket. + * + * If the timeout value is negative, the read operation will not use a timeout. +**/ +- (void)readDataWithTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Reads the first available bytes that become available on the socket. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer is nil, the socket will create a buffer for you. + * + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing, and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while the socket is using it. + * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer via + * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. +**/ +- (void)readDataWithTimeout:(NSTimeInterval)timeout + buffer:(nullable NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag; + +/** + * Reads the first available bytes that become available on the socket. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * A maximum of length bytes will be read. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer is nil, a buffer will automatically be created for you. + * If maxLength is zero, no length restriction is enforced. + * + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing, and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while the socket is using it. + * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer via + * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. +**/ +- (void)readDataWithTimeout:(NSTimeInterval)timeout + buffer:(nullable NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + maxLength:(NSUInteger)length + tag:(long)tag; + +/** + * Reads the given number of bytes. + * + * If the timeout value is negative, the read operation will not use a timeout. + * + * If the length is 0, this method does nothing and the delegate is not called. +**/ +- (void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Reads the given number of bytes. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer is nil, a buffer will automatically be created for you. + * + * If the length is 0, this method does nothing and the delegate is not called. + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing, and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while AsyncSocket is using it. + * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer via + * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. +**/ +- (void)readDataToLength:(NSUInteger)length + withTimeout:(NSTimeInterval)timeout + buffer:(nullable NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag; + +/** + * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. + * + * If the timeout value is negative, the read operation will not use a timeout. + * + * If you pass nil or zero-length data as the "data" parameter, + * the method will do nothing (except maybe print a warning), and the delegate will not be called. + * + * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. + * If you're developing your own custom protocol, be sure your separator can not occur naturally as + * part of the data between separators. + * For example, imagine you want to send several small documents over a socket. + * Using CRLF as a separator is likely unwise, as a CRLF could easily exist within the documents. + * In this particular example, it would be better to use a protocol similar to HTTP with + * a header that includes the length of the document. + * Also be careful that your separator cannot occur naturally as part of the encoding for a character. + * + * The given data (separator) parameter should be immutable. + * For performance reasons, the socket will retain it, not copy it. + * So if it is immutable, don't modify it while the socket is using it. +**/ +- (void)readDataToData:(nullable NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer is nil, a buffer will automatically be created for you. + * + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing (except maybe print a warning), and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while the socket is using it. + * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer via + * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. + * + * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. + * If you're developing your own custom protocol, be sure your separator can not occur naturally as + * part of the data between separators. + * For example, imagine you want to send several small documents over a socket. + * Using CRLF as a separator is likely unwise, as a CRLF could easily exist within the documents. + * In this particular example, it would be better to use a protocol similar to HTTP with + * a header that includes the length of the document. + * Also be careful that your separator cannot occur naturally as part of the encoding for a character. + * + * The given data (separator) parameter should be immutable. + * For performance reasons, the socket will retain it, not copy it. + * So if it is immutable, don't modify it while the socket is using it. +**/ +- (void)readDataToData:(NSData *)data + withTimeout:(NSTimeInterval)timeout + buffer:(nullable NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag; + +/** + * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. + * + * If the timeout value is negative, the read operation will not use a timeout. + * + * If maxLength is zero, no length restriction is enforced. + * Otherwise if maxLength bytes are read without completing the read, + * it is treated similarly to a timeout - the socket is closed with a MGCDAsyncSocketReadMaxedOutError. + * The read will complete successfully if exactly maxLength bytes are read and the given data is found at the end. + * + * If you pass nil or zero-length data as the "data" parameter, + * the method will do nothing (except maybe print a warning), and the delegate will not be called. + * If you pass a maxLength parameter that is less than the length of the data parameter, + * the method will do nothing (except maybe print a warning), and the delegate will not be called. + * + * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. + * If you're developing your own custom protocol, be sure your separator can not occur naturally as + * part of the data between separators. + * For example, imagine you want to send several small documents over a socket. + * Using CRLF as a separator is likely unwise, as a CRLF could easily exist within the documents. + * In this particular example, it would be better to use a protocol similar to HTTP with + * a header that includes the length of the document. + * Also be careful that your separator cannot occur naturally as part of the encoding for a character. + * + * The given data (separator) parameter should be immutable. + * For performance reasons, the socket will retain it, not copy it. + * So if it is immutable, don't modify it while the socket is using it. +**/ +- (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout maxLength:(NSUInteger)length tag:(long)tag; + +/** + * Reads bytes until (and including) the passed "data" parameter, which acts as a separator. + * The bytes will be appended to the given byte buffer starting at the given offset. + * The given buffer will automatically be increased in size if needed. + * + * If the timeout value is negative, the read operation will not use a timeout. + * If the buffer is nil, a buffer will automatically be created for you. + * + * If maxLength is zero, no length restriction is enforced. + * Otherwise if maxLength bytes are read without completing the read, + * it is treated similarly to a timeout - the socket is closed with a MGCDAsyncSocketReadMaxedOutError. + * The read will complete successfully if exactly maxLength bytes are read and the given data is found at the end. + * + * If you pass a maxLength parameter that is less than the length of the data (separator) parameter, + * the method will do nothing (except maybe print a warning), and the delegate will not be called. + * If the bufferOffset is greater than the length of the given buffer, + * the method will do nothing (except maybe print a warning), and the delegate will not be called. + * + * If you pass a buffer, you must not alter it in any way while the socket is using it. + * After completion, the data returned in socket:didReadData:withTag: will be a subset of the given buffer. + * That is, it will reference the bytes that were appended to the given buffer via + * the method [NSData dataWithBytesNoCopy:length:freeWhenDone:NO]. + * + * To read a line from the socket, use the line separator (e.g. CRLF for HTTP, see below) as the "data" parameter. + * If you're developing your own custom protocol, be sure your separator can not occur naturally as + * part of the data between separators. + * For example, imagine you want to send several small documents over a socket. + * Using CRLF as a separator is likely unwise, as a CRLF could easily exist within the documents. + * In this particular example, it would be better to use a protocol similar to HTTP with + * a header that includes the length of the document. + * Also be careful that your separator cannot occur naturally as part of the encoding for a character. + * + * The given data (separator) parameter should be immutable. + * For performance reasons, the socket will retain it, not copy it. + * So if it is immutable, don't modify it while the socket is using it. +**/ +- (void)readDataToData:(NSData *)data + withTimeout:(NSTimeInterval)timeout + buffer:(nullable NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + maxLength:(NSUInteger)length + tag:(long)tag; + +/** + * Returns progress of the current read, from 0.0 to 1.0, or NaN if no current read (use isnan() to check). + * The parameters "tag", "done" and "total" will be filled in if they aren't NULL. +**/ +- (float)progressOfReadReturningTag:(nullable long *)tagPtr bytesDone:(nullable NSUInteger *)donePtr total:(nullable NSUInteger *)totalPtr; + +#pragma mark Writing + +/** + * Writes data to the socket, and calls the delegate when finished. + * + * If you pass in nil or zero-length data, this method does nothing and the delegate will not be called. + * If the timeout value is negative, the write operation will not use a timeout. + * + * Thread-Safety Note: + * If the given data parameter is mutable (NSMutableData) then you MUST NOT alter the data while + * the socket is writing it. In other words, it's not safe to alter the data until after the delegate method + * socket:didWriteDataWithTag: is invoked signifying that this particular write operation has completed. + * This is due to the fact that MGCDAsyncSocket does NOT copy the data. It simply retains it. + * This is for performance reasons. Often times, if NSMutableData is passed, it is because + * a request/response was built up in memory. Copying this data adds an unwanted/unneeded overhead. + * If you need to write data from an immutable buffer, and you need to alter the buffer before the socket + * completes writing the bytes (which is NOT immediately after this method returns, but rather at a later time + * when the delegate method notifies you), then you should first copy the bytes, and pass the copy to this method. +**/ +- (void)writeData:(nullable NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Returns progress of the current write, from 0.0 to 1.0, or NaN if no current write (use isnan() to check). + * The parameters "tag", "done" and "total" will be filled in if they aren't NULL. +**/ +- (float)progressOfWriteReturningTag:(nullable long *)tagPtr bytesDone:(nullable NSUInteger *)donePtr total:(nullable NSUInteger *)totalPtr; + +#pragma mark Security + +/** + * Secures the connection using SSL/TLS. + * + * This method may be called at any time, and the TLS handshake will occur after all pending reads and writes + * are finished. This allows one the option of sending a protocol dependent StartTLS message, and queuing + * the upgrade to TLS at the same time, without having to wait for the write to finish. + * Any reads or writes scheduled after this method is called will occur over the secured connection. + * + * ==== The available TOP-LEVEL KEYS are: + * + * - MGCDAsyncSocketManuallyEvaluateTrust + * The value must be of type NSNumber, encapsulating a BOOL value. + * If you set this to YES, then the underlying SecureTransport system will not evaluate the SecTrustRef of the peer. + * Instead it will pause at the moment evaulation would typically occur, + * and allow us to handle the security evaluation however we see fit. + * So MGCDAsyncSocket will invoke the delegate method socket:shouldTrustPeer: passing the SecTrustRef. + * + * Note that if you set this option, then all other configuration keys are ignored. + * Evaluation will be completely up to you during the socket:didReceiveTrust:completionHandler: delegate method. + * + * For more information on trust evaluation see: + * Apple's Technical Note TN2232 - HTTPS Server Trust Evaluation + * https://developer.apple.com/library/ios/technotes/tn2232/_index.html + * + * If unspecified, the default value is NO. + * + * - MGCDAsyncSocketUseCFStreamForTLS (iOS only) + * The value must be of type NSNumber, encapsulating a BOOL value. + * By default MGCDAsyncSocket will use the SecureTransport layer to perform encryption. + * This gives us more control over the security protocol (many more configuration options), + * plus it allows us to optimize things like sys calls and buffer allocation. + * + * However, if you absolutely must, you can instruct MGCDAsyncSocket to use the old-fashioned encryption + * technique by going through the CFStream instead. So instead of using SecureTransport, MGCDAsyncSocket + * will instead setup a CFRead/CFWriteStream. And then set the kCFStreamPropertySSLSettings property + * (via CFReadStreamSetProperty / CFWriteStreamSetProperty) and will pass the given options to this method. + * + * Thus all the other keys in the given dictionary will be ignored by MGCDAsyncSocket, + * and will passed directly CFReadStreamSetProperty / CFWriteStreamSetProperty. + * For more infomation on these keys, please see the documentation for kCFStreamPropertySSLSettings. + * + * If unspecified, the default value is NO. + * + * ==== The available CONFIGURATION KEYS are: + * + * - kCFStreamSSLPeerName + * The value must be of type NSString. + * It should match the name in the X.509 certificate given by the remote party. + * See Apple's documentation for SSLSetPeerDomainName. + * + * - kCFStreamSSLCertificates + * The value must be of type NSArray. + * See Apple's documentation for SSLSetCertificate. + * + * - kCFStreamSSLIsServer + * The value must be of type NSNumber, encapsulationg a BOOL value. + * See Apple's documentation for SSLCreateContext for iOS. + * This is optional for iOS. If not supplied, a NO value is the default. + * This is not needed for Mac OS X, and the value is ignored. + * + * - MGCDAsyncSocketSSLPeerID + * The value must be of type NSData. + * You must set this value if you want to use TLS session resumption. + * See Apple's documentation for SSLSetPeerID. + * + * - MGCDAsyncSocketSSLProtocolVersionMin + * - MGCDAsyncSocketSSLProtocolVersionMax + * The value(s) must be of type NSNumber, encapsulting a SSLProtocol value. + * See Apple's documentation for SSLSetProtocolVersionMin & SSLSetProtocolVersionMax. + * See also the SSLProtocol typedef. + * + * - MGCDAsyncSocketSSLSessionOptionFalseStart + * The value must be of type NSNumber, encapsulating a BOOL value. + * See Apple's documentation for kSSLSessionOptionFalseStart. + * + * - MGCDAsyncSocketSSLSessionOptionSendOneByteRecord + * The value must be of type NSNumber, encapsulating a BOOL value. + * See Apple's documentation for kSSLSessionOptionSendOneByteRecord. + * + * - MGCDAsyncSocketSSLCipherSuites + * The values must be of type NSArray. + * Each item within the array must be a NSNumber, encapsulating an SSLCipherSuite. + * See Apple's documentation for SSLSetEnabledCiphers. + * See also the SSLCipherSuite typedef. + * + * - MGCDAsyncSocketSSLDiffieHellmanParameters (Mac OS X only) + * The value must be of type NSData. + * See Apple's documentation for SSLSetDiffieHellmanParams. + * + * ==== The following UNAVAILABLE KEYS are: (with throw an exception) + * + * - kCFStreamSSLAllowsAnyRoot (UNAVAILABLE) + * You MUST use manual trust evaluation instead (see MGCDAsyncSocketManuallyEvaluateTrust). + * Corresponding deprecated method: SSLSetAllowsAnyRoot + * + * - kCFStreamSSLAllowsExpiredRoots (UNAVAILABLE) + * You MUST use manual trust evaluation instead (see MGCDAsyncSocketManuallyEvaluateTrust). + * Corresponding deprecated method: SSLSetAllowsExpiredRoots + * + * - kCFStreamSSLAllowsExpiredCertificates (UNAVAILABLE) + * You MUST use manual trust evaluation instead (see MGCDAsyncSocketManuallyEvaluateTrust). + * Corresponding deprecated method: SSLSetAllowsExpiredCerts + * + * - kCFStreamSSLValidatesCertificateChain (UNAVAILABLE) + * You MUST use manual trust evaluation instead (see MGCDAsyncSocketManuallyEvaluateTrust). + * Corresponding deprecated method: SSLSetEnableCertVerify + * + * - kCFStreamSSLLevel (UNAVAILABLE) + * You MUST use MGCDAsyncSocketSSLProtocolVersionMin & MGCDAsyncSocketSSLProtocolVersionMin instead. + * Corresponding deprecated method: SSLSetProtocolVersionEnabled + * + * + * Please refer to Apple's documentation for corresponding SSLFunctions. + * + * If you pass in nil or an empty dictionary, the default settings will be used. + * + * IMPORTANT SECURITY NOTE: + * The default settings will check to make sure the remote party's certificate is signed by a + * trusted 3rd party certificate agency (e.g. verisign) and that the certificate is not expired. + * However it will not verify the name on the certificate unless you + * give it a name to verify against via the kCFStreamSSLPeerName key. + * The security implications of this are important to understand. + * Imagine you are attempting to create a secure connection to MySecureServer.com, + * but your socket gets directed to MaliciousServer.com because of a hacked DNS server. + * If you simply use the default settings, and MaliciousServer.com has a valid certificate, + * the default settings will not detect any problems since the certificate is valid. + * To properly secure your connection in this particular scenario you + * should set the kCFStreamSSLPeerName property to "MySecureServer.com". + * + * You can also perform additional validation in socketDidSecure. +**/ +- (void)startTLS:(nullable NSDictionary *)tlsSettings; + +#pragma mark Advanced + +/** + * Traditionally sockets are not closed until the conversation is over. + * However, it is technically possible for the remote enpoint to close its write stream. + * Our socket would then be notified that there is no more data to be read, + * but our socket would still be writeable and the remote endpoint could continue to receive our data. + * + * The argument for this confusing functionality stems from the idea that a client could shut down its + * write stream after sending a request to the server, thus notifying the server there are to be no further requests. + * In practice, however, this technique did little to help server developers. + * + * To make matters worse, from a TCP perspective there is no way to tell the difference from a read stream close + * and a full socket close. They both result in the TCP stack receiving a FIN packet. The only way to tell + * is by continuing to write to the socket. If it was only a read stream close, then writes will continue to work. + * Otherwise an error will be occur shortly (when the remote end sends us a RST packet). + * + * In addition to the technical challenges and confusion, many high level socket/stream API's provide + * no support for dealing with the problem. If the read stream is closed, the API immediately declares the + * socket to be closed, and shuts down the write stream as well. In fact, this is what Apple's CFStream API does. + * It might sound like poor design at first, but in fact it simplifies development. + * + * The vast majority of the time if the read stream is closed it's because the remote endpoint closed its socket. + * Thus it actually makes sense to close the socket at this point. + * And in fact this is what most networking developers want and expect to happen. + * However, if you are writing a server that interacts with a plethora of clients, + * you might encounter a client that uses the discouraged technique of shutting down its write stream. + * If this is the case, you can set this property to NO, + * and make use of the socketDidCloseReadStream delegate method. + * + * The default value is YES. +**/ +@property (atomic, assign, readwrite) BOOL autoDisconnectOnClosedReadStream; + +/** + * MGCDAsyncSocket maintains thread safety by using an internal serial dispatch_queue. + * In most cases, the instance creates this queue itself. + * However, to allow for maximum flexibility, the internal queue may be passed in the init method. + * This allows for some advanced options such as controlling socket priority via target queues. + * However, when one begins to use target queues like this, they open the door to some specific deadlock issues. + * + * For example, imagine there are 2 queues: + * dispatch_queue_t socketQueue; + * dispatch_queue_t socketTargetQueue; + * + * If you do this (pseudo-code): + * socketQueue.targetQueue = socketTargetQueue; + * + * Then all socketQueue operations will actually get run on the given socketTargetQueue. + * This is fine and works great in most situations. + * But if you run code directly from within the socketTargetQueue that accesses the socket, + * you could potentially get deadlock. Imagine the following code: + * + * - (BOOL)socketHasSomething + * { + * __block BOOL result = NO; + * dispatch_block_t block = ^{ + * result = [self someInternalMethodToBeRunOnlyOnSocketQueue]; + * } + * if (is_executing_on_queue(socketQueue)) + * block(); + * else + * dispatch_sync(socketQueue, block); + * + * return result; + * } + * + * What happens if you call this method from the socketTargetQueue? The result is deadlock. + * This is because the MGCD API offers no mechanism to discover a queue's targetQueue. + * Thus we have no idea if our socketQueue is configured with a targetQueue. + * If we had this information, we could easily avoid deadlock. + * But, since these API's are missing or unfeasible, you'll have to explicitly set it. + * + * IF you pass a socketQueue via the init method, + * AND you've configured the passed socketQueue with a targetQueue, + * THEN you should pass the end queue in the target hierarchy. + * + * For example, consider the following queue hierarchy: + * socketQueue -> ipQueue -> moduleQueue + * + * This example demonstrates priority shaping within some server. + * All incoming client connections from the same IP address are executed on the same target queue. + * And all connections for a particular module are executed on the same target queue. + * Thus, the priority of all networking for the entire module can be changed on the fly. + * Additionally, networking traffic from a single IP cannot monopolize the module. + * + * Here's how you would accomplish something like that: + * - (dispatch_queue_t)newSocketQueueForConnectionFromAddress:(NSData *)address onSocket:(MGCDAsyncSocket *)sock + * { + * dispatch_queue_t socketQueue = dispatch_queue_create("", NULL); + * dispatch_queue_t ipQueue = [self ipQueueForAddress:address]; + * + * dispatch_set_target_queue(socketQueue, ipQueue); + * dispatch_set_target_queue(iqQueue, moduleQueue); + * + * return socketQueue; + * } + * - (void)socket:(MGCDAsyncSocket *)sock didAcceptNewSocket:(MGCDAsyncSocket *)newSocket + * { + * [clientConnections addObject:newSocket]; + * [newSocket markSocketQueueTargetQueue:moduleQueue]; + * } + * + * Note: This workaround is ONLY needed if you intend to execute code directly on the ipQueue or moduleQueue. + * This is often NOT the case, as such queues are used solely for execution shaping. +**/ +- (void)markSocketQueueTargetQueue:(dispatch_queue_t)socketQueuesPreConfiguredTargetQueue; +- (void)unmarkSocketQueueTargetQueue:(dispatch_queue_t)socketQueuesPreviouslyConfiguredTargetQueue; + +/** + * It's not thread-safe to access certain variables from outside the socket's internal queue. + * + * For example, the socket file descriptor. + * File descriptors are simply integers which reference an index in the per-process file table. + * However, when one requests a new file descriptor (by opening a file or socket), + * the file descriptor returned is guaranteed to be the lowest numbered unused descriptor. + * So if we're not careful, the following could be possible: + * + * - Thread A invokes a method which returns the socket's file descriptor. + * - The socket is closed via the socket's internal queue on thread B. + * - Thread C opens a file, and subsequently receives the file descriptor that was previously the socket's FD. + * - Thread A is now accessing/altering the file instead of the socket. + * + * In addition to this, other variables are not actually objects, + * and thus cannot be retained/released or even autoreleased. + * An example is the sslContext, of type SSLContextRef, which is actually a malloc'd struct. + * + * Although there are internal variables that make it difficult to maintain thread-safety, + * it is important to provide access to these variables + * to ensure this class can be used in a wide array of environments. + * This method helps to accomplish this by invoking the current block on the socket's internal queue. + * The methods below can be invoked from within the block to access + * those generally thread-unsafe internal variables in a thread-safe manner. + * The given block will be invoked synchronously on the socket's internal queue. + * + * If you save references to any protected variables and use them outside the block, you do so at your own peril. +**/ +- (void)performBlock:(dispatch_block_t)block; + +/** + * These methods are only available from within the context of a performBlock: invocation. + * See the documentation for the performBlock: method above. + * + * Provides access to the socket's file descriptor(s). + * If the socket is a server socket (is accepting incoming connections), + * it might actually have multiple internal socket file descriptors - one for IPv4 and one for IPv6. +**/ +- (int)socketFD; +- (int)socket4FD; +- (int)socket6FD; + +#if TARGET_OS_IPHONE + +/** + * These methods are only available from within the context of a performBlock: invocation. + * See the documentation for the performBlock: method above. + * + * Provides access to the socket's internal CFReadStream/CFWriteStream. + * + * These streams are only used as workarounds for specific iOS shortcomings: + * + * - Apple has decided to keep the SecureTransport framework private is iOS. + * This means the only supplied way to do SSL/TLS is via CFStream or some other API layered on top of it. + * Thus, in order to provide SSL/TLS support on iOS we are forced to rely on CFStream, + * instead of the preferred and faster and more powerful SecureTransport. + * + * - If a socket doesn't have backgrounding enabled, and that socket is closed while the app is backgrounded, + * Apple only bothers to notify us via the CFStream API. + * The faster and more powerful MGCD API isn't notified properly in this case. + * + * See also: (BOOL)enableBackgroundingOnSocket +**/ +- (nullable CFReadStreamRef)readStream; +- (nullable CFWriteStreamRef)writeStream; + +/** + * This method is only available from within the context of a performBlock: invocation. + * See the documentation for the performBlock: method above. + * + * Configures the socket to allow it to operate when the iOS application has been backgrounded. + * In other words, this method creates a read & write stream, and invokes: + * + * CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); + * CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); + * + * Returns YES if successful, NO otherwise. + * + * Note: Apple does not officially support backgrounding server sockets. + * That is, if your socket is accepting incoming connections, Apple does not officially support + * allowing iOS applications to accept incoming connections while an app is backgrounded. + * + * Example usage: + * + * - (void)socket:(MGCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port + * { + * [asyncSocket performBlock:^{ + * [asyncSocket enableBackgroundingOnSocket]; + * }]; + * } +**/ +- (BOOL)enableBackgroundingOnSocket; + +#endif + +/** + * This method is only available from within the context of a performBlock: invocation. + * See the documentation for the performBlock: method above. + * + * Provides access to the socket's SSLContext, if SSL/TLS has been started on the socket. +**/ +- (nullable SSLContextRef)sslContext; + +#pragma mark Utilities + +/** + * The address lookup utility used by the class. + * This method is synchronous, so it's recommended you use it on a background thread/queue. + * + * The special strings "localhost" and "loopback" return the loopback address for IPv4 and IPv6. + * + * @returns + * A mutable array with all IPv4 and IPv6 addresses returned by getaddrinfo. + * The addresses are specifically for TCP connections. + * You can filter the addresses, if needed, using the other utility methods provided by the class. +**/ ++ (nullable NSMutableArray *)lookupHost:(NSString *)host port:(uint16_t)port error:(NSError **)errPtr; + +/** + * Extracting host and port information from raw address data. +**/ + ++ (nullable NSString *)hostFromAddress:(NSData *)address; ++ (uint16_t)portFromAddress:(NSData *)address; + ++ (BOOL)isIPv4Address:(NSData *)address; ++ (BOOL)isIPv6Address:(NSData *)address; + ++ (BOOL)getHost:( NSString * __nullable * __nullable)hostPtr port:(nullable uint16_t *)portPtr fromAddress:(NSData *)address; + ++ (BOOL)getHost:(NSString * __nullable * __nullable)hostPtr port:(nullable uint16_t *)portPtr family:(nullable sa_family_t *)afPtr fromAddress:(NSData *)address; + +/** + * A few common line separators, for use with the readDataToData:... methods. +**/ ++ (NSData *)CRLFData; // 0x0D0A ++ (NSData *)CRData; // 0x0D ++ (NSData *)LFData; // 0x0A ++ (NSData *)ZeroData; // 0x00 + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +@protocol MGCDAsyncSocketDelegate +@optional + +/** + * This method is called immediately prior to socket:didAcceptNewSocket:. + * It optionally allows a listening socket to specify the socketQueue for a new accepted socket. + * If this method is not implemented, or returns NULL, the new accepted socket will create its own default queue. + * + * Since you cannot autorelease a dispatch_queue, + * this method uses the "new" prefix in its name to specify that the returned queue has been retained. + * + * Thus you could do something like this in the implementation: + * return dispatch_queue_create("MyQueue", NULL); + * + * If you are placing multiple sockets on the same queue, + * then care should be taken to increment the retain count each time this method is invoked. + * + * For example, your implementation might look something like this: + * dispatch_retain(myExistingQueue); + * return myExistingQueue; +**/ +- (nullable dispatch_queue_t)newSocketQueueForConnectionFromAddress:(NSData *)address onSocket:(MGCDAsyncSocket *)sock; + +/** + * Called when a socket accepts a connection. + * Another socket is automatically spawned to handle it. + * + * You must retain the newSocket if you wish to handle the connection. + * Otherwise the newSocket instance will be released and the spawned connection will be closed. + * + * By default the new socket will have the same delegate and delegateQueue. + * You may, of course, change this at any time. +**/ +- (void)socket:(MGCDAsyncSocket *)sock didAcceptNewSocket:(MGCDAsyncSocket *)newSocket; + +/** + * Called when a socket connects and is ready for reading and writing. + * The host parameter will be an IP address, not a DNS name. +**/ +- (void)socket:(MGCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port; + +/** + * Called when a socket connects and is ready for reading and writing. + * The host parameter will be an IP address, not a DNS name. + **/ +- (void)socket:(MGCDAsyncSocket *)sock didConnectToUrl:(NSURL *)url; + +/** + * Called when a socket has completed reading the requested data into memory. + * Not called if there is an error. +**/ +- (void)socket:(MGCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag; + +/** + * Called when a socket has read in data, but has not yet completed the read. + * This would occur if using readToData: or readToLength: methods. + * It may be used for things such as updating progress bars. +**/ +- (void)socket:(MGCDAsyncSocket *)sock didReadPartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; + +/** + * Called when a socket has completed writing the requested data. Not called if there is an error. +**/ +- (void)socket:(MGCDAsyncSocket *)sock didWriteDataWithTag:(long)tag; + +/** + * Called when a socket has written some data, but has not yet completed the entire write. + * It may be used for things such as updating progress bars. +**/ +- (void)socket:(MGCDAsyncSocket *)sock didWritePartialDataOfLength:(NSUInteger)partialLength tag:(long)tag; + +/** + * Called if a read operation has reached its timeout without completing. + * This method allows you to optionally extend the timeout. + * If you return a positive time interval (> 0) the read's timeout will be extended by the given amount. + * If you don't implement this method, or return a non-positive time interval (<= 0) the read will timeout as usual. + * + * The elapsed parameter is the sum of the original timeout, plus any additions previously added via this method. + * The length parameter is the number of bytes that have been read so far for the read operation. + * + * Note that this method may be called multiple times for a single read if you return positive numbers. +**/ +- (NSTimeInterval)socket:(MGCDAsyncSocket *)sock shouldTimeoutReadWithTag:(long)tag + elapsed:(NSTimeInterval)elapsed + bytesDone:(NSUInteger)length; + +/** + * Called if a write operation has reached its timeout without completing. + * This method allows you to optionally extend the timeout. + * If you return a positive time interval (> 0) the write's timeout will be extended by the given amount. + * If you don't implement this method, or return a non-positive time interval (<= 0) the write will timeout as usual. + * + * The elapsed parameter is the sum of the original timeout, plus any additions previously added via this method. + * The length parameter is the number of bytes that have been written so far for the write operation. + * + * Note that this method may be called multiple times for a single write if you return positive numbers. +**/ +- (NSTimeInterval)socket:(MGCDAsyncSocket *)sock shouldTimeoutWriteWithTag:(long)tag + elapsed:(NSTimeInterval)elapsed + bytesDone:(NSUInteger)length; + +/** + * Conditionally called if the read stream closes, but the write stream may still be writeable. + * + * This delegate method is only called if autoDisconnectOnClosedReadStream has been set to NO. + * See the discussion on the autoDisconnectOnClosedReadStream method for more information. +**/ +- (void)socketDidCloseReadStream:(MGCDAsyncSocket *)sock; + +/** + * Called when a socket disconnects with or without error. + * + * If you call the disconnect method, and the socket wasn't already disconnected, + * then an invocation of this delegate method will be enqueued on the delegateQueue + * before the disconnect method returns. + * + * Note: If the MGCDAsyncSocket instance is deallocated while it is still connected, + * and the delegate is not also deallocated, then this method will be invoked, + * but the sock parameter will be nil. (It must necessarily be nil since it is no longer available.) + * This is a generally rare, but is possible if one writes code like this: + * + * asyncSocket = nil; // I'm implicitly disconnecting the socket + * + * In this case it may preferrable to nil the delegate beforehand, like this: + * + * asyncSocket.delegate = nil; // Don't invoke my delegate method + * asyncSocket = nil; // I'm implicitly disconnecting the socket + * + * Of course, this depends on how your state machine is configured. +**/ +- (void)socketDidDisconnect:(MGCDAsyncSocket *)sock withError:(nullable NSError *)err; + +/** + * Called after the socket has successfully completed SSL/TLS negotiation. + * This method is not called unless you use the provided startTLS method. + * + * If a SSL/TLS negotiation fails (invalid certificate, etc) then the socket will immediately close, + * and the socketDidDisconnect:withError: delegate method will be called with the specific SSL error code. +**/ +- (void)socketDidSecure:(MGCDAsyncSocket *)sock; + +/** + * Allows a socket delegate to hook into the TLS handshake and manually validate the peer it's connecting to. + * + * This is only called if startTLS is invoked with options that include: + * - MGCDAsyncSocketManuallyEvaluateTrust == YES + * + * Typically the delegate will use SecTrustEvaluate (and related functions) to properly validate the peer. + * + * Note from Apple's documentation: + * Because [SecTrustEvaluate] might look on the network for certificates in the certificate chain, + * [it] might block while attempting network access. You should never call it from your main thread; + * call it only from within a function running on a dispatch queue or on a separate thread. + * + * Thus this method uses a completionHandler block rather than a normal return value. + * The completionHandler block is thread-safe, and may be invoked from a background queue/thread. + * It is safe to invoke the completionHandler block even if the socket has been closed. +**/ +- (void)socket:(MGCDAsyncSocket *)sock didReceiveTrust:(SecTrustRef)trust + completionHandler:(void (^)(BOOL shouldTrustPeer))completionHandler; + +@end +NS_ASSUME_NONNULL_END diff --git a/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncSocket.m b/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncSocket.m new file mode 100755 index 0000000..79706ff --- /dev/null +++ b/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncSocket.m @@ -0,0 +1,8529 @@ +// +// MGCDAsyncSocket.m +// +// This class is in the public domain. +// Originally created by Robbie Hanson in Q4 2010. +// Updated and maintained by Deusty LLC and the Apple development community. +// +// https://github.com/robbiehanson/CocoaAsyncSocket +// + +#import "MGCDAsyncSocket.h" + +#if TARGET_OS_IPHONE +#import +#endif + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +#if ! __has_feature(objc_arc) +#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC). +// For more information see: https://github.com/robbiehanson/CocoaAsyncSocket/wiki/ARC +#endif + + +#ifndef MGCDAsyncSocketLoggingEnabled +#define MGCDAsyncSocketLoggingEnabled 0 +#endif + +#if MGCDAsyncSocketLoggingEnabled + +// Logging Enabled - See log level below + +// Logging uses the CocoaLumberjack framework (which is also MGCD based). +// https://github.com/robbiehanson/CocoaLumberjack +// +// It allows us to do a lot of logging without significantly slowing down the code. +#import "DDLog.h" + +#define LogAsync YES +#define LogContext MGCDAsyncSocketLoggingContext + +#define LogObjc(flg, frmt, ...) LOG_OBJC_MAYBE(LogAsync, logLevel, flg, LogContext, frmt, ##__VA_ARGS__) +#define LogC(flg, frmt, ...) LOG_C_MAYBE(LogAsync, logLevel, flg, LogContext, frmt, ##__VA_ARGS__) + +#define LogError(frmt, ...) LogObjc(LOG_FLAG_ERROR, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogWarn(frmt, ...) LogObjc(LOG_FLAG_WARN, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogInfo(frmt, ...) LogObjc(LOG_FLAG_INFO, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogVerbose(frmt, ...) LogObjc(LOG_FLAG_VERBOSE, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) + +#define LogCError(frmt, ...) LogC(LOG_FLAG_ERROR, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogCWarn(frmt, ...) LogC(LOG_FLAG_WARN, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogCInfo(frmt, ...) LogC(LOG_FLAG_INFO, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogCVerbose(frmt, ...) LogC(LOG_FLAG_VERBOSE, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) + +#define LogTrace() LogObjc(LOG_FLAG_VERBOSE, @"%@: %@", THIS_FILE, THIS_METHOD) +#define LogCTrace() LogC(LOG_FLAG_VERBOSE, @"%@: %s", THIS_FILE, __FUNCTION__) + +#ifndef MGCDAsyncSocketLogLevel +#define MGCDAsyncSocketLogLevel LOG_LEVEL_VERBOSE +#endif + +// Log levels : off, error, warn, info, verbose +static const int logLevel = MGCDAsyncSocketLogLevel; + +#else + +// Logging Disabled + +#define LogError(frmt, ...) {} +#define LogWarn(frmt, ...) {} +#define LogInfo(frmt, ...) {} +#define LogVerbose(frmt, ...) {} + +#define LogCError(frmt, ...) {} +#define LogCWarn(frmt, ...) {} +#define LogCInfo(frmt, ...) {} +#define LogCVerbose(frmt, ...) {} + +#define LogTrace() {} +#define LogCTrace(frmt, ...) {} + +#endif + +/** + * Seeing a return statements within an inner block + * can sometimes be mistaken for a return point of the enclosing method. + * This makes inline blocks a bit easier to read. +**/ +#define return_from_block return + +/** + * A socket file descriptor is really just an integer. + * It represents the index of the socket within the kernel. + * This makes invalid file descriptor comparisons easier to read. +**/ +#define SOCKET_NULL -1 + + +NSString *const MGCDAsyncSocketException = @"MGCDAsyncSocketException"; +NSString *const MGCDAsyncSocketErrorDomain = @"MGCDAsyncSocketErrorDomain"; + +NSString *const MGCDAsyncSocketQueueName = @"MGCDAsyncSocket"; +NSString *const MGCDAsyncSocketThreadName = @"MGCDAsyncSocket-CFStream"; + +NSString *const MGCDAsyncSocketManuallyEvaluateTrust = @"MGCDAsyncSocketManuallyEvaluateTrust"; +#if TARGET_OS_IPHONE +NSString *const MGCDAsyncSocketUseCFStreamForTLS = @"MGCDAsyncSocketUseCFStreamForTLS"; +#endif +NSString *const MGCDAsyncSocketSSLPeerID = @"MGCDAsyncSocketSSLPeerID"; +NSString *const MGCDAsyncSocketSSLProtocolVersionMin = @"MGCDAsyncSocketSSLProtocolVersionMin"; +NSString *const MGCDAsyncSocketSSLProtocolVersionMax = @"MGCDAsyncSocketSSLProtocolVersionMax"; +NSString *const MGCDAsyncSocketSSLSessionOptionFalseStart = @"MGCDAsyncSocketSSLSessionOptionFalseStart"; +NSString *const MGCDAsyncSocketSSLSessionOptionSendOneByteRecord = @"MGCDAsyncSocketSSLSessionOptionSendOneByteRecord"; +NSString *const MGCDAsyncSocketSSLCipherSuites = @"MGCDAsyncSocketSSLCipherSuites"; +NSString *const MGCDAsyncSocketSSLALPN = @"MGCDAsyncSocketSSLALPN"; +#if !TARGET_OS_IPHONE +NSString *const MGCDAsyncSocketSSLDiffieHellmanParameters = @"MGCDAsyncSocketSSLDiffieHellmanParameters"; +#endif + +enum MGCDAsyncSocketFlags +{ + kSocketStarted = 1 << 0, // If set, socket has been started (accepting/connecting) + kConnected = 1 << 1, // If set, the socket is connected + kForbidReadsWrites = 1 << 2, // If set, no new reads or writes are allowed + kReadsPaused = 1 << 3, // If set, reads are paused due to possible timeout + kWritesPaused = 1 << 4, // If set, writes are paused due to possible timeout + kDisconnectAfterReads = 1 << 5, // If set, disconnect after no more reads are queued + kDisconnectAfterWrites = 1 << 6, // If set, disconnect after no more writes are queued + kSocketCanAcceptBytes = 1 << 7, // If set, we know socket can accept bytes. If unset, it's unknown. + kReadSourceSuspended = 1 << 8, // If set, the read source is suspended + kWriteSourceSuspended = 1 << 9, // If set, the write source is suspended + kQueuedTLS = 1 << 10, // If set, we've queued an upgrade to TLS + kStartingReadTLS = 1 << 11, // If set, we're waiting for TLS negotiation to complete + kStartingWriteTLS = 1 << 12, // If set, we're waiting for TLS negotiation to complete + kSocketSecure = 1 << 13, // If set, socket is using secure communication via SSL/TLS + kSocketHasReadEOF = 1 << 14, // If set, we have read EOF from socket + kReadStreamClosed = 1 << 15, // If set, we've read EOF plus prebuffer has been drained + kDealloc = 1 << 16, // If set, the socket is being deallocated +#if TARGET_OS_IPHONE + kAddedStreamsToRunLoop = 1 << 17, // If set, CFStreams have been added to listener thread + kUsingCFStreamForTLS = 1 << 18, // If set, we're forced to use CFStream instead of SecureTransport + kSecureSocketHasBytesAvailable = 1 << 19, // If set, CFReadStream has notified us of bytes available +#endif +}; + +enum MGCDAsyncSocketConfig +{ + kIPv4Disabled = 1 << 0, // If set, IPv4 is disabled + kIPv6Disabled = 1 << 1, // If set, IPv6 is disabled + kPreferIPv6 = 1 << 2, // If set, IPv6 is preferred over IPv4 + kAllowHalfDuplexConnection = 1 << 3, // If set, the socket will stay open even if the read stream closes +}; + +#if TARGET_OS_IPHONE + static NSThread *cfstreamThread; // Used for CFStreams + + + static uint64_t cfstreamThreadRetainCount; // setup & teardown + static dispatch_queue_t cfstreamThreadSetupQueue; // setup & teardown +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * A PreBuffer is used when there is more data available on the socket + * than is being requested by current read request. + * In this case we slurp up all data from the socket (to minimize sys calls), + * and store additional yet unread data in a "prebuffer". + * + * The prebuffer is entirely drained before we read from the socket again. + * In other words, a large chunk of data is written is written to the prebuffer. + * The prebuffer is then drained via a series of one or more reads (for subsequent read request(s)). + * + * A ring buffer was once used for this purpose. + * But a ring buffer takes up twice as much memory as needed (double the size for mirroring). + * In fact, it generally takes up more than twice the needed size as everything has to be rounded up to vm_page_size. + * And since the prebuffer is always completely drained after being written to, a full ring buffer isn't needed. + * + * The current design is very simple and straight-forward, while also keeping memory requirements lower. +**/ + +@interface MGCDAsyncSocketPreBuffer : NSObject +{ + uint8_t *preBuffer; + size_t preBufferSize; + + uint8_t *readPointer; + uint8_t *writePointer; +} + +- (instancetype)initWithCapacity:(size_t)numBytes NS_DESIGNATED_INITIALIZER; + +- (void)ensureCapacityForWrite:(size_t)numBytes; + +- (size_t)availableBytes; +- (uint8_t *)readBuffer; + +- (void)getReadBuffer:(uint8_t **)bufferPtr availableBytes:(size_t *)availableBytesPtr; + +- (size_t)availableSpace; +- (uint8_t *)writeBuffer; + +- (void)getWriteBuffer:(uint8_t **)bufferPtr availableSpace:(size_t *)availableSpacePtr; + +- (void)didRead:(size_t)bytesRead; +- (void)didWrite:(size_t)bytesWritten; + +- (void)reset; + +@end + +@implementation MGCDAsyncSocketPreBuffer + +// Cover the superclass' designated initializer +- (instancetype)init NS_UNAVAILABLE +{ + NSAssert(0, @"Use the designated initializer"); + return nil; +} + +- (instancetype)initWithCapacity:(size_t)numBytes +{ + if ((self = [super init])) + { + preBufferSize = numBytes; + preBuffer = malloc(preBufferSize); + + readPointer = preBuffer; + writePointer = preBuffer; + } + return self; +} + +- (void)dealloc +{ + if (preBuffer) + free(preBuffer); +} + +- (void)ensureCapacityForWrite:(size_t)numBytes +{ + size_t availableSpace = [self availableSpace]; + + if (numBytes > availableSpace) + { + size_t additionalBytes = numBytes - availableSpace; + + size_t newPreBufferSize = preBufferSize + additionalBytes; + uint8_t *newPreBuffer = realloc(preBuffer, newPreBufferSize); + + size_t readPointerOffset = readPointer - preBuffer; + size_t writePointerOffset = writePointer - preBuffer; + + preBuffer = newPreBuffer; + preBufferSize = newPreBufferSize; + + readPointer = preBuffer + readPointerOffset; + writePointer = preBuffer + writePointerOffset; + } +} + +- (size_t)availableBytes +{ + return writePointer - readPointer; +} + +- (uint8_t *)readBuffer +{ + return readPointer; +} + +- (void)getReadBuffer:(uint8_t **)bufferPtr availableBytes:(size_t *)availableBytesPtr +{ + if (bufferPtr) *bufferPtr = readPointer; + if (availableBytesPtr) *availableBytesPtr = [self availableBytes]; +} + +- (void)didRead:(size_t)bytesRead +{ + readPointer += bytesRead; + + if (readPointer == writePointer) + { + // The prebuffer has been drained. Reset pointers. + readPointer = preBuffer; + writePointer = preBuffer; + } +} + +- (size_t)availableSpace +{ + return preBufferSize - (writePointer - preBuffer); +} + +- (uint8_t *)writeBuffer +{ + return writePointer; +} + +- (void)getWriteBuffer:(uint8_t **)bufferPtr availableSpace:(size_t *)availableSpacePtr +{ + if (bufferPtr) *bufferPtr = writePointer; + if (availableSpacePtr) *availableSpacePtr = [self availableSpace]; +} + +- (void)didWrite:(size_t)bytesWritten +{ + writePointer += bytesWritten; +} + +- (void)reset +{ + readPointer = preBuffer; + writePointer = preBuffer; +} + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The MGCDAsyncReadPacket encompasses the instructions for any given read. + * The content of a read packet allows the code to determine if we're: + * - reading to a certain length + * - reading to a certain separator + * - or simply reading the first chunk of available data +**/ +@interface MGCDAsyncReadPacket : NSObject +{ + @public + NSMutableData *buffer; + NSUInteger startOffset; + NSUInteger bytesDone; + NSUInteger maxLength; + NSTimeInterval timeout; + NSUInteger readLength; + NSData *term; + BOOL bufferOwner; + NSUInteger originalBufferLength; + long tag; +} +- (instancetype)initWithData:(NSMutableData *)d + startOffset:(NSUInteger)s + maxLength:(NSUInteger)m + timeout:(NSTimeInterval)t + readLength:(NSUInteger)l + terminator:(NSData *)e + tag:(long)i NS_DESIGNATED_INITIALIZER; + +- (void)ensureCapacityForAdditionalDataOfLength:(NSUInteger)bytesToRead; + +- (NSUInteger)optimalReadLengthWithDefault:(NSUInteger)defaultValue shouldPreBuffer:(BOOL *)shouldPreBufferPtr; + +- (NSUInteger)readLengthForNonTermWithHint:(NSUInteger)bytesAvailable; +- (NSUInteger)readLengthForTermWithHint:(NSUInteger)bytesAvailable shouldPreBuffer:(BOOL *)shouldPreBufferPtr; +- (NSUInteger)readLengthForTermWithPreBuffer:(MGCDAsyncSocketPreBuffer *)preBuffer found:(BOOL *)foundPtr; + +- (NSInteger)searchForTermAfterPreBuffering:(ssize_t)numBytes; + +@end + +@implementation MGCDAsyncReadPacket + +// Cover the superclass' designated initializer +- (instancetype)init NS_UNAVAILABLE +{ + NSAssert(0, @"Use the designated initializer"); + return nil; +} + +- (instancetype)initWithData:(NSMutableData *)d + startOffset:(NSUInteger)s + maxLength:(NSUInteger)m + timeout:(NSTimeInterval)t + readLength:(NSUInteger)l + terminator:(NSData *)e + tag:(long)i +{ + if((self = [super init])) + { + bytesDone = 0; + maxLength = m; + timeout = t; + readLength = l; + term = [e copy]; + tag = i; + + if (d) + { + buffer = d; + startOffset = s; + bufferOwner = NO; + originalBufferLength = [d length]; + } + else + { + if (readLength > 0) + buffer = [[NSMutableData alloc] initWithLength:readLength]; + else + buffer = [[NSMutableData alloc] initWithLength:0]; + + startOffset = 0; + bufferOwner = YES; + originalBufferLength = 0; + } + } + return self; +} + +/** + * Increases the length of the buffer (if needed) to ensure a read of the given size will fit. +**/ +- (void)ensureCapacityForAdditionalDataOfLength:(NSUInteger)bytesToRead +{ + NSUInteger buffSize = [buffer length]; + NSUInteger buffUsed = startOffset + bytesDone; + + NSUInteger buffSpace = buffSize - buffUsed; + + if (bytesToRead > buffSpace) + { + NSUInteger buffInc = bytesToRead - buffSpace; + + [buffer increaseLengthBy:buffInc]; + } +} + +/** + * This method is used when we do NOT know how much data is available to be read from the socket. + * This method returns the default value unless it exceeds the specified readLength or maxLength. + * + * Furthermore, the shouldPreBuffer decision is based upon the packet type, + * and whether the returned value would fit in the current buffer without requiring a resize of the buffer. +**/ +- (NSUInteger)optimalReadLengthWithDefault:(NSUInteger)defaultValue shouldPreBuffer:(BOOL *)shouldPreBufferPtr +{ + NSUInteger result; + + if (readLength > 0) + { + // Read a specific length of data + result = readLength - bytesDone; + + // There is no need to prebuffer since we know exactly how much data we need to read. + // Even if the buffer isn't currently big enough to fit this amount of data, + // it would have to be resized eventually anyway. + + if (shouldPreBufferPtr) + *shouldPreBufferPtr = NO; + } + else + { + // Either reading until we find a specified terminator, + // or we're simply reading all available data. + // + // In other words, one of: + // + // - readDataToData packet + // - readDataWithTimeout packet + + if (maxLength > 0) + result = MIN(defaultValue, (maxLength - bytesDone)); + else + result = defaultValue; + + // Since we don't know the size of the read in advance, + // the shouldPreBuffer decision is based upon whether the returned value would fit + // in the current buffer without requiring a resize of the buffer. + // + // This is because, in all likelyhood, the amount read from the socket will be less than the default value. + // Thus we should avoid over-allocating the read buffer when we can simply use the pre-buffer instead. + + if (shouldPreBufferPtr) + { + NSUInteger buffSize = [buffer length]; + NSUInteger buffUsed = startOffset + bytesDone; + + NSUInteger buffSpace = buffSize - buffUsed; + + if (buffSpace >= result) + *shouldPreBufferPtr = NO; + else + *shouldPreBufferPtr = YES; + } + } + + return result; +} + +/** + * For read packets without a set terminator, returns the amount of data + * that can be read without exceeding the readLength or maxLength. + * + * The given parameter indicates the number of bytes estimated to be available on the socket, + * which is taken into consideration during the calculation. + * + * The given hint MUST be greater than zero. +**/ +- (NSUInteger)readLengthForNonTermWithHint:(NSUInteger)bytesAvailable +{ + NSAssert(term == nil, @"This method does not apply to term reads"); + NSAssert(bytesAvailable > 0, @"Invalid parameter: bytesAvailable"); + + if (readLength > 0) + { + // Read a specific length of data + + return MIN(bytesAvailable, (readLength - bytesDone)); + + // No need to avoid resizing the buffer. + // If the user provided their own buffer, + // and told us to read a certain length of data that exceeds the size of the buffer, + // then it is clear that our code will resize the buffer during the read operation. + // + // This method does not actually do any resizing. + // The resizing will happen elsewhere if needed. + } + else + { + // Read all available data + + NSUInteger result = bytesAvailable; + + if (maxLength > 0) + { + result = MIN(result, (maxLength - bytesDone)); + } + + // No need to avoid resizing the buffer. + // If the user provided their own buffer, + // and told us to read all available data without giving us a maxLength, + // then it is clear that our code might resize the buffer during the read operation. + // + // This method does not actually do any resizing. + // The resizing will happen elsewhere if needed. + + return result; + } +} + +/** + * For read packets with a set terminator, returns the amount of data + * that can be read without exceeding the maxLength. + * + * The given parameter indicates the number of bytes estimated to be available on the socket, + * which is taken into consideration during the calculation. + * + * To optimize memory allocations, mem copies, and mem moves + * the shouldPreBuffer boolean value will indicate if the data should be read into a prebuffer first, + * or if the data can be read directly into the read packet's buffer. +**/ +- (NSUInteger)readLengthForTermWithHint:(NSUInteger)bytesAvailable shouldPreBuffer:(BOOL *)shouldPreBufferPtr +{ + NSAssert(term != nil, @"This method does not apply to non-term reads"); + NSAssert(bytesAvailable > 0, @"Invalid parameter: bytesAvailable"); + + + NSUInteger result = bytesAvailable; + + if (maxLength > 0) + { + result = MIN(result, (maxLength - bytesDone)); + } + + // Should the data be read into the read packet's buffer, or into a pre-buffer first? + // + // One would imagine the preferred option is the faster one. + // So which one is faster? + // + // Reading directly into the packet's buffer requires: + // 1. Possibly resizing packet buffer (malloc/realloc) + // 2. Filling buffer (read) + // 3. Searching for term (memcmp) + // 4. Possibly copying overflow into prebuffer (malloc/realloc, memcpy) + // + // Reading into prebuffer first: + // 1. Possibly resizing prebuffer (malloc/realloc) + // 2. Filling buffer (read) + // 3. Searching for term (memcmp) + // 4. Copying underflow into packet buffer (malloc/realloc, memcpy) + // 5. Removing underflow from prebuffer (memmove) + // + // Comparing the performance of the two we can see that reading + // data into the prebuffer first is slower due to the extra memove. + // + // However: + // The implementation of NSMutableData is open source via core foundation's CFMutableData. + // Decreasing the length of a mutable data object doesn't cause a realloc. + // In other words, the capacity of a mutable data object can grow, but doesn't shrink. + // + // This means the prebuffer will rarely need a realloc. + // The packet buffer, on the other hand, may often need a realloc. + // This is especially true if we are the buffer owner. + // Furthermore, if we are constantly realloc'ing the packet buffer, + // and then moving the overflow into the prebuffer, + // then we're consistently over-allocating memory for each term read. + // And now we get into a bit of a tradeoff between speed and memory utilization. + // + // The end result is that the two perform very similarly. + // And we can answer the original question very simply by another means. + // + // If we can read all the data directly into the packet's buffer without resizing it first, + // then we do so. Otherwise we use the prebuffer. + + if (shouldPreBufferPtr) + { + NSUInteger buffSize = [buffer length]; + NSUInteger buffUsed = startOffset + bytesDone; + + if ((buffSize - buffUsed) >= result) + *shouldPreBufferPtr = NO; + else + *shouldPreBufferPtr = YES; + } + + return result; +} + +/** + * For read packets with a set terminator, + * returns the amount of data that can be read from the given preBuffer, + * without going over a terminator or the maxLength. + * + * It is assumed the terminator has not already been read. +**/ +- (NSUInteger)readLengthForTermWithPreBuffer:(MGCDAsyncSocketPreBuffer *)preBuffer found:(BOOL *)foundPtr +{ + NSAssert(term != nil, @"This method does not apply to non-term reads"); + NSAssert([preBuffer availableBytes] > 0, @"Invoked with empty pre buffer!"); + + // We know that the terminator, as a whole, doesn't exist in our own buffer. + // But it is possible that a _portion_ of it exists in our buffer. + // So we're going to look for the terminator starting with a portion of our own buffer. + // + // Example: + // + // term length = 3 bytes + // bytesDone = 5 bytes + // preBuffer length = 5 bytes + // + // If we append the preBuffer to our buffer, + // it would look like this: + // + // --------------------- + // |B|B|B|B|B|P|P|P|P|P| + // --------------------- + // + // So we start our search here: + // + // --------------------- + // |B|B|B|B|B|P|P|P|P|P| + // -------^-^-^--------- + // + // And move forwards... + // + // --------------------- + // |B|B|B|B|B|P|P|P|P|P| + // ---------^-^-^------- + // + // Until we find the terminator or reach the end. + // + // --------------------- + // |B|B|B|B|B|P|P|P|P|P| + // ---------------^-^-^- + + BOOL found = NO; + + NSUInteger termLength = [term length]; + NSUInteger preBufferLength = [preBuffer availableBytes]; + + if ((bytesDone + preBufferLength) < termLength) + { + // Not enough data for a full term sequence yet + return preBufferLength; + } + + NSUInteger maxPreBufferLength; + if (maxLength > 0) { + maxPreBufferLength = MIN(preBufferLength, (maxLength - bytesDone)); + + // Note: maxLength >= termLength + } + else { + maxPreBufferLength = preBufferLength; + } + + uint8_t seq[termLength]; + const void *termBuf = [term bytes]; + + NSUInteger bufLen = MIN(bytesDone, (termLength - 1)); + uint8_t *buf = (uint8_t *)[buffer mutableBytes] + startOffset + bytesDone - bufLen; + + NSUInteger preLen = termLength - bufLen; + const uint8_t *pre = [preBuffer readBuffer]; + + NSUInteger loopCount = bufLen + maxPreBufferLength - termLength + 1; // Plus one. See example above. + + NSUInteger result = maxPreBufferLength; + + NSUInteger i; + for (i = 0; i < loopCount; i++) + { + if (bufLen > 0) + { + // Combining bytes from buffer and preBuffer + + memcpy(seq, buf, bufLen); + memcpy(seq + bufLen, pre, preLen); + + if (memcmp(seq, termBuf, termLength) == 0) + { + result = preLen; + found = YES; + break; + } + + buf++; + bufLen--; + preLen++; + } + else + { + // Comparing directly from preBuffer + + if (memcmp(pre, termBuf, termLength) == 0) + { + NSUInteger preOffset = pre - [preBuffer readBuffer]; // pointer arithmetic + + result = preOffset + termLength; + found = YES; + break; + } + + pre++; + } + } + + // There is no need to avoid resizing the buffer in this particular situation. + + if (foundPtr) *foundPtr = found; + return result; +} + +/** + * For read packets with a set terminator, scans the packet buffer for the term. + * It is assumed the terminator had not been fully read prior to the new bytes. + * + * If the term is found, the number of excess bytes after the term are returned. + * If the term is not found, this method will return -1. + * + * Note: A return value of zero means the term was found at the very end. + * + * Prerequisites: + * The given number of bytes have been added to the end of our buffer. + * Our bytesDone variable has NOT been changed due to the prebuffered bytes. +**/ +- (NSInteger)searchForTermAfterPreBuffering:(ssize_t)numBytes +{ + NSAssert(term != nil, @"This method does not apply to non-term reads"); + + // The implementation of this method is very similar to the above method. + // See the above method for a discussion of the algorithm used here. + + uint8_t *buff = [buffer mutableBytes]; + NSUInteger buffLength = bytesDone + numBytes; + + const void *termBuff = [term bytes]; + NSUInteger termLength = [term length]; + + // Note: We are dealing with unsigned integers, + // so make sure the math doesn't go below zero. + + NSUInteger i = ((buffLength - numBytes) >= termLength) ? (buffLength - numBytes - termLength + 1) : 0; + + while (i + termLength <= buffLength) + { + uint8_t *subBuffer = buff + startOffset + i; + + if (memcmp(subBuffer, termBuff, termLength) == 0) + { + return buffLength - (i + termLength); + } + + i++; + } + + return -1; +} + + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The MGCDAsyncWritePacket encompasses the instructions for any given write. +**/ +@interface MGCDAsyncWritePacket : NSObject +{ + @public + NSData *buffer; + NSUInteger bytesDone; + long tag; + NSTimeInterval timeout; +} +- (instancetype)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i NS_DESIGNATED_INITIALIZER; +@end + +@implementation MGCDAsyncWritePacket + +// Cover the superclass' designated initializer +- (instancetype)init NS_UNAVAILABLE +{ + NSAssert(0, @"Use the designated initializer"); + return nil; +} + +- (instancetype)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i +{ + if((self = [super init])) + { + buffer = d; // Retain not copy. For performance as documented in header file. + bytesDone = 0; + timeout = t; + tag = i; + } + return self; +} + + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The MGCDAsyncSpecialPacket encompasses special instructions for interruptions in the read/write queues. + * This class my be altered to support more than just TLS in the future. +**/ +@interface MGCDAsyncSpecialPacket : NSObject +{ + @public + NSDictionary *tlsSettings; +} +- (instancetype)initWithTLSSettings:(NSDictionary *)settings NS_DESIGNATED_INITIALIZER; +@end + +@implementation MGCDAsyncSpecialPacket + +// Cover the superclass' designated initializer +- (instancetype)init NS_UNAVAILABLE +{ + NSAssert(0, @"Use the designated initializer"); + return nil; +} + +- (instancetype)initWithTLSSettings:(NSDictionary *)settings +{ + if((self = [super init])) + { + tlsSettings = [settings copy]; + } + return self; +} + + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +@implementation MGCDAsyncSocket +{ + uint32_t flags; + uint16_t config; + + __weak id delegate; + dispatch_queue_t delegateQueue; + + int socket4FD; + int socket6FD; + int socketUN; + NSURL *socketUrl; + int stateIndex; + NSData * connectInterface4; + NSData * connectInterface6; + NSData * connectInterfaceUN; + + dispatch_queue_t socketQueue; + + dispatch_source_t accept4Source; + dispatch_source_t accept6Source; + dispatch_source_t acceptUNSource; + dispatch_source_t connectTimer; + dispatch_source_t readSource; + dispatch_source_t writeSource; + dispatch_source_t readTimer; + dispatch_source_t writeTimer; + + NSMutableArray *readQueue; + NSMutableArray *writeQueue; + + MGCDAsyncReadPacket *currentRead; + MGCDAsyncWritePacket *currentWrite; + + unsigned long socketFDBytesAvailable; + + MGCDAsyncSocketPreBuffer *preBuffer; + +#if TARGET_OS_IPHONE + CFStreamClientContext streamContext; + CFReadStreamRef readStream; + CFWriteStreamRef writeStream; +#endif + SSLContextRef sslContext; + MGCDAsyncSocketPreBuffer *sslPreBuffer; + size_t sslWriteCachedLength; + OSStatus sslErrCode; + OSStatus lastSSLHandshakeError; + + void *IsOnSocketQueueOrTargetQueueKey; + + id userData; + NSTimeInterval alternateAddressDelay; +} + +- (instancetype)init +{ + return [self initWithDelegate:nil delegateQueue:NULL socketQueue:NULL]; +} + +- (instancetype)initWithSocketQueue:(dispatch_queue_t)sq +{ + return [self initWithDelegate:nil delegateQueue:NULL socketQueue:sq]; +} + +- (instancetype)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq +{ + return [self initWithDelegate:aDelegate delegateQueue:dq socketQueue:NULL]; +} + +- (instancetype)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq socketQueue:(dispatch_queue_t)sq +{ + if((self = [super init])) + { + delegate = aDelegate; + delegateQueue = dq; + + #if !OS_OBJECT_USE_OBJC + if (dq) dispatch_retain(dq); + #endif + + socket4FD = SOCKET_NULL; + socket6FD = SOCKET_NULL; + socketUN = SOCKET_NULL; + socketUrl = nil; + stateIndex = 0; + + if (sq) + { + NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), + @"The given socketQueue parameter must not be a concurrent queue."); + NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), + @"The given socketQueue parameter must not be a concurrent queue."); + NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), + @"The given socketQueue parameter must not be a concurrent queue."); + + socketQueue = sq; + #if !OS_OBJECT_USE_OBJC + dispatch_retain(sq); + #endif + } + else + { + socketQueue = dispatch_queue_create([MGCDAsyncSocketQueueName UTF8String], NULL); + } + + // The dispatch_queue_set_specific() and dispatch_get_specific() functions take a "void *key" parameter. + // From the documentation: + // + // > Keys are only compared as pointers and are never dereferenced. + // > Thus, you can use a pointer to a static variable for a specific subsystem or + // > any other value that allows you to identify the value uniquely. + // + // We're just going to use the memory address of an ivar. + // Specifically an ivar that is explicitly named for our purpose to make the code more readable. + // + // However, it feels tedious (and less readable) to include the "&" all the time: + // dispatch_get_specific(&IsOnSocketQueueOrTargetQueueKey) + // + // So we're going to make it so it doesn't matter if we use the '&' or not, + // by assigning the value of the ivar to the address of the ivar. + // Thus: IsOnSocketQueueOrTargetQueueKey == &IsOnSocketQueueOrTargetQueueKey; + + IsOnSocketQueueOrTargetQueueKey = &IsOnSocketQueueOrTargetQueueKey; + + void *nonNullUnusedPointer = (__bridge void *)self; + dispatch_queue_set_specific(socketQueue, IsOnSocketQueueOrTargetQueueKey, nonNullUnusedPointer, NULL); + + readQueue = [[NSMutableArray alloc] initWithCapacity:5]; + currentRead = nil; + + writeQueue = [[NSMutableArray alloc] initWithCapacity:5]; + currentWrite = nil; + + preBuffer = [[MGCDAsyncSocketPreBuffer alloc] initWithCapacity:(1024 * 4)]; + alternateAddressDelay = 0.3; + } + return self; +} + +- (void)dealloc +{ + LogInfo(@"%@ - %@ (start)", THIS_METHOD, self); + + // Set dealloc flag. + // This is used by closeWithError to ensure we don't accidentally retain ourself. + flags |= kDealloc; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + [self closeWithError:nil]; + } + else + { + dispatch_sync(socketQueue, ^{ + [self closeWithError:nil]; + }); + } + + delegate = nil; + + #if !OS_OBJECT_USE_OBJC + if (delegateQueue) dispatch_release(delegateQueue); + #endif + delegateQueue = NULL; + + #if !OS_OBJECT_USE_OBJC + if (socketQueue) dispatch_release(socketQueue); + #endif + socketQueue = NULL; + + LogInfo(@"%@ - %@ (finish)", THIS_METHOD, self); +} + +#pragma mark - + ++ (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD socketQueue:(nullable dispatch_queue_t)sq error:(NSError**)error { + return [self socketFromConnectedSocketFD:socketFD delegate:nil delegateQueue:NULL socketQueue:sq error:error]; +} + ++ (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD delegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq error:(NSError**)error { + return [self socketFromConnectedSocketFD:socketFD delegate:aDelegate delegateQueue:dq socketQueue:NULL error:error]; +} + ++ (nullable instancetype)socketFromConnectedSocketFD:(int)socketFD delegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq socketQueue:(nullable dispatch_queue_t)sq error:(NSError* __autoreleasing *)error +{ + __block BOOL errorOccured = NO; + __block NSError *thisError = nil; + + MGCDAsyncSocket *socket = [[[self class] alloc] initWithDelegate:aDelegate delegateQueue:dq socketQueue:sq]; + + dispatch_sync(socket->socketQueue, ^{ @autoreleasepool { + struct sockaddr addr; + socklen_t addr_size = sizeof(struct sockaddr); + int retVal = getpeername(socketFD, (struct sockaddr *)&addr, &addr_size); + if (retVal) + { + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncSocketOtherError", + @"MGCDAsyncSocket", [NSBundle mainBundle], + @"Attempt to create socket from socket FD failed. getpeername() failed", nil); + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + errorOccured = YES; + thisError = [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketOtherError userInfo:userInfo]; + return; + } + + if (addr.sa_family == AF_INET) + { + socket->socket4FD = socketFD; + } + else if (addr.sa_family == AF_INET6) + { + socket->socket6FD = socketFD; + } + else + { + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncSocketOtherError", + @"MGCDAsyncSocket", [NSBundle mainBundle], + @"Attempt to create socket from socket FD failed. socket FD is neither IPv4 nor IPv6", nil); + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + errorOccured = YES; + thisError = [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketOtherError userInfo:userInfo]; + return; + } + + socket->flags = kSocketStarted; + [socket didConnect:socket->stateIndex]; + }}); + + if (error && thisError) { + *error = thisError; + } + + return errorOccured? nil: socket; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Configuration +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (id)delegate +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return delegate; + } + else + { + __block id result; + + dispatch_sync(socketQueue, ^{ + result = self->delegate; + }); + + return result; + } +} + +- (void)setDelegate:(id)newDelegate synchronously:(BOOL)synchronously +{ + dispatch_block_t block = ^{ + self->delegate = newDelegate; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { + block(); + } + else { + if (synchronously) + dispatch_sync(socketQueue, block); + else + dispatch_async(socketQueue, block); + } +} + +- (void)setDelegate:(id)newDelegate +{ + [self setDelegate:newDelegate synchronously:NO]; +} + +- (void)synchronouslySetDelegate:(id)newDelegate +{ + [self setDelegate:newDelegate synchronously:YES]; +} + +- (dispatch_queue_t)delegateQueue +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return delegateQueue; + } + else + { + __block dispatch_queue_t result; + + dispatch_sync(socketQueue, ^{ + result = self->delegateQueue; + }); + + return result; + } +} + +- (void)setDelegateQueue:(dispatch_queue_t)newDelegateQueue synchronously:(BOOL)synchronously +{ + dispatch_block_t block = ^{ + + #if !OS_OBJECT_USE_OBJC + if (self->delegateQueue) dispatch_release(self->delegateQueue); + if (newDelegateQueue) dispatch_retain(newDelegateQueue); + #endif + + self->delegateQueue = newDelegateQueue; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { + block(); + } + else { + if (synchronously) + dispatch_sync(socketQueue, block); + else + dispatch_async(socketQueue, block); + } +} + +- (void)setDelegateQueue:(dispatch_queue_t)newDelegateQueue +{ + [self setDelegateQueue:newDelegateQueue synchronously:NO]; +} + +- (void)synchronouslySetDelegateQueue:(dispatch_queue_t)newDelegateQueue +{ + [self setDelegateQueue:newDelegateQueue synchronously:YES]; +} + +- (void)getDelegate:(id *)delegatePtr delegateQueue:(dispatch_queue_t *)delegateQueuePtr +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + if (delegatePtr) *delegatePtr = delegate; + if (delegateQueuePtr) *delegateQueuePtr = delegateQueue; + } + else + { + __block id dPtr = NULL; + __block dispatch_queue_t dqPtr = NULL; + + dispatch_sync(socketQueue, ^{ + dPtr = self->delegate; + dqPtr = self->delegateQueue; + }); + + if (delegatePtr) *delegatePtr = dPtr; + if (delegateQueuePtr) *delegateQueuePtr = dqPtr; + } +} + +- (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue synchronously:(BOOL)synchronously +{ + dispatch_block_t block = ^{ + + self->delegate = newDelegate; + + #if !OS_OBJECT_USE_OBJC + if (self->delegateQueue) dispatch_release(self->delegateQueue); + if (newDelegateQueue) dispatch_retain(newDelegateQueue); + #endif + + self->delegateQueue = newDelegateQueue; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { + block(); + } + else { + if (synchronously) + dispatch_sync(socketQueue, block); + else + dispatch_async(socketQueue, block); + } +} + +- (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue +{ + [self setDelegate:newDelegate delegateQueue:newDelegateQueue synchronously:NO]; +} + +- (void)synchronouslySetDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue +{ + [self setDelegate:newDelegate delegateQueue:newDelegateQueue synchronously:YES]; +} + +- (BOOL)isIPv4Enabled +{ + // Note: YES means kIPv4Disabled is OFF + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return ((config & kIPv4Disabled) == 0); + } + else + { + __block BOOL result; + + dispatch_sync(socketQueue, ^{ + result = ((self->config & kIPv4Disabled) == 0); + }); + + return result; + } +} + +- (void)setIPv4Enabled:(BOOL)flag +{ + // Note: YES means kIPv4Disabled is OFF + + dispatch_block_t block = ^{ + + if (flag) + self->config &= ~kIPv4Disabled; + else + self->config |= kIPv4Disabled; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (BOOL)isIPv6Enabled +{ + // Note: YES means kIPv6Disabled is OFF + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return ((config & kIPv6Disabled) == 0); + } + else + { + __block BOOL result; + + dispatch_sync(socketQueue, ^{ + result = ((self->config & kIPv6Disabled) == 0); + }); + + return result; + } +} + +- (void)setIPv6Enabled:(BOOL)flag +{ + // Note: YES means kIPv6Disabled is OFF + + dispatch_block_t block = ^{ + + if (flag) + self->config &= ~kIPv6Disabled; + else + self->config |= kIPv6Disabled; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (BOOL)isIPv4PreferredOverIPv6 +{ + // Note: YES means kPreferIPv6 is OFF + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return ((config & kPreferIPv6) == 0); + } + else + { + __block BOOL result; + + dispatch_sync(socketQueue, ^{ + result = ((self->config & kPreferIPv6) == 0); + }); + + return result; + } +} + +- (void)setIPv4PreferredOverIPv6:(BOOL)flag +{ + // Note: YES means kPreferIPv6 is OFF + + dispatch_block_t block = ^{ + + if (flag) + self->config &= ~kPreferIPv6; + else + self->config |= kPreferIPv6; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (NSTimeInterval) alternateAddressDelay { + __block NSTimeInterval delay; + dispatch_block_t block = ^{ + delay = self->alternateAddressDelay; + }; + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + return delay; +} + +- (void) setAlternateAddressDelay:(NSTimeInterval)delay { + dispatch_block_t block = ^{ + self->alternateAddressDelay = delay; + }; + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (id)userData +{ + __block id result = nil; + + dispatch_block_t block = ^{ + + result = self->userData; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (void)setUserData:(id)arbitraryUserData +{ + dispatch_block_t block = ^{ + + if (self->userData != arbitraryUserData) + { + self->userData = arbitraryUserData; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Accepting +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)acceptOnPort:(uint16_t)port error:(NSError **)errPtr +{ + return [self acceptOnInterface:nil port:port error:errPtr]; +} + +- (BOOL)acceptOnInterface:(NSString *)inInterface port:(uint16_t)port error:(NSError **)errPtr +{ + LogTrace(); + + // Just in-case interface parameter is immutable. + NSString *interface = [inInterface copy]; + + __block BOOL result = NO; + __block NSError *err = nil; + + // CreateSocket Block + // This block will be invoked within the dispatch block below. + + int(^createSocket)(int, NSData*) = ^int (int domain, NSData *interfaceAddr) { + + int socketFD = socket(domain, SOCK_STREAM, 0); + + if (socketFD == SOCKET_NULL) + { + NSString *reason = @"Error in socket() function"; + err = [self errorWithErrno:errno reason:reason]; + + return SOCKET_NULL; + } + + int status; + + // Set socket options + + status = fcntl(socketFD, F_SETFL, O_NONBLOCK); + if (status == -1) + { + NSString *reason = @"Error enabling non-blocking IO on socket (fcntl)"; + err = [self errorWithErrno:errno reason:reason]; + + LogVerbose(@"close(socketFD)"); + close(socketFD); + return SOCKET_NULL; + } + + int reuseOn = 1; + status = setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); + if (status == -1) + { + NSString *reason = @"Error enabling address reuse (setsockopt)"; + err = [self errorWithErrno:errno reason:reason]; + + LogVerbose(@"close(socketFD)"); + close(socketFD); + return SOCKET_NULL; + } + + // Bind socket + + status = bind(socketFD, (const struct sockaddr *)[interfaceAddr bytes], (socklen_t)[interfaceAddr length]); + if (status == -1) + { + NSString *reason = @"Error in bind() function"; + err = [self errorWithErrno:errno reason:reason]; + + LogVerbose(@"close(socketFD)"); + close(socketFD); + return SOCKET_NULL; + } + + // Listen + + status = listen(socketFD, 1024); + if (status == -1) + { + NSString *reason = @"Error in listen() function"; + err = [self errorWithErrno:errno reason:reason]; + + LogVerbose(@"close(socketFD)"); + close(socketFD); + return SOCKET_NULL; + } + + return socketFD; + }; + + // Create dispatch block and run on socketQueue + + dispatch_block_t block = ^{ @autoreleasepool { + + if (self->delegate == nil) // Must have delegate set + { + NSString *msg = @"Attempting to accept without a delegate. Set a delegate first."; + err = [self badConfigError:msg]; + + return_from_block; + } + + if (self->delegateQueue == NULL) // Must have delegate queue set + { + NSString *msg = @"Attempting to accept without a delegate queue. Set a delegate queue first."; + err = [self badConfigError:msg]; + + return_from_block; + } + + BOOL isIPv4Disabled = (self->config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (self->config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && isIPv6Disabled) // Must have IPv4 or IPv6 enabled + { + NSString *msg = @"Both IPv4 and IPv6 have been disabled. Must enable at least one protocol first."; + err = [self badConfigError:msg]; + + return_from_block; + } + + if (![self isDisconnected]) // Must be disconnected + { + NSString *msg = @"Attempting to accept while connected or accepting connections. Disconnect first."; + err = [self badConfigError:msg]; + + return_from_block; + } + + // Clear queues (spurious read/write requests post disconnect) + [self->readQueue removeAllObjects]; + [self->writeQueue removeAllObjects]; + + // Resolve interface from description + + NSMutableData *interface4 = nil; + NSMutableData *interface6 = nil; + + [self getInterfaceAddress4:&interface4 address6:&interface6 fromDescription:interface port:port]; + + if ((interface4 == nil) && (interface6 == nil)) + { + NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\") or IP address."; + err = [self badParamError:msg]; + + return_from_block; + } + + if (isIPv4Disabled && (interface6 == nil)) + { + NSString *msg = @"IPv4 has been disabled and specified interface doesn't support IPv6."; + err = [self badParamError:msg]; + + return_from_block; + } + + if (isIPv6Disabled && (interface4 == nil)) + { + NSString *msg = @"IPv6 has been disabled and specified interface doesn't support IPv4."; + err = [self badParamError:msg]; + + return_from_block; + } + + BOOL enableIPv4 = !isIPv4Disabled && (interface4 != nil); + BOOL enableIPv6 = !isIPv6Disabled && (interface6 != nil); + + // Create sockets, configure, bind, and listen + + if (enableIPv4) + { + LogVerbose(@"Creating IPv4 socket"); + self->socket4FD = createSocket(AF_INET, interface4); + + if (self->socket4FD == SOCKET_NULL) + { + return_from_block; + } + } + + if (enableIPv6) + { + LogVerbose(@"Creating IPv6 socket"); + + if (enableIPv4 && (port == 0)) + { + // No specific port was specified, so we allowed the OS to pick an available port for us. + // Now we need to make sure the IPv6 socket listens on the same port as the IPv4 socket. + + struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)[interface6 mutableBytes]; + addr6->sin6_port = htons([self localPort4]); + } + + self->socket6FD = createSocket(AF_INET6, interface6); + + if (self->socket6FD == SOCKET_NULL) + { + if (self->socket4FD != SOCKET_NULL) + { + LogVerbose(@"close(socket4FD)"); + close(self->socket4FD); + self->socket4FD = SOCKET_NULL; + } + + return_from_block; + } + } + + // Create accept sources + + if (enableIPv4) + { + self->accept4Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, self->socket4FD, 0, self->socketQueue); + + int socketFD = self->socket4FD; + dispatch_source_t acceptSource = self->accept4Source; + + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_source_set_event_handler(self->accept4Source, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + LogVerbose(@"event4Block"); + + unsigned long i = 0; + unsigned long numPendingConnections = dispatch_source_get_data(acceptSource); + + LogVerbose(@"numPendingConnections: %lu", numPendingConnections); + + while ([strongSelf doAccept:socketFD] && (++i < numPendingConnections)); + + #pragma clang diagnostic pop + }}); + + + dispatch_source_set_cancel_handler(self->accept4Source, ^{ + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + #if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(accept4Source)"); + dispatch_release(acceptSource); + #endif + + LogVerbose(@"close(socket4FD)"); + close(socketFD); + + #pragma clang diagnostic pop + }); + + LogVerbose(@"dispatch_resume(accept4Source)"); + dispatch_resume(self->accept4Source); + } + + if (enableIPv6) + { + self->accept6Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, self->socket6FD, 0, self->socketQueue); + + int socketFD = self->socket6FD; + dispatch_source_t acceptSource = self->accept6Source; + + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_source_set_event_handler(self->accept6Source, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + LogVerbose(@"event6Block"); + + unsigned long i = 0; + unsigned long numPendingConnections = dispatch_source_get_data(acceptSource); + + LogVerbose(@"numPendingConnections: %lu", numPendingConnections); + + while ([strongSelf doAccept:socketFD] && (++i < numPendingConnections)); + + #pragma clang diagnostic pop + }}); + + dispatch_source_set_cancel_handler(self->accept6Source, ^{ + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + #if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(accept6Source)"); + dispatch_release(acceptSource); + #endif + + LogVerbose(@"close(socket6FD)"); + close(socketFD); + + #pragma clang diagnostic pop + }); + + LogVerbose(@"dispatch_resume(accept6Source)"); + dispatch_resume(self->accept6Source); + } + + self->flags |= kSocketStarted; + + result = YES; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (result == NO) + { + LogInfo(@"Error in accept: %@", err); + + if (errPtr) + *errPtr = err; + } + + return result; +} + +- (BOOL)acceptOnUrl:(NSURL *)url error:(NSError **)errPtr +{ + LogTrace(); + + __block BOOL result = NO; + __block NSError *err = nil; + + // CreateSocket Block + // This block will be invoked within the dispatch block below. + + int(^createSocket)(int, NSData*) = ^int (int domain, NSData *interfaceAddr) { + + int socketFD = socket(domain, SOCK_STREAM, 0); + + if (socketFD == SOCKET_NULL) + { + NSString *reason = @"Error in socket() function"; + err = [self errorWithErrno:errno reason:reason]; + + return SOCKET_NULL; + } + + int status; + + // Set socket options + + status = fcntl(socketFD, F_SETFL, O_NONBLOCK); + if (status == -1) + { + NSString *reason = @"Error enabling non-blocking IO on socket (fcntl)"; + err = [self errorWithErrno:errno reason:reason]; + + LogVerbose(@"close(socketFD)"); + close(socketFD); + return SOCKET_NULL; + } + + int reuseOn = 1; + status = setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); + if (status == -1) + { + NSString *reason = @"Error enabling address reuse (setsockopt)"; + err = [self errorWithErrno:errno reason:reason]; + + LogVerbose(@"close(socketFD)"); + close(socketFD); + return SOCKET_NULL; + } + + // Bind socket + + status = bind(socketFD, (const struct sockaddr *)[interfaceAddr bytes], (socklen_t)[interfaceAddr length]); + if (status == -1) + { + NSString *reason = @"Error in bind() function"; + err = [self errorWithErrno:errno reason:reason]; + + LogVerbose(@"close(socketFD)"); + close(socketFD); + return SOCKET_NULL; + } + + // Listen + + status = listen(socketFD, 1024); + if (status == -1) + { + NSString *reason = @"Error in listen() function"; + err = [self errorWithErrno:errno reason:reason]; + + LogVerbose(@"close(socketFD)"); + close(socketFD); + return SOCKET_NULL; + } + + return socketFD; + }; + + // Create dispatch block and run on socketQueue + + dispatch_block_t block = ^{ @autoreleasepool { + + if (self->delegate == nil) // Must have delegate set + { + NSString *msg = @"Attempting to accept without a delegate. Set a delegate first."; + err = [self badConfigError:msg]; + + return_from_block; + } + + if (self->delegateQueue == NULL) // Must have delegate queue set + { + NSString *msg = @"Attempting to accept without a delegate queue. Set a delegate queue first."; + err = [self badConfigError:msg]; + + return_from_block; + } + + if (![self isDisconnected]) // Must be disconnected + { + NSString *msg = @"Attempting to accept while connected or accepting connections. Disconnect first."; + err = [self badConfigError:msg]; + + return_from_block; + } + + // Clear queues (spurious read/write requests post disconnect) + [self->readQueue removeAllObjects]; + [self->writeQueue removeAllObjects]; + + // Remove a previous socket + + NSError *error = nil; + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *urlPath = url.path; + if (urlPath && [fileManager fileExistsAtPath:urlPath]) { + if (![fileManager removeItemAtURL:url error:&error]) { + NSString *msg = @"Could not remove previous unix domain socket at given url."; + err = [self otherError:msg]; + + return_from_block; + } + } + + // Resolve interface from description + + NSData *interface = [self getInterfaceAddressFromUrl:url]; + + if (interface == nil) + { + NSString *msg = @"Invalid unix domain url. Specify a valid file url that does not exist (e.g. \"file:///tmp/socket\")"; + err = [self badParamError:msg]; + + return_from_block; + } + + // Create sockets, configure, bind, and listen + + LogVerbose(@"Creating unix domain socket"); + self->socketUN = createSocket(AF_UNIX, interface); + + if (self->socketUN == SOCKET_NULL) + { + return_from_block; + } + + self->socketUrl = url; + + // Create accept sources + + self->acceptUNSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, self->socketUN, 0, self->socketQueue); + + int socketFD = self->socketUN; + dispatch_source_t acceptSource = self->acceptUNSource; + + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_source_set_event_handler(self->acceptUNSource, ^{ @autoreleasepool { + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + + LogVerbose(@"eventUNBlock"); + + unsigned long i = 0; + unsigned long numPendingConnections = dispatch_source_get_data(acceptSource); + + LogVerbose(@"numPendingConnections: %lu", numPendingConnections); + + while ([strongSelf doAccept:socketFD] && (++i < numPendingConnections)); + }}); + + dispatch_source_set_cancel_handler(self->acceptUNSource, ^{ + +#if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(acceptUNSource)"); + dispatch_release(acceptSource); +#endif + + LogVerbose(@"close(socketUN)"); + close(socketFD); + }); + + LogVerbose(@"dispatch_resume(acceptUNSource)"); + dispatch_resume(self->acceptUNSource); + + self->flags |= kSocketStarted; + + result = YES; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (result == NO) + { + LogInfo(@"Error in accept: %@", err); + + if (errPtr) + *errPtr = err; + } + + return result; +} + +- (BOOL)doAccept:(int)parentSocketFD +{ + LogTrace(); + + int socketType; + int childSocketFD; + NSData *childSocketAddress; + + if (parentSocketFD == socket4FD) + { + socketType = 0; + + struct sockaddr_in addr; + socklen_t addrLen = sizeof(addr); + + childSocketFD = accept(parentSocketFD, (struct sockaddr *)&addr, &addrLen); + + if (childSocketFD == -1) + { + LogWarn(@"Accept failed with error: %@", [self errnoError]); + return NO; + } + + childSocketAddress = [NSData dataWithBytes:&addr length:addrLen]; + } + else if (parentSocketFD == socket6FD) + { + socketType = 1; + + struct sockaddr_in6 addr; + socklen_t addrLen = sizeof(addr); + + childSocketFD = accept(parentSocketFD, (struct sockaddr *)&addr, &addrLen); + + if (childSocketFD == -1) + { + LogWarn(@"Accept failed with error: %@", [self errnoError]); + return NO; + } + + childSocketAddress = [NSData dataWithBytes:&addr length:addrLen]; + } + else // if (parentSocketFD == socketUN) + { + socketType = 2; + + struct sockaddr_un addr; + socklen_t addrLen = sizeof(addr); + + childSocketFD = accept(parentSocketFD, (struct sockaddr *)&addr, &addrLen); + + if (childSocketFD == -1) + { + LogWarn(@"Accept failed with error: %@", [self errnoError]); + return NO; + } + + childSocketAddress = [NSData dataWithBytes:&addr length:addrLen]; + } + + // Enable non-blocking IO on the socket + + int result = fcntl(childSocketFD, F_SETFL, O_NONBLOCK); + if (result == -1) + { + LogWarn(@"Error enabling non-blocking IO on accepted socket (fcntl)"); + LogVerbose(@"close(childSocketFD)"); + close(childSocketFD); + return NO; + } + + // Prevent SIGPIPE signals + + int nosigpipe = 1; + setsockopt(childSocketFD, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe)); + + // Notify delegate + + if (delegateQueue) + { + __strong id theDelegate = delegate; + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + // Query delegate for custom socket queue + + dispatch_queue_t childSocketQueue = NULL; + + if ([theDelegate respondsToSelector:@selector(newSocketQueueForConnectionFromAddress:onSocket:)]) + { + childSocketQueue = [theDelegate newSocketQueueForConnectionFromAddress:childSocketAddress + onSocket:self]; + } + + // Create MGCDAsyncSocket instance for accepted socket + + MGCDAsyncSocket *acceptedSocket = [[[self class] alloc] initWithDelegate:theDelegate + delegateQueue:self->delegateQueue + socketQueue:childSocketQueue]; + + if (socketType == 0) + acceptedSocket->socket4FD = childSocketFD; + else if (socketType == 1) + acceptedSocket->socket6FD = childSocketFD; + else + acceptedSocket->socketUN = childSocketFD; + + acceptedSocket->flags = (kSocketStarted | kConnected); + + // Setup read and write sources for accepted socket + + dispatch_async(acceptedSocket->socketQueue, ^{ @autoreleasepool { + + [acceptedSocket setupReadAndWriteSourcesForNewlyConnectedSocket:childSocketFD]; + }}); + + // Notify delegate + + if ([theDelegate respondsToSelector:@selector(socket:didAcceptNewSocket:)]) + { + [theDelegate socket:self didAcceptNewSocket:acceptedSocket]; + } + + // Release the socket queue returned from the delegate (it was retained by acceptedSocket) + #if !OS_OBJECT_USE_OBJC + if (childSocketQueue) dispatch_release(childSocketQueue); + #endif + + // The accepted socket should have been retained by the delegate. + // Otherwise it gets properly released when exiting the block. + }}); + } + + return YES; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Connecting +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * This method runs through the various checks required prior to a connection attempt. + * It is shared between the connectToHost and connectToAddress methods. + * +**/ +- (BOOL)preConnectWithInterface:(NSString *)interface error:(NSError **)errPtr +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + if (delegate == nil) // Must have delegate set + { + if (errPtr) + { + NSString *msg = @"Attempting to connect without a delegate. Set a delegate first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + if (delegateQueue == NULL) // Must have delegate queue set + { + if (errPtr) + { + NSString *msg = @"Attempting to connect without a delegate queue. Set a delegate queue first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + if (![self isDisconnected]) // Must be disconnected + { + if (errPtr) + { + NSString *msg = @"Attempting to connect while connected or accepting connections. Disconnect first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + BOOL isIPv4Disabled = (config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && isIPv6Disabled) // Must have IPv4 or IPv6 enabled + { + if (errPtr) + { + NSString *msg = @"Both IPv4 and IPv6 have been disabled. Must enable at least one protocol first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + if (interface) + { + NSMutableData *interface4 = nil; + NSMutableData *interface6 = nil; + + [self getInterfaceAddress4:&interface4 address6:&interface6 fromDescription:interface port:0]; + + if ((interface4 == nil) && (interface6 == nil)) + { + if (errPtr) + { + NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\") or IP address."; + *errPtr = [self badParamError:msg]; + } + return NO; + } + + if (isIPv4Disabled && (interface6 == nil)) + { + if (errPtr) + { + NSString *msg = @"IPv4 has been disabled and specified interface doesn't support IPv6."; + *errPtr = [self badParamError:msg]; + } + return NO; + } + + if (isIPv6Disabled && (interface4 == nil)) + { + if (errPtr) + { + NSString *msg = @"IPv6 has been disabled and specified interface doesn't support IPv4."; + *errPtr = [self badParamError:msg]; + } + return NO; + } + + connectInterface4 = interface4; + connectInterface6 = interface6; + } + + // Clear queues (spurious read/write requests post disconnect) + [readQueue removeAllObjects]; + [writeQueue removeAllObjects]; + + return YES; +} + +- (BOOL)preConnectWithUrl:(NSURL *)url error:(NSError **)errPtr +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + if (delegate == nil) // Must have delegate set + { + if (errPtr) + { + NSString *msg = @"Attempting to connect without a delegate. Set a delegate first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + if (delegateQueue == NULL) // Must have delegate queue set + { + if (errPtr) + { + NSString *msg = @"Attempting to connect without a delegate queue. Set a delegate queue first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + if (![self isDisconnected]) // Must be disconnected + { + if (errPtr) + { + NSString *msg = @"Attempting to connect while connected or accepting connections. Disconnect first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + NSData *interface = [self getInterfaceAddressFromUrl:url]; + + if (interface == nil) + { + if (errPtr) + { + NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\") or IP address."; + *errPtr = [self badParamError:msg]; + } + return NO; + } + + connectInterfaceUN = interface; + + // Clear queues (spurious read/write requests post disconnect) + [readQueue removeAllObjects]; + [writeQueue removeAllObjects]; + + return YES; +} + +- (BOOL)connectToHost:(NSString*)host onPort:(uint16_t)port error:(NSError **)errPtr +{ + return [self connectToHost:host onPort:port withTimeout:-1 error:errPtr]; +} + +- (BOOL)connectToHost:(NSString *)host + onPort:(uint16_t)port + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr +{ + return [self connectToHost:host onPort:port viaInterface:nil withTimeout:timeout error:errPtr]; +} + +- (BOOL)connectToHost:(NSString *)inHost + onPort:(uint16_t)port + viaInterface:(NSString *)inInterface + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr +{ + LogTrace(); + + // Just in case immutable objects were passed + NSString *host = [inHost copy]; + NSString *interface = [inInterface copy]; + + __block BOOL result = NO; + __block NSError *preConnectErr = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + // Check for problems with host parameter + + if ([host length] == 0) + { + NSString *msg = @"Invalid host parameter (nil or \"\"). Should be a domain name or IP address string."; + preConnectErr = [self badParamError:msg]; + + return_from_block; + } + + // Run through standard pre-connect checks + + if (![self preConnectWithInterface:interface error:&preConnectErr]) + { + return_from_block; + } + + // We've made it past all the checks. + // It's time to start the connection process. + + self->flags |= kSocketStarted; + + LogVerbose(@"Dispatching DNS lookup..."); + + // It's possible that the given host parameter is actually a NSMutableString. + // So we want to copy it now, within this block that will be executed synchronously. + // This way the asynchronous lookup block below doesn't have to worry about it changing. + + NSString *hostCpy = [host copy]; + + int aStateIndex = self->stateIndex; + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_queue_t globalConcurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_async(globalConcurrentQueue, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + NSError *lookupErr = nil; + NSMutableArray *addresses = [[self class] lookupHost:hostCpy port:port error:&lookupErr]; + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + if (lookupErr) + { + dispatch_async(strongSelf->socketQueue, ^{ @autoreleasepool { + + [strongSelf lookup:aStateIndex didFail:lookupErr]; + }}); + } + else + { + NSData *address4 = nil; + NSData *address6 = nil; + + for (NSData *address in addresses) + { + if (!address4 && [[self class] isIPv4Address:address]) + { + address4 = address; + } + else if (!address6 && [[self class] isIPv6Address:address]) + { + address6 = address; + } + } + + dispatch_async(strongSelf->socketQueue, ^{ @autoreleasepool { + + [strongSelf lookup:aStateIndex didSucceedWithAddress4:address4 address6:address6]; + }}); + } + + #pragma clang diagnostic pop + }}); + + [self startConnectTimeout:timeout]; + + result = YES; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + + if (errPtr) *errPtr = preConnectErr; + return result; +} + +- (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr +{ + return [self connectToAddress:remoteAddr viaInterface:nil withTimeout:-1 error:errPtr]; +} + +- (BOOL)connectToAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr +{ + return [self connectToAddress:remoteAddr viaInterface:nil withTimeout:timeout error:errPtr]; +} + +- (BOOL)connectToAddress:(NSData *)inRemoteAddr + viaInterface:(NSString *)inInterface + withTimeout:(NSTimeInterval)timeout + error:(NSError **)errPtr +{ + LogTrace(); + + // Just in case immutable objects were passed + NSData *remoteAddr = [inRemoteAddr copy]; + NSString *interface = [inInterface copy]; + + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + // Check for problems with remoteAddr parameter + + NSData *address4 = nil; + NSData *address6 = nil; + + if ([remoteAddr length] >= sizeof(struct sockaddr)) + { + const struct sockaddr *sockaddr = (const struct sockaddr *)[remoteAddr bytes]; + + if (sockaddr->sa_family == AF_INET) + { + if ([remoteAddr length] == sizeof(struct sockaddr_in)) + { + address4 = remoteAddr; + } + } + else if (sockaddr->sa_family == AF_INET6) + { + if ([remoteAddr length] == sizeof(struct sockaddr_in6)) + { + address6 = remoteAddr; + } + } + } + + if ((address4 == nil) && (address6 == nil)) + { + NSString *msg = @"A valid IPv4 or IPv6 address was not given"; + err = [self badParamError:msg]; + + return_from_block; + } + + BOOL isIPv4Disabled = (self->config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (self->config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && (address4 != nil)) + { + NSString *msg = @"IPv4 has been disabled and an IPv4 address was passed."; + err = [self badParamError:msg]; + + return_from_block; + } + + if (isIPv6Disabled && (address6 != nil)) + { + NSString *msg = @"IPv6 has been disabled and an IPv6 address was passed."; + err = [self badParamError:msg]; + + return_from_block; + } + + // Run through standard pre-connect checks + + if (![self preConnectWithInterface:interface error:&err]) + { + return_from_block; + } + + // We've made it past all the checks. + // It's time to start the connection process. + + if (![self connectWithAddress4:address4 address6:address6 error:&err]) + { + return_from_block; + } + + self->flags |= kSocketStarted; + + [self startConnectTimeout:timeout]; + + result = YES; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (result == NO) + { + if (errPtr) + *errPtr = err; + } + + return result; +} + +- (BOOL)connectToUrl:(NSURL *)url withTimeout:(NSTimeInterval)timeout error:(NSError **)errPtr +{ + LogTrace(); + + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + // Check for problems with host parameter + + if ([url.path length] == 0) + { + NSString *msg = @"Invalid unix domain socket url."; + err = [self badParamError:msg]; + + return_from_block; + } + + // Run through standard pre-connect checks + + if (![self preConnectWithUrl:url error:&err]) + { + return_from_block; + } + + // We've made it past all the checks. + // It's time to start the connection process. + + self->flags |= kSocketStarted; + + // Start the normal connection process + + NSError *connectError = nil; + if (![self connectWithAddressUN:self->connectInterfaceUN error:&connectError]) + { + [self closeWithError:connectError]; + + return_from_block; + } + + [self startConnectTimeout:timeout]; + + result = YES; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (result == NO) + { + if (errPtr) + *errPtr = err; + } + + return result; +} + +- (BOOL)connectToNetService:(NSNetService *)netService error:(NSError **)errPtr +{ + NSArray* addresses = [netService addresses]; + for (NSData* address in addresses) + { + BOOL result = [self connectToAddress:address error:errPtr]; + if (result) + { + return YES; + } + } + + return NO; +} + +- (void)lookup:(int)aStateIndex didSucceedWithAddress4:(NSData *)address4 address6:(NSData *)address6 +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert(address4 || address6, @"Expected at least one valid address"); + + if (aStateIndex != stateIndex) + { + LogInfo(@"Ignoring lookupDidSucceed, already disconnected"); + + // The connect operation has been cancelled. + // That is, socket was disconnected, or connection has already timed out. + return; + } + + // Check for problems + + BOOL isIPv4Disabled = (config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && (address6 == nil)) + { + NSString *msg = @"IPv4 has been disabled and DNS lookup found no IPv6 address."; + + [self closeWithError:[self otherError:msg]]; + return; + } + + if (isIPv6Disabled && (address4 == nil)) + { + NSString *msg = @"IPv6 has been disabled and DNS lookup found no IPv4 address."; + + [self closeWithError:[self otherError:msg]]; + return; + } + + // Start the normal connection process + + NSError *err = nil; + if (![self connectWithAddress4:address4 address6:address6 error:&err]) + { + [self closeWithError:err]; + } +} + +/** + * This method is called if the DNS lookup fails. + * This method is executed on the socketQueue. + * + * Since the DNS lookup executed synchronously on a global concurrent queue, + * the original connection request may have already been cancelled or timed-out by the time this method is invoked. + * The lookupIndex tells us whether the lookup is still valid or not. +**/ +- (void)lookup:(int)aStateIndex didFail:(NSError *)error +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + + if (aStateIndex != stateIndex) + { + LogInfo(@"Ignoring lookup:didFail: - already disconnected"); + + // The connect operation has been cancelled. + // That is, socket was disconnected, or connection has already timed out. + return; + } + + [self endConnectTimeout]; + [self closeWithError:error]; +} + +- (BOOL)bindSocket:(int)socketFD toInterface:(NSData *)connectInterface error:(NSError **)errPtr +{ + // Bind the socket to the desired interface (if needed) + + if (connectInterface) + { + LogVerbose(@"Binding socket..."); + + if ([[self class] portFromAddress:connectInterface] > 0) + { + // Since we're going to be binding to a specific port, + // we should turn on reuseaddr to allow us to override sockets in time_wait. + + int reuseOn = 1; + setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); + } + + const struct sockaddr *interfaceAddr = (const struct sockaddr *)[connectInterface bytes]; + + int result = bind(socketFD, interfaceAddr, (socklen_t)[connectInterface length]); + if (result != 0) + { + if (errPtr) + *errPtr = [self errorWithErrno:errno reason:@"Error in bind() function"]; + + return NO; + } + } + + return YES; +} + +- (int)createSocket:(int)family connectInterface:(NSData *)connectInterface errPtr:(NSError **)errPtr +{ + int socketFD = socket(family, SOCK_STREAM, 0); + + if (socketFD == SOCKET_NULL) + { + if (errPtr) + *errPtr = [self errorWithErrno:errno reason:@"Error in socket() function"]; + + return socketFD; + } + + if (![self bindSocket:socketFD toInterface:connectInterface error:errPtr]) + { + [self closeSocket:socketFD]; + + return SOCKET_NULL; + } + + // Prevent SIGPIPE signals + + int nosigpipe = 1; + setsockopt(socketFD, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe)); + + return socketFD; +} + +- (void)connectSocket:(int)socketFD address:(NSData *)address stateIndex:(int)aStateIndex +{ + // If there already is a socket connected, we close socketFD and return + if (self.isConnected) + { + [self closeSocket:socketFD]; + return; + } + + // Start the connection process in a background queue + + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_queue_t globalConcurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_async(globalConcurrentQueue, ^{ +#pragma clang diagnostic push +#pragma clang diagnostic warning "-Wimplicit-retain-self" + + int result = connect(socketFD, (const struct sockaddr *)[address bytes], (socklen_t)[address length]); + int err = errno; + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + dispatch_async(strongSelf->socketQueue, ^{ @autoreleasepool { + + if (strongSelf.isConnected) + { + [strongSelf closeSocket:socketFD]; + return_from_block; + } + + if (result == 0) + { + [self closeUnusedSocket:socketFD]; + + [strongSelf didConnect:aStateIndex]; + } + else + { + [strongSelf closeSocket:socketFD]; + + // If there are no more sockets trying to connect, we inform the error to the delegate + if (strongSelf.socket4FD == SOCKET_NULL && strongSelf.socket6FD == SOCKET_NULL) + { + NSError *error = [strongSelf errorWithErrno:err reason:@"Error in connect() function"]; + [strongSelf didNotConnect:aStateIndex error:error]; + } + } + }}); + +#pragma clang diagnostic pop + }); + + LogVerbose(@"Connecting..."); +} + +- (void)closeSocket:(int)socketFD +{ + if (socketFD != SOCKET_NULL && + (socketFD == socket6FD || socketFD == socket4FD)) + { + close(socketFD); + + if (socketFD == socket4FD) + { + LogVerbose(@"close(socket4FD)"); + socket4FD = SOCKET_NULL; + } + else if (socketFD == socket6FD) + { + LogVerbose(@"close(socket6FD)"); + socket6FD = SOCKET_NULL; + } + } +} + +- (void)closeUnusedSocket:(int)usedSocketFD +{ + if (usedSocketFD != socket4FD) + { + [self closeSocket:socket4FD]; + } + else if (usedSocketFD != socket6FD) + { + [self closeSocket:socket6FD]; + } +} + +- (BOOL)connectWithAddress4:(NSData *)address4 address6:(NSData *)address6 error:(NSError **)errPtr +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + LogVerbose(@"IPv4: %@:%hu", [[self class] hostFromAddress:address4], [[self class] portFromAddress:address4]); + LogVerbose(@"IPv6: %@:%hu", [[self class] hostFromAddress:address6], [[self class] portFromAddress:address6]); + + // Determine socket type + + BOOL preferIPv6 = (config & kPreferIPv6) ? YES : NO; + + // Create and bind the sockets + + if (address4) + { + LogVerbose(@"Creating IPv4 socket"); + + socket4FD = [self createSocket:AF_INET connectInterface:connectInterface4 errPtr:errPtr]; + } + + if (address6) + { + LogVerbose(@"Creating IPv6 socket"); + + socket6FD = [self createSocket:AF_INET6 connectInterface:connectInterface6 errPtr:errPtr]; + } + + if (socket4FD == SOCKET_NULL && socket6FD == SOCKET_NULL) + { + return NO; + } + + int socketFD, alternateSocketFD; + NSData *address, *alternateAddress; + + if ((preferIPv6 && socket6FD != SOCKET_NULL) || socket4FD == SOCKET_NULL) + { + socketFD = socket6FD; + alternateSocketFD = socket4FD; + address = address6; + alternateAddress = address4; + } + else + { + socketFD = socket4FD; + alternateSocketFD = socket6FD; + address = address4; + alternateAddress = address6; + } + + int aStateIndex = stateIndex; + + [self connectSocket:socketFD address:address stateIndex:aStateIndex]; + + if (alternateAddress) + { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(alternateAddressDelay * NSEC_PER_SEC)), socketQueue, ^{ + [self connectSocket:alternateSocketFD address:alternateAddress stateIndex:aStateIndex]; + }); + } + + return YES; +} + +- (BOOL)connectWithAddressUN:(NSData *)address error:(NSError **)errPtr +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + // Create the socket + + int socketFD; + + LogVerbose(@"Creating unix domain socket"); + + socketUN = socket(AF_UNIX, SOCK_STREAM, 0); + + socketFD = socketUN; + + if (socketFD == SOCKET_NULL) + { + if (errPtr) + *errPtr = [self errorWithErrno:errno reason:@"Error in socket() function"]; + + return NO; + } + + // Bind the socket to the desired interface (if needed) + + LogVerbose(@"Binding socket..."); + + int reuseOn = 1; + setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseOn, sizeof(reuseOn)); + +// const struct sockaddr *interfaceAddr = (const struct sockaddr *)[address bytes]; +// +// int result = bind(socketFD, interfaceAddr, (socklen_t)[address length]); +// if (result != 0) +// { +// if (errPtr) +// *errPtr = [self errnoErrorWithReason:@"Error in bind() function"]; +// +// return NO; +// } + + // Prevent SIGPIPE signals + + int nosigpipe = 1; + setsockopt(socketFD, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe)); + + // Start the connection process in a background queue + + int aStateIndex = stateIndex; + + dispatch_queue_t globalConcurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_async(globalConcurrentQueue, ^{ + + const struct sockaddr *addr = (const struct sockaddr *)[address bytes]; + int result = connect(socketFD, addr, addr->sa_len); + if (result == 0) + { + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + [self didConnect:aStateIndex]; + }}); + } + else + { + // TODO: Bad file descriptor + perror("connect"); + NSError *error = [self errorWithErrno:errno reason:@"Error in connect() function"]; + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + [self didNotConnect:aStateIndex error:error]; + }}); + } + }); + + LogVerbose(@"Connecting..."); + + return YES; +} + +- (void)didConnect:(int)aStateIndex +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + + if (aStateIndex != stateIndex) + { + LogInfo(@"Ignoring didConnect, already disconnected"); + + // The connect operation has been cancelled. + // That is, socket was disconnected, or connection has already timed out. + return; + } + + flags |= kConnected; + + [self endConnectTimeout]; + + #if TARGET_OS_IPHONE + // The endConnectTimeout method executed above incremented the stateIndex. + aStateIndex = stateIndex; + #endif + + // Setup read/write streams (as workaround for specific shortcomings in the iOS platform) + // + // Note: + // There may be configuration options that must be set by the delegate before opening the streams. + // The primary example is the `kCFStreamNetworkServiceTypeBackground` flag, which only works on an unopened stream. + // + // Thus we wait until after the socket:didConnectToHost:port: delegate method has completed. + // This gives the delegate time to properly configure the streams if needed. + + dispatch_block_t SetupStreamsPart1 = ^{ + #if TARGET_OS_IPHONE + + if (![self createReadAndWriteStream]) + { + [self closeWithError:[self otherError:@"Error creating CFStreams"]]; + return; + } + + if (![self registerForStreamCallbacksIncludingReadWrite:NO]) + { + [self closeWithError:[self otherError:@"Error in CFStreamSetClient"]]; + return; + } + + #endif + }; + dispatch_block_t SetupStreamsPart2 = ^{ + #if TARGET_OS_IPHONE + + if (aStateIndex != self->stateIndex) + { + // The socket has been disconnected. + return; + } + + if (![self addStreamsToRunLoop]) + { + [self closeWithError:[self otherError:@"Error in CFStreamScheduleWithRunLoop"]]; + return; + } + + if (![self openStreams]) + { + [self closeWithError:[self otherError:@"Error creating CFStreams"]]; + return; + } + + #endif + }; + + // Notify delegate + + NSString *host = [self connectedHost]; + uint16_t port = [self connectedPort]; + NSURL *url = [self connectedUrl]; + + __strong id theDelegate = delegate; + + if (delegateQueue && host != nil && [theDelegate respondsToSelector:@selector(socket:didConnectToHost:port:)]) + { + SetupStreamsPart1(); + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socket:self didConnectToHost:host port:port]; + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + SetupStreamsPart2(); + }}); + }}); + } + else if (delegateQueue && url != nil && [theDelegate respondsToSelector:@selector(socket:didConnectToUrl:)]) + { + SetupStreamsPart1(); + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socket:self didConnectToUrl:url]; + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + SetupStreamsPart2(); + }}); + }}); + } + else + { + SetupStreamsPart1(); + SetupStreamsPart2(); + } + + // Get the connected socket + + int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; + + // Enable non-blocking IO on the socket + + int result = fcntl(socketFD, F_SETFL, O_NONBLOCK); + if (result == -1) + { + NSString *errMsg = @"Error enabling non-blocking IO on socket (fcntl)"; + [self closeWithError:[self otherError:errMsg]]; + + return; + } + + // Setup our read/write sources + + [self setupReadAndWriteSourcesForNewlyConnectedSocket:socketFD]; + + // Dequeue any pending read/write requests + + [self maybeDequeueRead]; + [self maybeDequeueWrite]; +} + +- (void)didNotConnect:(int)aStateIndex error:(NSError *)error +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + + if (aStateIndex != stateIndex) + { + LogInfo(@"Ignoring didNotConnect, already disconnected"); + + // The connect operation has been cancelled. + // That is, socket was disconnected, or connection has already timed out. + return; + } + + [self closeWithError:error]; +} + +- (void)startConnectTimeout:(NSTimeInterval)timeout +{ + if (timeout >= 0.0) + { + connectTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, socketQueue); + + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_source_set_event_handler(connectTimer, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + [strongSelf doConnectTimeout]; + + #pragma clang diagnostic pop + }}); + + #if !OS_OBJECT_USE_OBJC + dispatch_source_t theConnectTimer = connectTimer; + dispatch_source_set_cancel_handler(connectTimer, ^{ + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + LogVerbose(@"dispatch_release(connectTimer)"); + dispatch_release(theConnectTimer); + + #pragma clang diagnostic pop + }); + #endif + + dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)); + dispatch_source_set_timer(connectTimer, tt, DISPATCH_TIME_FOREVER, 0); + + dispatch_resume(connectTimer); + } +} + +- (void)endConnectTimeout +{ + LogTrace(); + + if (connectTimer) + { + dispatch_source_cancel(connectTimer); + connectTimer = NULL; + } + + // Increment stateIndex. + // This will prevent us from processing results from any related background asynchronous operations. + // + // Note: This should be called from close method even if connectTimer is NULL. + // This is because one might disconnect a socket prior to a successful connection which had no timeout. + + stateIndex++; + + if (connectInterface4) + { + connectInterface4 = nil; + } + if (connectInterface6) + { + connectInterface6 = nil; + } +} + +- (void)doConnectTimeout +{ + LogTrace(); + + [self endConnectTimeout]; + [self closeWithError:[self connectTimeoutError]]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Disconnecting +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)closeWithError:(NSError *)error +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + [self endConnectTimeout]; + + if (currentRead != nil) [self endCurrentRead]; + if (currentWrite != nil) [self endCurrentWrite]; + + [readQueue removeAllObjects]; + [writeQueue removeAllObjects]; + + [preBuffer reset]; + + #if TARGET_OS_IPHONE + { + if (readStream || writeStream) + { + [self removeStreamsFromRunLoop]; + + if (readStream) + { + CFReadStreamSetClient(readStream, kCFStreamEventNone, NULL, NULL); + CFReadStreamClose(readStream); + CFRelease(readStream); + readStream = NULL; + } + if (writeStream) + { + CFWriteStreamSetClient(writeStream, kCFStreamEventNone, NULL, NULL); + CFWriteStreamClose(writeStream); + CFRelease(writeStream); + writeStream = NULL; + } + } + } + #endif + + [sslPreBuffer reset]; + sslErrCode = lastSSLHandshakeError = noErr; + + if (sslContext) + { + // Getting a linker error here about the SSLx() functions? + // You need to add the Security Framework to your application. + + SSLClose(sslContext); + + #if TARGET_OS_IPHONE || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1080) + CFRelease(sslContext); + #else + SSLDisposeContext(sslContext); + #endif + + sslContext = NULL; + } + + // For some crazy reason (in my opinion), cancelling a dispatch source doesn't + // invoke the cancel handler if the dispatch source is paused. + // So we have to unpause the source if needed. + // This allows the cancel handler to be run, which in turn releases the source and closes the socket. + + if (!accept4Source && !accept6Source && !acceptUNSource && !readSource && !writeSource) + { + LogVerbose(@"manually closing close"); + + if (socket4FD != SOCKET_NULL) + { + LogVerbose(@"close(socket4FD)"); + close(socket4FD); + socket4FD = SOCKET_NULL; + } + + if (socket6FD != SOCKET_NULL) + { + LogVerbose(@"close(socket6FD)"); + close(socket6FD); + socket6FD = SOCKET_NULL; + } + + if (socketUN != SOCKET_NULL) + { + LogVerbose(@"close(socketUN)"); + close(socketUN); + socketUN = SOCKET_NULL; + unlink(socketUrl.path.fileSystemRepresentation); + socketUrl = nil; + } + } + else + { + if (accept4Source) + { + LogVerbose(@"dispatch_source_cancel(accept4Source)"); + dispatch_source_cancel(accept4Source); + + // We never suspend accept4Source + + accept4Source = NULL; + } + + if (accept6Source) + { + LogVerbose(@"dispatch_source_cancel(accept6Source)"); + dispatch_source_cancel(accept6Source); + + // We never suspend accept6Source + + accept6Source = NULL; + } + + if (acceptUNSource) + { + LogVerbose(@"dispatch_source_cancel(acceptUNSource)"); + dispatch_source_cancel(acceptUNSource); + + // We never suspend acceptUNSource + + acceptUNSource = NULL; + } + + if (readSource) + { + LogVerbose(@"dispatch_source_cancel(readSource)"); + dispatch_source_cancel(readSource); + + [self resumeReadSource]; + + readSource = NULL; + } + + if (writeSource) + { + LogVerbose(@"dispatch_source_cancel(writeSource)"); + dispatch_source_cancel(writeSource); + + [self resumeWriteSource]; + + writeSource = NULL; + } + + // The sockets will be closed by the cancel handlers of the corresponding source + + socket4FD = SOCKET_NULL; + socket6FD = SOCKET_NULL; + socketUN = SOCKET_NULL; + } + + // If the client has passed the connect/accept method, then the connection has at least begun. + // Notify delegate that it is now ending. + BOOL shouldCallDelegate = (flags & kSocketStarted) ? YES : NO; + BOOL isDeallocating = (flags & kDealloc) ? YES : NO; + + // Clear stored socket info and all flags (config remains as is) + socketFDBytesAvailable = 0; + flags = 0; + sslWriteCachedLength = 0; + + if (shouldCallDelegate) + { + __strong id theDelegate = delegate; + __strong id theSelf = isDeallocating ? nil : self; + + if (delegateQueue && [theDelegate respondsToSelector: @selector(socketDidDisconnect:withError:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socketDidDisconnect:theSelf withError:error]; + }}); + } + } +} + +- (void)disconnect +{ + dispatch_block_t block = ^{ @autoreleasepool { + + if (self->flags & kSocketStarted) + { + [self closeWithError:nil]; + } + }}; + + // Synchronous disconnection, as documented in the header file + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); +} + +- (void)disconnectAfterReading +{ + dispatch_async(socketQueue, ^{ @autoreleasepool { + + if (self->flags & kSocketStarted) + { + self->flags |= (kForbidReadsWrites | kDisconnectAfterReads); + [self maybeClose]; + } + }}); +} + +- (void)disconnectAfterWriting +{ + dispatch_async(socketQueue, ^{ @autoreleasepool { + + if (self->flags & kSocketStarted) + { + self->flags |= (kForbidReadsWrites | kDisconnectAfterWrites); + [self maybeClose]; + } + }}); +} + +- (void)disconnectAfterReadingAndWriting +{ + dispatch_async(socketQueue, ^{ @autoreleasepool { + + if (self->flags & kSocketStarted) + { + self->flags |= (kForbidReadsWrites | kDisconnectAfterReads | kDisconnectAfterWrites); + [self maybeClose]; + } + }}); +} + +/** + * Closes the socket if possible. + * That is, if all writes have completed, and we're set to disconnect after writing, + * or if all reads have completed, and we're set to disconnect after reading. +**/ +- (void)maybeClose +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + BOOL shouldClose = NO; + + if (flags & kDisconnectAfterReads) + { + if (([readQueue count] == 0) && (currentRead == nil)) + { + if (flags & kDisconnectAfterWrites) + { + if (([writeQueue count] == 0) && (currentWrite == nil)) + { + shouldClose = YES; + } + } + else + { + shouldClose = YES; + } + } + } + else if (flags & kDisconnectAfterWrites) + { + if (([writeQueue count] == 0) && (currentWrite == nil)) + { + shouldClose = YES; + } + } + + if (shouldClose) + { + [self closeWithError:nil]; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Errors +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (NSError *)badConfigError:(NSString *)errMsg +{ + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketBadConfigError userInfo:userInfo]; +} + +- (NSError *)badParamError:(NSString *)errMsg +{ + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketBadParamError userInfo:userInfo]; +} + ++ (NSError *)gaiError:(int)gai_error +{ + NSString *errMsg = [NSString stringWithCString:gai_strerror(gai_error) encoding:NSASCIIStringEncoding]; + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:@"kCFStreamErrorDomainNetDB" code:gai_error userInfo:userInfo]; +} + +- (NSError *)errorWithErrno:(int)err reason:(NSString *)reason +{ + NSString *errMsg = [NSString stringWithUTF8String:strerror(err)]; + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg, + NSLocalizedFailureReasonErrorKey : reason}; + + return [NSError errorWithDomain:NSPOSIXErrorDomain code:err userInfo:userInfo]; +} + +- (NSError *)errnoError +{ + NSString *errMsg = [NSString stringWithUTF8String:strerror(errno)]; + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:userInfo]; +} + +- (NSError *)sslError:(OSStatus)ssl_error +{ + NSString *msg = @"Error code definition can be found in Apple's SecureTransport.h"; + NSDictionary *userInfo = @{NSLocalizedRecoverySuggestionErrorKey : msg}; + + return [NSError errorWithDomain:@"kCFStreamErrorDomainSSL" code:ssl_error userInfo:userInfo]; +} + +- (NSError *)connectTimeoutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncSocketConnectTimeoutError", + @"MGCDAsyncSocket", [NSBundle mainBundle], + @"Attempt to connect to host timed out", nil); + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketConnectTimeoutError userInfo:userInfo]; +} + +/** + * Returns a standard AsyncSocket maxed out error. +**/ +- (NSError *)readMaxedOutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncSocketReadMaxedOutError", + @"MGCDAsyncSocket", [NSBundle mainBundle], + @"Read operation reached set maximum length", nil); + + NSDictionary *info = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketReadMaxedOutError userInfo:info]; +} + +/** + * Returns a standard AsyncSocket write timeout error. +**/ +- (NSError *)readTimeoutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncSocketReadTimeoutError", + @"MGCDAsyncSocket", [NSBundle mainBundle], + @"Read operation timed out", nil); + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketReadTimeoutError userInfo:userInfo]; +} + +/** + * Returns a standard AsyncSocket write timeout error. +**/ +- (NSError *)writeTimeoutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncSocketWriteTimeoutError", + @"MGCDAsyncSocket", [NSBundle mainBundle], + @"Write operation timed out", nil); + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketWriteTimeoutError userInfo:userInfo]; +} + +- (NSError *)connectionClosedError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncSocketClosedError", + @"MGCDAsyncSocket", [NSBundle mainBundle], + @"Socket closed by remote peer", nil); + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketClosedError userInfo:userInfo]; +} + +- (NSError *)otherError:(NSString *)errMsg +{ + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncSocketErrorDomain code:MGCDAsyncSocketOtherError userInfo:userInfo]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Diagnostics +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)isDisconnected +{ + __block BOOL result = NO; + + dispatch_block_t block = ^{ + result = (self->flags & kSocketStarted) ? NO : YES; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (BOOL)isConnected +{ + __block BOOL result = NO; + + dispatch_block_t block = ^{ + result = (self->flags & kConnected) ? YES : NO; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (NSString *)connectedHost +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + if (socket4FD != SOCKET_NULL) + return [self connectedHostFromSocket4:socket4FD]; + if (socket6FD != SOCKET_NULL) + return [self connectedHostFromSocket6:socket6FD]; + + return nil; + } + else + { + __block NSString *result = nil; + + dispatch_sync(socketQueue, ^{ @autoreleasepool { + + if (self->socket4FD != SOCKET_NULL) + result = [self connectedHostFromSocket4:self->socket4FD]; + else if (self->socket6FD != SOCKET_NULL) + result = [self connectedHostFromSocket6:self->socket6FD]; + }}); + + return result; + } +} + +- (uint16_t)connectedPort +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + if (socket4FD != SOCKET_NULL) + return [self connectedPortFromSocket4:socket4FD]; + if (socket6FD != SOCKET_NULL) + return [self connectedPortFromSocket6:socket6FD]; + + return 0; + } + else + { + __block uint16_t result = 0; + + dispatch_sync(socketQueue, ^{ + // No need for autorelease pool + + if (self->socket4FD != SOCKET_NULL) + result = [self connectedPortFromSocket4:self->socket4FD]; + else if (self->socket6FD != SOCKET_NULL) + result = [self connectedPortFromSocket6:self->socket6FD]; + }); + + return result; + } +} + +- (NSURL *)connectedUrl +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + if (socketUN != SOCKET_NULL) + return [self connectedUrlFromSocketUN:socketUN]; + + return nil; + } + else + { + __block NSURL *result = nil; + + dispatch_sync(socketQueue, ^{ @autoreleasepool { + + if (self->socketUN != SOCKET_NULL) + result = [self connectedUrlFromSocketUN:self->socketUN]; + }}); + + return result; + } +} + +- (NSString *)localHost +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + if (socket4FD != SOCKET_NULL) + return [self localHostFromSocket4:socket4FD]; + if (socket6FD != SOCKET_NULL) + return [self localHostFromSocket6:socket6FD]; + + return nil; + } + else + { + __block NSString *result = nil; + + dispatch_sync(socketQueue, ^{ @autoreleasepool { + + if (self->socket4FD != SOCKET_NULL) + result = [self localHostFromSocket4:self->socket4FD]; + else if (self->socket6FD != SOCKET_NULL) + result = [self localHostFromSocket6:self->socket6FD]; + }}); + + return result; + } +} + +- (uint16_t)localPort +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + if (socket4FD != SOCKET_NULL) + return [self localPortFromSocket4:socket4FD]; + if (socket6FD != SOCKET_NULL) + return [self localPortFromSocket6:socket6FD]; + + return 0; + } + else + { + __block uint16_t result = 0; + + dispatch_sync(socketQueue, ^{ + // No need for autorelease pool + + if (self->socket4FD != SOCKET_NULL) + result = [self localPortFromSocket4:self->socket4FD]; + else if (self->socket6FD != SOCKET_NULL) + result = [self localPortFromSocket6:self->socket6FD]; + }); + + return result; + } +} + +- (NSString *)connectedHost4 +{ + if (socket4FD != SOCKET_NULL) + return [self connectedHostFromSocket4:socket4FD]; + + return nil; +} + +- (NSString *)connectedHost6 +{ + if (socket6FD != SOCKET_NULL) + return [self connectedHostFromSocket6:socket6FD]; + + return nil; +} + +- (uint16_t)connectedPort4 +{ + if (socket4FD != SOCKET_NULL) + return [self connectedPortFromSocket4:socket4FD]; + + return 0; +} + +- (uint16_t)connectedPort6 +{ + if (socket6FD != SOCKET_NULL) + return [self connectedPortFromSocket6:socket6FD]; + + return 0; +} + +- (NSString *)localHost4 +{ + if (socket4FD != SOCKET_NULL) + return [self localHostFromSocket4:socket4FD]; + + return nil; +} + +- (NSString *)localHost6 +{ + if (socket6FD != SOCKET_NULL) + return [self localHostFromSocket6:socket6FD]; + + return nil; +} + +- (uint16_t)localPort4 +{ + if (socket4FD != SOCKET_NULL) + return [self localPortFromSocket4:socket4FD]; + + return 0; +} + +- (uint16_t)localPort6 +{ + if (socket6FD != SOCKET_NULL) + return [self localPortFromSocket6:socket6FD]; + + return 0; +} + +- (NSString *)connectedHostFromSocket4:(int)socketFD +{ + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if (getpeername(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) + { + return nil; + } + return [[self class] hostFromSockaddr4:&sockaddr4]; +} + +- (NSString *)connectedHostFromSocket6:(int)socketFD +{ + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if (getpeername(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) + { + return nil; + } + return [[self class] hostFromSockaddr6:&sockaddr6]; +} + +- (uint16_t)connectedPortFromSocket4:(int)socketFD +{ + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if (getpeername(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) + { + return 0; + } + return [[self class] portFromSockaddr4:&sockaddr4]; +} + +- (uint16_t)connectedPortFromSocket6:(int)socketFD +{ + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if (getpeername(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) + { + return 0; + } + return [[self class] portFromSockaddr6:&sockaddr6]; +} + +- (NSURL *)connectedUrlFromSocketUN:(int)socketFD +{ + struct sockaddr_un sockaddr; + socklen_t sockaddrlen = sizeof(sockaddr); + + if (getpeername(socketFD, (struct sockaddr *)&sockaddr, &sockaddrlen) < 0) + { + return 0; + } + return [[self class] urlFromSockaddrUN:&sockaddr]; +} + +- (NSString *)localHostFromSocket4:(int)socketFD +{ + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if (getsockname(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) + { + return nil; + } + return [[self class] hostFromSockaddr4:&sockaddr4]; +} + +- (NSString *)localHostFromSocket6:(int)socketFD +{ + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if (getsockname(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) + { + return nil; + } + return [[self class] hostFromSockaddr6:&sockaddr6]; +} + +- (uint16_t)localPortFromSocket4:(int)socketFD +{ + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if (getsockname(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) < 0) + { + return 0; + } + return [[self class] portFromSockaddr4:&sockaddr4]; +} + +- (uint16_t)localPortFromSocket6:(int)socketFD +{ + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if (getsockname(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) < 0) + { + return 0; + } + return [[self class] portFromSockaddr6:&sockaddr6]; +} + +- (NSData *)connectedAddress +{ + __block NSData *result = nil; + + dispatch_block_t block = ^{ + if (self->socket4FD != SOCKET_NULL) + { + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if (getpeername(self->socket4FD, (struct sockaddr *)&sockaddr4, &sockaddr4len) == 0) + { + result = [[NSData alloc] initWithBytes:&sockaddr4 length:sockaddr4len]; + } + } + + if (self->socket6FD != SOCKET_NULL) + { + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if (getpeername(self->socket6FD, (struct sockaddr *)&sockaddr6, &sockaddr6len) == 0) + { + result = [[NSData alloc] initWithBytes:&sockaddr6 length:sockaddr6len]; + } + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (NSData *)localAddress +{ + __block NSData *result = nil; + + dispatch_block_t block = ^{ + if (self->socket4FD != SOCKET_NULL) + { + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if (getsockname(self->socket4FD, (struct sockaddr *)&sockaddr4, &sockaddr4len) == 0) + { + result = [[NSData alloc] initWithBytes:&sockaddr4 length:sockaddr4len]; + } + } + + if (self->socket6FD != SOCKET_NULL) + { + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if (getsockname(self->socket6FD, (struct sockaddr *)&sockaddr6, &sockaddr6len) == 0) + { + result = [[NSData alloc] initWithBytes:&sockaddr6 length:sockaddr6len]; + } + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (BOOL)isIPv4 +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return (socket4FD != SOCKET_NULL); + } + else + { + __block BOOL result = NO; + + dispatch_sync(socketQueue, ^{ + result = (self->socket4FD != SOCKET_NULL); + }); + + return result; + } +} + +- (BOOL)isIPv6 +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return (socket6FD != SOCKET_NULL); + } + else + { + __block BOOL result = NO; + + dispatch_sync(socketQueue, ^{ + result = (self->socket6FD != SOCKET_NULL); + }); + + return result; + } +} + +- (BOOL)isSecure +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return (flags & kSocketSecure) ? YES : NO; + } + else + { + __block BOOL result; + + dispatch_sync(socketQueue, ^{ + result = (self->flags & kSocketSecure) ? YES : NO; + }); + + return result; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Utilities +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * Finds the address of an interface description. + * An inteface description may be an interface name (en0, en1, lo0) or corresponding IP (192.168.4.34). + * + * The interface description may optionally contain a port number at the end, separated by a colon. + * If a non-zero port parameter is provided, any port number in the interface description is ignored. + * + * The returned value is a 'struct sockaddr' wrapped in an NSMutableData object. +**/ +- (void)getInterfaceAddress4:(NSMutableData **)interfaceAddr4Ptr + address6:(NSMutableData **)interfaceAddr6Ptr + fromDescription:(NSString *)interfaceDescription + port:(uint16_t)port +{ + NSMutableData *addr4 = nil; + NSMutableData *addr6 = nil; + + NSString *interface = nil; + + NSArray *components = [interfaceDescription componentsSeparatedByString:@":"]; + if ([components count] > 0) + { + NSString *temp = [components objectAtIndex:0]; + if ([temp length] > 0) + { + interface = temp; + } + } + if ([components count] > 1 && port == 0) + { + NSString *temp = [components objectAtIndex:1]; + long portL = strtol([temp UTF8String], NULL, 10); + + if (portL > 0 && portL <= UINT16_MAX) + { + port = (uint16_t)portL; + } + } + + if (interface == nil) + { + // ANY address + + struct sockaddr_in sockaddr4; + memset(&sockaddr4, 0, sizeof(sockaddr4)); + + sockaddr4.sin_len = sizeof(sockaddr4); + sockaddr4.sin_family = AF_INET; + sockaddr4.sin_port = htons(port); + sockaddr4.sin_addr.s_addr = htonl(INADDR_ANY); + + struct sockaddr_in6 sockaddr6; + memset(&sockaddr6, 0, sizeof(sockaddr6)); + + sockaddr6.sin6_len = sizeof(sockaddr6); + sockaddr6.sin6_family = AF_INET6; + sockaddr6.sin6_port = htons(port); + sockaddr6.sin6_addr = in6addr_any; + + addr4 = [NSMutableData dataWithBytes:&sockaddr4 length:sizeof(sockaddr4)]; + addr6 = [NSMutableData dataWithBytes:&sockaddr6 length:sizeof(sockaddr6)]; + } + else if ([interface isEqualToString:@"localhost"] || [interface isEqualToString:@"loopback"]) + { + // LOOPBACK address + + struct sockaddr_in sockaddr4; + memset(&sockaddr4, 0, sizeof(sockaddr4)); + + sockaddr4.sin_len = sizeof(sockaddr4); + sockaddr4.sin_family = AF_INET; + sockaddr4.sin_port = htons(port); + sockaddr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + + struct sockaddr_in6 sockaddr6; + memset(&sockaddr6, 0, sizeof(sockaddr6)); + + sockaddr6.sin6_len = sizeof(sockaddr6); + sockaddr6.sin6_family = AF_INET6; + sockaddr6.sin6_port = htons(port); + sockaddr6.sin6_addr = in6addr_loopback; + + addr4 = [NSMutableData dataWithBytes:&sockaddr4 length:sizeof(sockaddr4)]; + addr6 = [NSMutableData dataWithBytes:&sockaddr6 length:sizeof(sockaddr6)]; + } + else + { + const char *iface = [interface UTF8String]; + + struct ifaddrs *addrs; + const struct ifaddrs *cursor; + + if ((getifaddrs(&addrs) == 0)) + { + cursor = addrs; + while (cursor != NULL) + { + if ((addr4 == nil) && (cursor->ifa_addr->sa_family == AF_INET)) + { + // IPv4 + + struct sockaddr_in nativeAddr4; + memcpy(&nativeAddr4, cursor->ifa_addr, sizeof(nativeAddr4)); + + if (strcmp(cursor->ifa_name, iface) == 0) + { + // Name match + + nativeAddr4.sin_port = htons(port); + + addr4 = [NSMutableData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; + } + else + { + char ip[INET_ADDRSTRLEN]; + + const char *conversion = inet_ntop(AF_INET, &nativeAddr4.sin_addr, ip, sizeof(ip)); + + if ((conversion != NULL) && (strcmp(ip, iface) == 0)) + { + // IP match + + nativeAddr4.sin_port = htons(port); + + addr4 = [NSMutableData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; + } + } + } + else if ((addr6 == nil) && (cursor->ifa_addr->sa_family == AF_INET6)) + { + // IPv6 + + struct sockaddr_in6 nativeAddr6; + memcpy(&nativeAddr6, cursor->ifa_addr, sizeof(nativeAddr6)); + + if (strcmp(cursor->ifa_name, iface) == 0) + { + // Name match + + nativeAddr6.sin6_port = htons(port); + + addr6 = [NSMutableData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; + } + else + { + char ip[INET6_ADDRSTRLEN]; + + const char *conversion = inet_ntop(AF_INET6, &nativeAddr6.sin6_addr, ip, sizeof(ip)); + + if ((conversion != NULL) && (strcmp(ip, iface) == 0)) + { + // IP match + + nativeAddr6.sin6_port = htons(port); + + addr6 = [NSMutableData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; + } + } + } + + cursor = cursor->ifa_next; + } + + freeifaddrs(addrs); + } + } + + if (interfaceAddr4Ptr) *interfaceAddr4Ptr = addr4; + if (interfaceAddr6Ptr) *interfaceAddr6Ptr = addr6; +} + +- (NSData *)getInterfaceAddressFromUrl:(NSURL *)url +{ + NSString *path = url.path; + if (path.length == 0) { + return nil; + } + + struct sockaddr_un nativeAddr; + nativeAddr.sun_family = AF_UNIX; + strlcpy(nativeAddr.sun_path, path.fileSystemRepresentation, sizeof(nativeAddr.sun_path)); + nativeAddr.sun_len = (unsigned char)SUN_LEN(&nativeAddr); + NSData *interface = [NSData dataWithBytes:&nativeAddr length:sizeof(struct sockaddr_un)]; + + return interface; +} + +- (void)setupReadAndWriteSourcesForNewlyConnectedSocket:(int)socketFD +{ + readSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, socketFD, 0, socketQueue); + writeSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_WRITE, socketFD, 0, socketQueue); + + // Setup event handlers + + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_source_set_event_handler(readSource, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + LogVerbose(@"readEventBlock"); + + strongSelf->socketFDBytesAvailable = dispatch_source_get_data(strongSelf->readSource); + LogVerbose(@"socketFDBytesAvailable: %lu", strongSelf->socketFDBytesAvailable); + + if (strongSelf->socketFDBytesAvailable > 0) + [strongSelf doReadData]; + else + [strongSelf doReadEOF]; + + #pragma clang diagnostic pop + }}); + + dispatch_source_set_event_handler(writeSource, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + LogVerbose(@"writeEventBlock"); + + strongSelf->flags |= kSocketCanAcceptBytes; + [strongSelf doWriteData]; + + #pragma clang diagnostic pop + }}); + + // Setup cancel handlers + + __block int socketFDRefCount = 2; + + #if !OS_OBJECT_USE_OBJC + dispatch_source_t theReadSource = readSource; + dispatch_source_t theWriteSource = writeSource; + #endif + + dispatch_source_set_cancel_handler(readSource, ^{ + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + LogVerbose(@"readCancelBlock"); + + #if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(readSource)"); + dispatch_release(theReadSource); + #endif + + if (--socketFDRefCount == 0) + { + LogVerbose(@"close(socketFD)"); + close(socketFD); + } + + #pragma clang diagnostic pop + }); + + dispatch_source_set_cancel_handler(writeSource, ^{ + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + LogVerbose(@"writeCancelBlock"); + + #if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(writeSource)"); + dispatch_release(theWriteSource); + #endif + + if (--socketFDRefCount == 0) + { + LogVerbose(@"close(socketFD)"); + close(socketFD); + } + + #pragma clang diagnostic pop + }); + + // We will not be able to read until data arrives. + // But we should be able to write immediately. + + socketFDBytesAvailable = 0; + flags &= ~kReadSourceSuspended; + + LogVerbose(@"dispatch_resume(readSource)"); + dispatch_resume(readSource); + + flags |= kSocketCanAcceptBytes; + flags |= kWriteSourceSuspended; +} + +- (BOOL)usingCFStreamForTLS +{ + #if TARGET_OS_IPHONE + + if ((flags & kSocketSecure) && (flags & kUsingCFStreamForTLS)) + { + // The startTLS method was given the MGCDAsyncSocketUseCFStreamForTLS flag. + + return YES; + } + + #endif + + return NO; +} + +- (BOOL)usingSecureTransportForTLS +{ + // Invoking this method is equivalent to ![self usingCFStreamForTLS] (just more readable) + + #if TARGET_OS_IPHONE + + if ((flags & kSocketSecure) && (flags & kUsingCFStreamForTLS)) + { + // The startTLS method was given the MGCDAsyncSocketUseCFStreamForTLS flag. + + return NO; + } + + #endif + + return YES; +} + +- (void)suspendReadSource +{ + if (!(flags & kReadSourceSuspended)) + { + LogVerbose(@"dispatch_suspend(readSource)"); + + dispatch_suspend(readSource); + flags |= kReadSourceSuspended; + } +} + +- (void)resumeReadSource +{ + if (flags & kReadSourceSuspended) + { + LogVerbose(@"dispatch_resume(readSource)"); + + dispatch_resume(readSource); + flags &= ~kReadSourceSuspended; + } +} + +- (void)suspendWriteSource +{ + if (!(flags & kWriteSourceSuspended)) + { + LogVerbose(@"dispatch_suspend(writeSource)"); + + dispatch_suspend(writeSource); + flags |= kWriteSourceSuspended; + } +} + +- (void)resumeWriteSource +{ + if (flags & kWriteSourceSuspended) + { + LogVerbose(@"dispatch_resume(writeSource)"); + + dispatch_resume(writeSource); + flags &= ~kWriteSourceSuspended; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Reading +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)readDataWithTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + [self readDataWithTimeout:timeout buffer:nil bufferOffset:0 maxLength:0 tag:tag]; +} + +- (void)readDataWithTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag +{ + [self readDataWithTimeout:timeout buffer:buffer bufferOffset:offset maxLength:0 tag:tag]; +} + +- (void)readDataWithTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + maxLength:(NSUInteger)length + tag:(long)tag +{ + if (offset > [buffer length]) { + LogWarn(@"Cannot read: offset > [buffer length]"); + return; + } + + MGCDAsyncReadPacket *packet = [[MGCDAsyncReadPacket alloc] initWithData:buffer + startOffset:offset + maxLength:length + timeout:timeout + readLength:0 + terminator:nil + tag:tag]; + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + LogTrace(); + + if ((self->flags & kSocketStarted) && !(self->flags & kForbidReadsWrites)) + { + [self->readQueue addObject:packet]; + [self maybeDequeueRead]; + } + }}); + + // Do not rely on the block being run in order to release the packet, + // as the queue might get released without the block completing. +} + +- (void)readDataToLength:(NSUInteger)length withTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + [self readDataToLength:length withTimeout:timeout buffer:nil bufferOffset:0 tag:tag]; +} + +- (void)readDataToLength:(NSUInteger)length + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag +{ + if (length == 0) { + LogWarn(@"Cannot read: length == 0"); + return; + } + if (offset > [buffer length]) { + LogWarn(@"Cannot read: offset > [buffer length]"); + return; + } + + MGCDAsyncReadPacket *packet = [[MGCDAsyncReadPacket alloc] initWithData:buffer + startOffset:offset + maxLength:0 + timeout:timeout + readLength:length + terminator:nil + tag:tag]; + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + LogTrace(); + + if ((self->flags & kSocketStarted) && !(self->flags & kForbidReadsWrites)) + { + [self->readQueue addObject:packet]; + [self maybeDequeueRead]; + } + }}); + + // Do not rely on the block being run in order to release the packet, + // as the queue might get released without the block completing. +} + +- (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + [self readDataToData:data withTimeout:timeout buffer:nil bufferOffset:0 maxLength:0 tag:tag]; +} + +- (void)readDataToData:(NSData *)data + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + tag:(long)tag +{ + [self readDataToData:data withTimeout:timeout buffer:buffer bufferOffset:offset maxLength:0 tag:tag]; +} + +- (void)readDataToData:(NSData *)data withTimeout:(NSTimeInterval)timeout maxLength:(NSUInteger)length tag:(long)tag +{ + [self readDataToData:data withTimeout:timeout buffer:nil bufferOffset:0 maxLength:length tag:tag]; +} + +- (void)readDataToData:(NSData *)data + withTimeout:(NSTimeInterval)timeout + buffer:(NSMutableData *)buffer + bufferOffset:(NSUInteger)offset + maxLength:(NSUInteger)maxLength + tag:(long)tag +{ + if ([data length] == 0) { + LogWarn(@"Cannot read: [data length] == 0"); + return; + } + if (offset > [buffer length]) { + LogWarn(@"Cannot read: offset > [buffer length]"); + return; + } + if (maxLength > 0 && maxLength < [data length]) { + LogWarn(@"Cannot read: maxLength > 0 && maxLength < [data length]"); + return; + } + + MGCDAsyncReadPacket *packet = [[MGCDAsyncReadPacket alloc] initWithData:buffer + startOffset:offset + maxLength:maxLength + timeout:timeout + readLength:0 + terminator:data + tag:tag]; + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + LogTrace(); + + if ((self->flags & kSocketStarted) && !(self->flags & kForbidReadsWrites)) + { + [self->readQueue addObject:packet]; + [self maybeDequeueRead]; + } + }}); + + // Do not rely on the block being run in order to release the packet, + // as the queue might get released without the block completing. +} + +- (float)progressOfReadReturningTag:(long *)tagPtr bytesDone:(NSUInteger *)donePtr total:(NSUInteger *)totalPtr +{ + __block float result = 0.0F; + + dispatch_block_t block = ^{ + + if (!self->currentRead || ![self->currentRead isKindOfClass:[MGCDAsyncReadPacket class]]) + { + // We're not reading anything right now. + + if (tagPtr != NULL) *tagPtr = 0; + if (donePtr != NULL) *donePtr = 0; + if (totalPtr != NULL) *totalPtr = 0; + + result = NAN; + } + else + { + // It's only possible to know the progress of our read if we're reading to a certain length. + // If we're reading to data, we of course have no idea when the data will arrive. + // If we're reading to timeout, then we have no idea when the next chunk of data will arrive. + + NSUInteger done = self->currentRead->bytesDone; + NSUInteger total = self->currentRead->readLength; + + if (tagPtr != NULL) *tagPtr = self->currentRead->tag; + if (donePtr != NULL) *donePtr = done; + if (totalPtr != NULL) *totalPtr = total; + + if (total > 0) + result = (float)done / (float)total; + else + result = 1.0F; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +/** + * This method starts a new read, if needed. + * + * It is called when: + * - a user requests a read + * - after a read request has finished (to handle the next request) + * - immediately after the socket opens to handle any pending requests + * + * This method also handles auto-disconnect post read/write completion. +**/ +- (void)maybeDequeueRead +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + // If we're not currently processing a read AND we have an available read stream + if ((currentRead == nil) && (flags & kConnected)) + { + if ([readQueue count] > 0) + { + // Dequeue the next object in the write queue + currentRead = [readQueue objectAtIndex:0]; + [readQueue removeObjectAtIndex:0]; + + + if ([currentRead isKindOfClass:[MGCDAsyncSpecialPacket class]]) + { + LogVerbose(@"Dequeued MGCDAsyncSpecialPacket"); + + // Attempt to start TLS + flags |= kStartingReadTLS; + + // This method won't do anything unless both kStartingReadTLS and kStartingWriteTLS are set + [self maybeStartTLS]; + } + else + { + LogVerbose(@"Dequeued MGCDAsyncReadPacket"); + + // Setup read timer (if needed) + [self setupReadTimerWithTimeout:currentRead->timeout]; + + // Immediately read, if possible + [self doReadData]; + } + } + else if (flags & kDisconnectAfterReads) + { + if (flags & kDisconnectAfterWrites) + { + if (([writeQueue count] == 0) && (currentWrite == nil)) + { + [self closeWithError:nil]; + } + } + else + { + [self closeWithError:nil]; + } + } + else if (flags & kSocketSecure) + { + [self flushSSLBuffers]; + + // Edge case: + // + // We just drained all data from the ssl buffers, + // and all known data from the socket (socketFDBytesAvailable). + // + // If we didn't get any data from this process, + // then we may have reached the end of the TCP stream. + // + // Be sure callbacks are enabled so we're notified about a disconnection. + + if ([preBuffer availableBytes] == 0) + { + if ([self usingCFStreamForTLS]) { + // Callbacks never disabled + } + else { + [self resumeReadSource]; + } + } + } + } +} + +- (void)flushSSLBuffers +{ + LogTrace(); + + NSAssert((flags & kSocketSecure), @"Cannot flush ssl buffers on non-secure socket"); + + if ([preBuffer availableBytes] > 0) + { + // Only flush the ssl buffers if the prebuffer is empty. + // This is to avoid growing the prebuffer inifinitely large. + + return; + } + + #if TARGET_OS_IPHONE + + if ([self usingCFStreamForTLS]) + { + if ((flags & kSecureSocketHasBytesAvailable) && CFReadStreamHasBytesAvailable(readStream)) + { + LogVerbose(@"%@ - Flushing ssl buffers into prebuffer...", THIS_METHOD); + + CFIndex defaultBytesToRead = (1024 * 4); + + [preBuffer ensureCapacityForWrite:defaultBytesToRead]; + + uint8_t *buffer = [preBuffer writeBuffer]; + + CFIndex result = CFReadStreamRead(readStream, buffer, defaultBytesToRead); + LogVerbose(@"%@ - CFReadStreamRead(): result = %i", THIS_METHOD, (int)result); + + if (result > 0) + { + [preBuffer didWrite:result]; + } + + flags &= ~kSecureSocketHasBytesAvailable; + } + + return; + } + + #endif + + __block NSUInteger estimatedBytesAvailable = 0; + + dispatch_block_t updateEstimatedBytesAvailable = ^{ + + // Figure out if there is any data available to be read + // + // socketFDBytesAvailable <- Number of encrypted bytes we haven't read from the bsd socket + // [sslPreBuffer availableBytes] <- Number of encrypted bytes we've buffered from bsd socket + // sslInternalBufSize <- Number of decrypted bytes SecureTransport has buffered + // + // We call the variable "estimated" because we don't know how many decrypted bytes we'll get + // from the encrypted bytes in the sslPreBuffer. + // However, we do know this is an upper bound on the estimation. + + estimatedBytesAvailable = self->socketFDBytesAvailable + [self->sslPreBuffer availableBytes]; + + size_t sslInternalBufSize = 0; + SSLGetBufferedReadSize(self->sslContext, &sslInternalBufSize); + + estimatedBytesAvailable += sslInternalBufSize; + }; + + updateEstimatedBytesAvailable(); + + if (estimatedBytesAvailable > 0) + { + LogVerbose(@"%@ - Flushing ssl buffers into prebuffer...", THIS_METHOD); + + BOOL done = NO; + do + { + LogVerbose(@"%@ - estimatedBytesAvailable = %lu", THIS_METHOD, (unsigned long)estimatedBytesAvailable); + + // Make sure there's enough room in the prebuffer + + [preBuffer ensureCapacityForWrite:estimatedBytesAvailable]; + + // Read data into prebuffer + + uint8_t *buffer = [preBuffer writeBuffer]; + size_t bytesRead = 0; + + OSStatus result = SSLRead(sslContext, buffer, (size_t)estimatedBytesAvailable, &bytesRead); + LogVerbose(@"%@ - read from secure socket = %u", THIS_METHOD, (unsigned)bytesRead); + + if (bytesRead > 0) + { + [preBuffer didWrite:bytesRead]; + } + + LogVerbose(@"%@ - prebuffer.length = %zu", THIS_METHOD, [preBuffer availableBytes]); + + if (result != noErr) + { + done = YES; + } + else + { + updateEstimatedBytesAvailable(); + } + + } while (!done && estimatedBytesAvailable > 0); + } +} + +- (void)doReadData +{ + LogTrace(); + + // This method is called on the socketQueue. + // It might be called directly, or via the readSource when data is available to be read. + + if ((currentRead == nil) || (flags & kReadsPaused)) + { + LogVerbose(@"No currentRead or kReadsPaused"); + + // Unable to read at this time + + if (flags & kSocketSecure) + { + // Here's the situation: + // + // We have an established secure connection. + // There may not be a currentRead, but there might be encrypted data sitting around for us. + // When the user does get around to issuing a read, that encrypted data will need to be decrypted. + // + // So why make the user wait? + // We might as well get a head start on decrypting some data now. + // + // The other reason we do this has to do with detecting a socket disconnection. + // The SSL/TLS protocol has it's own disconnection handshake. + // So when a secure socket is closed, a "goodbye" packet comes across the wire. + // We want to make sure we read the "goodbye" packet so we can properly detect the TCP disconnection. + + [self flushSSLBuffers]; + } + + if ([self usingCFStreamForTLS]) + { + // CFReadStream only fires once when there is available data. + // It won't fire again until we've invoked CFReadStreamRead. + } + else + { + // If the readSource is firing, we need to pause it + // or else it will continue to fire over and over again. + // + // If the readSource is not firing, + // we want it to continue monitoring the socket. + + if (socketFDBytesAvailable > 0) + { + [self suspendReadSource]; + } + } + return; + } + + BOOL hasBytesAvailable = NO; + unsigned long estimatedBytesAvailable = 0; + + if ([self usingCFStreamForTLS]) + { + #if TARGET_OS_IPHONE + + // Requested CFStream, rather than SecureTransport, for TLS (via MGCDAsyncSocketUseCFStreamForTLS) + + estimatedBytesAvailable = 0; + if ((flags & kSecureSocketHasBytesAvailable) && CFReadStreamHasBytesAvailable(readStream)) + hasBytesAvailable = YES; + else + hasBytesAvailable = NO; + + #endif + } + else + { + estimatedBytesAvailable = socketFDBytesAvailable; + + if (flags & kSocketSecure) + { + // There are 2 buffers to be aware of here. + // + // We are using SecureTransport, a TLS/SSL security layer which sits atop TCP. + // We issue a read to the SecureTranport API, which in turn issues a read to our SSLReadFunction. + // Our SSLReadFunction then reads from the BSD socket and returns the encrypted data to SecureTransport. + // SecureTransport then decrypts the data, and finally returns the decrypted data back to us. + // + // The first buffer is one we create. + // SecureTransport often requests small amounts of data. + // This has to do with the encypted packets that are coming across the TCP stream. + // But it's non-optimal to do a bunch of small reads from the BSD socket. + // So our SSLReadFunction reads all available data from the socket (optimizing the sys call) + // and may store excess in the sslPreBuffer. + + estimatedBytesAvailable += [sslPreBuffer availableBytes]; + + // The second buffer is within SecureTransport. + // As mentioned earlier, there are encrypted packets coming across the TCP stream. + // SecureTransport needs the entire packet to decrypt it. + // But if the entire packet produces X bytes of decrypted data, + // and we only asked SecureTransport for X/2 bytes of data, + // it must store the extra X/2 bytes of decrypted data for the next read. + // + // The SSLGetBufferedReadSize function will tell us the size of this internal buffer. + // From the documentation: + // + // "This function does not block or cause any low-level read operations to occur." + + size_t sslInternalBufSize = 0; + SSLGetBufferedReadSize(sslContext, &sslInternalBufSize); + + estimatedBytesAvailable += sslInternalBufSize; + } + + hasBytesAvailable = (estimatedBytesAvailable > 0); + } + + if ((hasBytesAvailable == NO) && ([preBuffer availableBytes] == 0)) + { + LogVerbose(@"No data available to read..."); + + // No data available to read. + + if (![self usingCFStreamForTLS]) + { + // Need to wait for readSource to fire and notify us of + // available data in the socket's internal read buffer. + + [self resumeReadSource]; + } + return; + } + + if (flags & kStartingReadTLS) + { + LogVerbose(@"Waiting for SSL/TLS handshake to complete"); + + // The readQueue is waiting for SSL/TLS handshake to complete. + + if (flags & kStartingWriteTLS) + { + if ([self usingSecureTransportForTLS] && lastSSLHandshakeError == errSSLWouldBlock) + { + // We are in the process of a SSL Handshake. + // We were waiting for incoming data which has just arrived. + + [self ssl_continueSSLHandshake]; + } + } + else + { + // We are still waiting for the writeQueue to drain and start the SSL/TLS process. + // We now know data is available to read. + + if (![self usingCFStreamForTLS]) + { + // Suspend the read source or else it will continue to fire nonstop. + + [self suspendReadSource]; + } + } + + return; + } + + BOOL done = NO; // Completed read operation + NSError *error = nil; // Error occurred + + NSUInteger totalBytesReadForCurrentRead = 0; + + // + // STEP 1 - READ FROM PREBUFFER + // + + if ([preBuffer availableBytes] > 0) + { + // There are 3 types of read packets: + // + // 1) Read all available data. + // 2) Read a specific length of data. + // 3) Read up to a particular terminator. + + NSUInteger bytesToCopy; + + if (currentRead->term != nil) + { + // Read type #3 - read up to a terminator + + bytesToCopy = [currentRead readLengthForTermWithPreBuffer:preBuffer found:&done]; + } + else + { + // Read type #1 or #2 + + bytesToCopy = [currentRead readLengthForNonTermWithHint:[preBuffer availableBytes]]; + } + + // Make sure we have enough room in the buffer for our read. + + [currentRead ensureCapacityForAdditionalDataOfLength:bytesToCopy]; + + // Copy bytes from prebuffer into packet buffer + + uint8_t *buffer = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + + currentRead->bytesDone; + + memcpy(buffer, [preBuffer readBuffer], bytesToCopy); + + // Remove the copied bytes from the preBuffer + [preBuffer didRead:bytesToCopy]; + + LogVerbose(@"copied(%lu) preBufferLength(%zu)", (unsigned long)bytesToCopy, [preBuffer availableBytes]); + + // Update totals + + currentRead->bytesDone += bytesToCopy; + totalBytesReadForCurrentRead += bytesToCopy; + + // Check to see if the read operation is done + + if (currentRead->readLength > 0) + { + // Read type #2 - read a specific length of data + + done = (currentRead->bytesDone == currentRead->readLength); + } + else if (currentRead->term != nil) + { + // Read type #3 - read up to a terminator + + // Our 'done' variable was updated via the readLengthForTermWithPreBuffer:found: method + + if (!done && currentRead->maxLength > 0) + { + // We're not done and there's a set maxLength. + // Have we reached that maxLength yet? + + if (currentRead->bytesDone >= currentRead->maxLength) + { + error = [self readMaxedOutError]; + } + } + } + else + { + // Read type #1 - read all available data + // + // We're done as soon as + // - we've read all available data (in prebuffer and socket) + // - we've read the maxLength of read packet. + + done = ((currentRead->maxLength > 0) && (currentRead->bytesDone == currentRead->maxLength)); + } + + } + + // + // STEP 2 - READ FROM SOCKET + // + + BOOL socketEOF = (flags & kSocketHasReadEOF) ? YES : NO; // Nothing more to read via socket (end of file) + BOOL waiting = !done && !error && !socketEOF && !hasBytesAvailable; // Ran out of data, waiting for more + + if (!done && !error && !socketEOF && hasBytesAvailable) + { + NSAssert(([preBuffer availableBytes] == 0), @"Invalid logic"); + + BOOL readIntoPreBuffer = NO; + uint8_t *buffer = NULL; + size_t bytesRead = 0; + + if (flags & kSocketSecure) + { + if ([self usingCFStreamForTLS]) + { + #if TARGET_OS_IPHONE + + // Using CFStream, rather than SecureTransport, for TLS + + NSUInteger defaultReadLength = (1024 * 32); + + NSUInteger bytesToRead = [currentRead optimalReadLengthWithDefault:defaultReadLength + shouldPreBuffer:&readIntoPreBuffer]; + + // Make sure we have enough room in the buffer for our read. + // + // We are either reading directly into the currentRead->buffer, + // or we're reading into the temporary preBuffer. + + if (readIntoPreBuffer) + { + [preBuffer ensureCapacityForWrite:bytesToRead]; + + buffer = [preBuffer writeBuffer]; + } + else + { + [currentRead ensureCapacityForAdditionalDataOfLength:bytesToRead]; + + buffer = (uint8_t *)[currentRead->buffer mutableBytes] + + currentRead->startOffset + + currentRead->bytesDone; + } + + // Read data into buffer + + CFIndex result = CFReadStreamRead(readStream, buffer, (CFIndex)bytesToRead); + LogVerbose(@"CFReadStreamRead(): result = %i", (int)result); + + if (result < 0) + { + error = (__bridge_transfer NSError *)CFReadStreamCopyError(readStream); + } + else if (result == 0) + { + socketEOF = YES; + } + else + { + waiting = YES; + bytesRead = (size_t)result; + } + + // We only know how many decrypted bytes were read. + // The actual number of bytes read was likely more due to the overhead of the encryption. + // So we reset our flag, and rely on the next callback to alert us of more data. + flags &= ~kSecureSocketHasBytesAvailable; + + #endif + } + else + { + // Using SecureTransport for TLS + // + // We know: + // - how many bytes are available on the socket + // - how many encrypted bytes are sitting in the sslPreBuffer + // - how many decypted bytes are sitting in the sslContext + // + // But we do NOT know: + // - how many encypted bytes are sitting in the sslContext + // + // So we play the regular game of using an upper bound instead. + + NSUInteger defaultReadLength = (1024 * 32); + + if (defaultReadLength < estimatedBytesAvailable) { + defaultReadLength = estimatedBytesAvailable + (1024 * 16); + } + + NSUInteger bytesToRead = [currentRead optimalReadLengthWithDefault:defaultReadLength + shouldPreBuffer:&readIntoPreBuffer]; + + if (bytesToRead > SIZE_MAX) { // NSUInteger may be bigger than size_t + bytesToRead = SIZE_MAX; + } + + // Make sure we have enough room in the buffer for our read. + // + // We are either reading directly into the currentRead->buffer, + // or we're reading into the temporary preBuffer. + + if (readIntoPreBuffer) + { + [preBuffer ensureCapacityForWrite:bytesToRead]; + + buffer = [preBuffer writeBuffer]; + } + else + { + [currentRead ensureCapacityForAdditionalDataOfLength:bytesToRead]; + + buffer = (uint8_t *)[currentRead->buffer mutableBytes] + + currentRead->startOffset + + currentRead->bytesDone; + } + + // The documentation from Apple states: + // + // "a read operation might return errSSLWouldBlock, + // indicating that less data than requested was actually transferred" + // + // However, starting around 10.7, the function will sometimes return noErr, + // even if it didn't read as much data as requested. So we need to watch out for that. + + OSStatus result; + do + { + void *loop_buffer = buffer + bytesRead; + size_t loop_bytesToRead = (size_t)bytesToRead - bytesRead; + size_t loop_bytesRead = 0; + + result = SSLRead(sslContext, loop_buffer, loop_bytesToRead, &loop_bytesRead); + LogVerbose(@"read from secure socket = %u", (unsigned)loop_bytesRead); + + bytesRead += loop_bytesRead; + + } while ((result == noErr) && (bytesRead < bytesToRead)); + + + if (result != noErr) + { + if (result == errSSLWouldBlock) + waiting = YES; + else + { + if (result == errSSLClosedGraceful || result == errSSLClosedAbort) + { + // We've reached the end of the stream. + // Handle this the same way we would an EOF from the socket. + socketEOF = YES; + sslErrCode = result; + } + else + { + error = [self sslError:result]; + } + } + // It's possible that bytesRead > 0, even if the result was errSSLWouldBlock. + // This happens when the SSLRead function is able to read some data, + // but not the entire amount we requested. + + if (bytesRead <= 0) + { + bytesRead = 0; + } + } + + // Do not modify socketFDBytesAvailable. + // It will be updated via the SSLReadFunction(). + } + } + else + { + // Normal socket operation + + NSUInteger bytesToRead; + + // There are 3 types of read packets: + // + // 1) Read all available data. + // 2) Read a specific length of data. + // 3) Read up to a particular terminator. + + if (currentRead->term != nil) + { + // Read type #3 - read up to a terminator + + bytesToRead = [currentRead readLengthForTermWithHint:estimatedBytesAvailable + shouldPreBuffer:&readIntoPreBuffer]; + } + else + { + // Read type #1 or #2 + + bytesToRead = [currentRead readLengthForNonTermWithHint:estimatedBytesAvailable]; + } + + if (bytesToRead > SIZE_MAX) { // NSUInteger may be bigger than size_t (read param 3) + bytesToRead = SIZE_MAX; + } + + // Make sure we have enough room in the buffer for our read. + // + // We are either reading directly into the currentRead->buffer, + // or we're reading into the temporary preBuffer. + + if (readIntoPreBuffer) + { + [preBuffer ensureCapacityForWrite:bytesToRead]; + + buffer = [preBuffer writeBuffer]; + } + else + { + [currentRead ensureCapacityForAdditionalDataOfLength:bytesToRead]; + + buffer = (uint8_t *)[currentRead->buffer mutableBytes] + + currentRead->startOffset + + currentRead->bytesDone; + } + + // Read data into buffer + + int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; + + ssize_t result = read(socketFD, buffer, (size_t)bytesToRead); + LogVerbose(@"read from socket = %i", (int)result); + + if (result < 0) + { + if (errno == EWOULDBLOCK) + waiting = YES; + else + error = [self errorWithErrno:errno reason:@"Error in read() function"]; + + socketFDBytesAvailable = 0; + } + else if (result == 0) + { + socketEOF = YES; + socketFDBytesAvailable = 0; + } + else + { + bytesRead = result; + + if (bytesRead < bytesToRead) + { + // The read returned less data than requested. + // This means socketFDBytesAvailable was a bit off due to timing, + // because we read from the socket right when the readSource event was firing. + socketFDBytesAvailable = 0; + } + else + { + if (socketFDBytesAvailable <= bytesRead) + socketFDBytesAvailable = 0; + else + socketFDBytesAvailable -= bytesRead; + } + + if (socketFDBytesAvailable == 0) + { + waiting = YES; + } + } + } + + if (bytesRead > 0) + { + // Check to see if the read operation is done + + if (currentRead->readLength > 0) + { + // Read type #2 - read a specific length of data + // + // Note: We should never be using a prebuffer when we're reading a specific length of data. + + NSAssert(readIntoPreBuffer == NO, @"Invalid logic"); + + currentRead->bytesDone += bytesRead; + totalBytesReadForCurrentRead += bytesRead; + + done = (currentRead->bytesDone == currentRead->readLength); + } + else if (currentRead->term != nil) + { + // Read type #3 - read up to a terminator + + if (readIntoPreBuffer) + { + // We just read a big chunk of data into the preBuffer + + [preBuffer didWrite:bytesRead]; + LogVerbose(@"read data into preBuffer - preBuffer.length = %zu", [preBuffer availableBytes]); + + // Search for the terminating sequence + + NSUInteger bytesToCopy = [currentRead readLengthForTermWithPreBuffer:preBuffer found:&done]; + LogVerbose(@"copying %lu bytes from preBuffer", (unsigned long)bytesToCopy); + + // Ensure there's room on the read packet's buffer + + [currentRead ensureCapacityForAdditionalDataOfLength:bytesToCopy]; + + // Copy bytes from prebuffer into read buffer + + uint8_t *readBuf = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + + currentRead->bytesDone; + + memcpy(readBuf, [preBuffer readBuffer], bytesToCopy); + + // Remove the copied bytes from the prebuffer + [preBuffer didRead:bytesToCopy]; + LogVerbose(@"preBuffer.length = %zu", [preBuffer availableBytes]); + + // Update totals + currentRead->bytesDone += bytesToCopy; + totalBytesReadForCurrentRead += bytesToCopy; + + // Our 'done' variable was updated via the readLengthForTermWithPreBuffer:found: method above + } + else + { + // We just read a big chunk of data directly into the packet's buffer. + // We need to move any overflow into the prebuffer. + + NSInteger overflow = [currentRead searchForTermAfterPreBuffering:bytesRead]; + + if (overflow == 0) + { + // Perfect match! + // Every byte we read stays in the read buffer, + // and the last byte we read was the last byte of the term. + + currentRead->bytesDone += bytesRead; + totalBytesReadForCurrentRead += bytesRead; + done = YES; + } + else if (overflow > 0) + { + // The term was found within the data that we read, + // and there are extra bytes that extend past the end of the term. + // We need to move these excess bytes out of the read packet and into the prebuffer. + + NSInteger underflow = bytesRead - overflow; + + // Copy excess data into preBuffer + + LogVerbose(@"copying %ld overflow bytes into preBuffer", (long)overflow); + [preBuffer ensureCapacityForWrite:overflow]; + + uint8_t *overflowBuffer = buffer + underflow; + memcpy([preBuffer writeBuffer], overflowBuffer, overflow); + + [preBuffer didWrite:overflow]; + LogVerbose(@"preBuffer.length = %zu", [preBuffer availableBytes]); + + // Note: The completeCurrentRead method will trim the buffer for us. + + currentRead->bytesDone += underflow; + totalBytesReadForCurrentRead += underflow; + done = YES; + } + else + { + // The term was not found within the data that we read. + + currentRead->bytesDone += bytesRead; + totalBytesReadForCurrentRead += bytesRead; + done = NO; + } + } + + if (!done && currentRead->maxLength > 0) + { + // We're not done and there's a set maxLength. + // Have we reached that maxLength yet? + + if (currentRead->bytesDone >= currentRead->maxLength) + { + error = [self readMaxedOutError]; + } + } + } + else + { + // Read type #1 - read all available data + + if (readIntoPreBuffer) + { + // We just read a chunk of data into the preBuffer + + [preBuffer didWrite:bytesRead]; + + // Now copy the data into the read packet. + // + // Recall that we didn't read directly into the packet's buffer to avoid + // over-allocating memory since we had no clue how much data was available to be read. + // + // Ensure there's room on the read packet's buffer + + [currentRead ensureCapacityForAdditionalDataOfLength:bytesRead]; + + // Copy bytes from prebuffer into read buffer + + uint8_t *readBuf = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset + + currentRead->bytesDone; + + memcpy(readBuf, [preBuffer readBuffer], bytesRead); + + // Remove the copied bytes from the prebuffer + [preBuffer didRead:bytesRead]; + + // Update totals + currentRead->bytesDone += bytesRead; + totalBytesReadForCurrentRead += bytesRead; + } + else + { + currentRead->bytesDone += bytesRead; + totalBytesReadForCurrentRead += bytesRead; + } + + done = YES; + } + + } // if (bytesRead > 0) + + } // if (!done && !error && !socketEOF && hasBytesAvailable) + + + if (!done && currentRead->readLength == 0 && currentRead->term == nil) + { + // Read type #1 - read all available data + // + // We might arrive here if we read data from the prebuffer but not from the socket. + + done = (totalBytesReadForCurrentRead > 0); + } + + // Check to see if we're done, or if we've made progress + + if (done) + { + [self completeCurrentRead]; + + if (!error && (!socketEOF || [preBuffer availableBytes] > 0)) + { + [self maybeDequeueRead]; + } + } + else if (totalBytesReadForCurrentRead > 0) + { + // We're not done read type #2 or #3 yet, but we have read in some bytes + // + // We ensure that `waiting` is set in order to resume the readSource (if it is suspended). It is + // possible to reach this point and `waiting` not be set, if the current read's length is + // sufficiently large. In that case, we may have read to some upperbound successfully, but + // that upperbound could be smaller than the desired length. + waiting = YES; + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didReadPartialDataOfLength:tag:)]) + { + long theReadTag = currentRead->tag; + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socket:self didReadPartialDataOfLength:totalBytesReadForCurrentRead tag:theReadTag]; + }}); + } + } + + // Check for errors + + if (error) + { + [self closeWithError:error]; + } + else if (socketEOF) + { + [self doReadEOF]; + } + else if (waiting) + { + if (![self usingCFStreamForTLS]) + { + // Monitor the socket for readability (if we're not already doing so) + [self resumeReadSource]; + } + } + + // Do not add any code here without first adding return statements in the error cases above. +} + +- (void)doReadEOF +{ + LogTrace(); + + // This method may be called more than once. + // If the EOF is read while there is still data in the preBuffer, + // then this method may be called continually after invocations of doReadData to see if it's time to disconnect. + + flags |= kSocketHasReadEOF; + + if (flags & kSocketSecure) + { + // If the SSL layer has any buffered data, flush it into the preBuffer now. + + [self flushSSLBuffers]; + } + + BOOL shouldDisconnect = NO; + NSError *error = nil; + + if ((flags & kStartingReadTLS) || (flags & kStartingWriteTLS)) + { + // We received an EOF during or prior to startTLS. + // The SSL/TLS handshake is now impossible, so this is an unrecoverable situation. + + shouldDisconnect = YES; + + if ([self usingSecureTransportForTLS]) + { + error = [self sslError:errSSLClosedAbort]; + } + } + else if (flags & kReadStreamClosed) + { + // The preBuffer has already been drained. + // The config allows half-duplex connections. + // We've previously checked the socket, and it appeared writeable. + // So we marked the read stream as closed and notified the delegate. + // + // As per the half-duplex contract, the socket will be closed when a write fails, + // or when the socket is manually closed. + + shouldDisconnect = NO; + } + else if ([preBuffer availableBytes] > 0) + { + LogVerbose(@"Socket reached EOF, but there is still data available in prebuffer"); + + // Although we won't be able to read any more data from the socket, + // there is existing data that has been prebuffered that we can read. + + shouldDisconnect = NO; + } + else if (config & kAllowHalfDuplexConnection) + { + // We just received an EOF (end of file) from the socket's read stream. + // This means the remote end of the socket (the peer we're connected to) + // has explicitly stated that it will not be sending us any more data. + // + // Query the socket to see if it is still writeable. (Perhaps the peer will continue reading data from us) + + int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; + + struct pollfd pfd[1]; + pfd[0].fd = socketFD; + pfd[0].events = POLLOUT; + pfd[0].revents = 0; + + poll(pfd, 1, 0); + + if (pfd[0].revents & POLLOUT) + { + // Socket appears to still be writeable + + shouldDisconnect = NO; + flags |= kReadStreamClosed; + + // Notify the delegate that we're going half-duplex + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socketDidCloseReadStream:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socketDidCloseReadStream:self]; + }}); + } + } + else + { + shouldDisconnect = YES; + } + } + else + { + shouldDisconnect = YES; + } + + + if (shouldDisconnect) + { + if (error == nil) + { + if ([self usingSecureTransportForTLS]) + { + if (sslErrCode != noErr && sslErrCode != errSSLClosedGraceful) + { + error = [self sslError:sslErrCode]; + } + else + { + error = [self connectionClosedError]; + } + } + else + { + error = [self connectionClosedError]; + } + } + [self closeWithError:error]; + } + else + { + if (![self usingCFStreamForTLS]) + { + // Suspend the read source (if needed) + + [self suspendReadSource]; + } + } +} + +- (void)completeCurrentRead +{ + LogTrace(); + + NSAssert(currentRead, @"Trying to complete current read when there is no current read."); + + + NSData *result = nil; + + if (currentRead->bufferOwner) + { + // We created the buffer on behalf of the user. + // Trim our buffer to be the proper size. + [currentRead->buffer setLength:currentRead->bytesDone]; + + result = currentRead->buffer; + } + else + { + // We did NOT create the buffer. + // The buffer is owned by the caller. + // Only trim the buffer if we had to increase its size. + + if ([currentRead->buffer length] > currentRead->originalBufferLength) + { + NSUInteger readSize = currentRead->startOffset + currentRead->bytesDone; + NSUInteger origSize = currentRead->originalBufferLength; + + NSUInteger buffSize = MAX(readSize, origSize); + + [currentRead->buffer setLength:buffSize]; + } + + uint8_t *buffer = (uint8_t *)[currentRead->buffer mutableBytes] + currentRead->startOffset; + + result = [NSData dataWithBytesNoCopy:buffer length:currentRead->bytesDone freeWhenDone:NO]; + } + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didReadData:withTag:)]) + { + MGCDAsyncReadPacket *theRead = currentRead; // Ensure currentRead retained since result may not own buffer + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socket:self didReadData:result withTag:theRead->tag]; + }}); + } + + [self endCurrentRead]; +} + +- (void)endCurrentRead +{ + if (readTimer) + { + dispatch_source_cancel(readTimer); + readTimer = NULL; + } + + currentRead = nil; +} + +- (void)setupReadTimerWithTimeout:(NSTimeInterval)timeout +{ + if (timeout >= 0.0) + { + readTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, socketQueue); + + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_source_set_event_handler(readTimer, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + [strongSelf doReadTimeout]; + + #pragma clang diagnostic pop + }}); + + #if !OS_OBJECT_USE_OBJC + dispatch_source_t theReadTimer = readTimer; + dispatch_source_set_cancel_handler(readTimer, ^{ + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + LogVerbose(@"dispatch_release(readTimer)"); + dispatch_release(theReadTimer); + + #pragma clang diagnostic pop + }); + #endif + + dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)); + + dispatch_source_set_timer(readTimer, tt, DISPATCH_TIME_FOREVER, 0); + dispatch_resume(readTimer); + } +} + +- (void)doReadTimeout +{ + // This is a little bit tricky. + // Ideally we'd like to synchronously query the delegate about a timeout extension. + // But if we do so synchronously we risk a possible deadlock. + // So instead we have to do so asynchronously, and callback to ourselves from within the delegate block. + + flags |= kReadsPaused; + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:shouldTimeoutReadWithTag:elapsed:bytesDone:)]) + { + MGCDAsyncReadPacket *theRead = currentRead; + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + NSTimeInterval timeoutExtension = 0.0; + + timeoutExtension = [theDelegate socket:self shouldTimeoutReadWithTag:theRead->tag + elapsed:theRead->timeout + bytesDone:theRead->bytesDone]; + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + [self doReadTimeoutWithExtension:timeoutExtension]; + }}); + }}); + } + else + { + [self doReadTimeoutWithExtension:0.0]; + } +} + +- (void)doReadTimeoutWithExtension:(NSTimeInterval)timeoutExtension +{ + if (currentRead) + { + if (timeoutExtension > 0.0) + { + currentRead->timeout += timeoutExtension; + + // Reschedule the timer + dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeoutExtension * NSEC_PER_SEC)); + dispatch_source_set_timer(readTimer, tt, DISPATCH_TIME_FOREVER, 0); + + // Unpause reads, and continue + flags &= ~kReadsPaused; + [self doReadData]; + } + else + { + LogVerbose(@"ReadTimeout"); + + [self closeWithError:[self readTimeoutError]]; + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Writing +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + if ([data length] == 0) return; + + MGCDAsyncWritePacket *packet = [[MGCDAsyncWritePacket alloc] initWithData:data timeout:timeout tag:tag]; + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + LogTrace(); + + if ((self->flags & kSocketStarted) && !(self->flags & kForbidReadsWrites)) + { + [self->writeQueue addObject:packet]; + [self maybeDequeueWrite]; + } + }}); + + // Do not rely on the block being run in order to release the packet, + // as the queue might get released without the block completing. +} + +- (float)progressOfWriteReturningTag:(long *)tagPtr bytesDone:(NSUInteger *)donePtr total:(NSUInteger *)totalPtr +{ + __block float result = 0.0F; + + dispatch_block_t block = ^{ + + if (!self->currentWrite || ![self->currentWrite isKindOfClass:[MGCDAsyncWritePacket class]]) + { + // We're not writing anything right now. + + if (tagPtr != NULL) *tagPtr = 0; + if (donePtr != NULL) *donePtr = 0; + if (totalPtr != NULL) *totalPtr = 0; + + result = NAN; + } + else + { + NSUInteger done = self->currentWrite->bytesDone; + NSUInteger total = [self->currentWrite->buffer length]; + + if (tagPtr != NULL) *tagPtr = self->currentWrite->tag; + if (donePtr != NULL) *donePtr = done; + if (totalPtr != NULL) *totalPtr = total; + + result = (float)done / (float)total; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +/** + * Conditionally starts a new write. + * + * It is called when: + * - a user requests a write + * - after a write request has finished (to handle the next request) + * - immediately after the socket opens to handle any pending requests + * + * This method also handles auto-disconnect post read/write completion. +**/ +- (void)maybeDequeueWrite +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + + // If we're not currently processing a write AND we have an available write stream + if ((currentWrite == nil) && (flags & kConnected)) + { + if ([writeQueue count] > 0) + { + // Dequeue the next object in the write queue + currentWrite = [writeQueue objectAtIndex:0]; + [writeQueue removeObjectAtIndex:0]; + + + if ([currentWrite isKindOfClass:[MGCDAsyncSpecialPacket class]]) + { + LogVerbose(@"Dequeued MGCDAsyncSpecialPacket"); + + // Attempt to start TLS + flags |= kStartingWriteTLS; + + // This method won't do anything unless both kStartingReadTLS and kStartingWriteTLS are set + [self maybeStartTLS]; + } + else + { + LogVerbose(@"Dequeued MGCDAsyncWritePacket"); + + // Setup write timer (if needed) + [self setupWriteTimerWithTimeout:currentWrite->timeout]; + + // Immediately write, if possible + [self doWriteData]; + } + } + else if (flags & kDisconnectAfterWrites) + { + if (flags & kDisconnectAfterReads) + { + if (([readQueue count] == 0) && (currentRead == nil)) + { + [self closeWithError:nil]; + } + } + else + { + [self closeWithError:nil]; + } + } + } +} + +- (void)doWriteData +{ + LogTrace(); + + // This method is called by the writeSource via the socketQueue + + if ((currentWrite == nil) || (flags & kWritesPaused)) + { + LogVerbose(@"No currentWrite or kWritesPaused"); + + // Unable to write at this time + + if ([self usingCFStreamForTLS]) + { + // CFWriteStream only fires once when there is available data. + // It won't fire again until we've invoked CFWriteStreamWrite. + } + else + { + // If the writeSource is firing, we need to pause it + // or else it will continue to fire over and over again. + + if (flags & kSocketCanAcceptBytes) + { + [self suspendWriteSource]; + } + } + return; + } + + if (!(flags & kSocketCanAcceptBytes)) + { + LogVerbose(@"No space available to write..."); + + // No space available to write. + + if (![self usingCFStreamForTLS]) + { + // Need to wait for writeSource to fire and notify us of + // available space in the socket's internal write buffer. + + [self resumeWriteSource]; + } + return; + } + + if (flags & kStartingWriteTLS) + { + LogVerbose(@"Waiting for SSL/TLS handshake to complete"); + + // The writeQueue is waiting for SSL/TLS handshake to complete. + + if (flags & kStartingReadTLS) + { + if ([self usingSecureTransportForTLS] && lastSSLHandshakeError == errSSLWouldBlock) + { + // We are in the process of a SSL Handshake. + // We were waiting for available space in the socket's internal OS buffer to continue writing. + + [self ssl_continueSSLHandshake]; + } + } + else + { + // We are still waiting for the readQueue to drain and start the SSL/TLS process. + // We now know we can write to the socket. + + if (![self usingCFStreamForTLS]) + { + // Suspend the write source or else it will continue to fire nonstop. + + [self suspendWriteSource]; + } + } + + return; + } + + // Note: This method is not called if currentWrite is a MGCDAsyncSpecialPacket (startTLS packet) + + BOOL waiting = NO; + NSError *error = nil; + size_t bytesWritten = 0; + + if (flags & kSocketSecure) + { + if ([self usingCFStreamForTLS]) + { + #if TARGET_OS_IPHONE + + // + // Writing data using CFStream (over internal TLS) + // + + const uint8_t *buffer = (const uint8_t *)[currentWrite->buffer bytes] + currentWrite->bytesDone; + + NSUInteger bytesToWrite = [currentWrite->buffer length] - currentWrite->bytesDone; + + if (bytesToWrite > SIZE_MAX) // NSUInteger may be bigger than size_t (write param 3) + { + bytesToWrite = SIZE_MAX; + } + + CFIndex result = CFWriteStreamWrite(writeStream, buffer, (CFIndex)bytesToWrite); + LogVerbose(@"CFWriteStreamWrite(%lu) = %li", (unsigned long)bytesToWrite, result); + + if (result < 0) + { + error = (__bridge_transfer NSError *)CFWriteStreamCopyError(writeStream); + } + else + { + bytesWritten = (size_t)result; + + // We always set waiting to true in this scenario. + // CFStream may have altered our underlying socket to non-blocking. + // Thus if we attempt to write without a callback, we may end up blocking our queue. + waiting = YES; + } + + #endif + } + else + { + // We're going to use the SSLWrite function. + // + // OSStatus SSLWrite(SSLContextRef context, const void *data, size_t dataLength, size_t *processed) + // + // Parameters: + // context - An SSL session context reference. + // data - A pointer to the buffer of data to write. + // dataLength - The amount, in bytes, of data to write. + // processed - On return, the length, in bytes, of the data actually written. + // + // It sounds pretty straight-forward, + // but there are a few caveats you should be aware of. + // + // The SSLWrite method operates in a non-obvious (and rather annoying) manner. + // According to the documentation: + // + // Because you may configure the underlying connection to operate in a non-blocking manner, + // a write operation might return errSSLWouldBlock, indicating that less data than requested + // was actually transferred. In this case, you should repeat the call to SSLWrite until some + // other result is returned. + // + // This sounds perfect, but when our SSLWriteFunction returns errSSLWouldBlock, + // then the SSLWrite method returns (with the proper errSSLWouldBlock return value), + // but it sets processed to dataLength !! + // + // In other words, if the SSLWrite function doesn't completely write all the data we tell it to, + // then it doesn't tell us how many bytes were actually written. So, for example, if we tell it to + // write 256 bytes then it might actually write 128 bytes, but then report 0 bytes written. + // + // You might be wondering: + // If the SSLWrite function doesn't tell us how many bytes were written, + // then how in the world are we supposed to update our parameters (buffer & bytesToWrite) + // for the next time we invoke SSLWrite? + // + // The answer is that SSLWrite cached all the data we told it to write, + // and it will push out that data next time we call SSLWrite. + // If we call SSLWrite with new data, it will push out the cached data first, and then the new data. + // If we call SSLWrite with empty data, then it will simply push out the cached data. + // + // For this purpose we're going to break large writes into a series of smaller writes. + // This allows us to report progress back to the delegate. + + OSStatus result; + + BOOL hasCachedDataToWrite = (sslWriteCachedLength > 0); + BOOL hasNewDataToWrite = YES; + + if (hasCachedDataToWrite) + { + size_t processed = 0; + + result = SSLWrite(sslContext, NULL, 0, &processed); + + if (result == noErr) + { + bytesWritten = sslWriteCachedLength; + sslWriteCachedLength = 0; + + if ([currentWrite->buffer length] == (currentWrite->bytesDone + bytesWritten)) + { + // We've written all data for the current write. + hasNewDataToWrite = NO; + } + } + else + { + if (result == errSSLWouldBlock) + { + waiting = YES; + } + else + { + error = [self sslError:result]; + } + + // Can't write any new data since we were unable to write the cached data. + hasNewDataToWrite = NO; + } + } + + if (hasNewDataToWrite) + { + const uint8_t *buffer = (const uint8_t *)[currentWrite->buffer bytes] + + currentWrite->bytesDone + + bytesWritten; + + NSUInteger bytesToWrite = [currentWrite->buffer length] - currentWrite->bytesDone - bytesWritten; + + if (bytesToWrite > SIZE_MAX) // NSUInteger may be bigger than size_t (write param 3) + { + bytesToWrite = SIZE_MAX; + } + + size_t bytesRemaining = bytesToWrite; + + BOOL keepLooping = YES; + while (keepLooping) + { + const size_t sslMaxBytesToWrite = 32768; + size_t sslBytesToWrite = MIN(bytesRemaining, sslMaxBytesToWrite); + size_t sslBytesWritten = 0; + + result = SSLWrite(sslContext, buffer, sslBytesToWrite, &sslBytesWritten); + + if (result == noErr) + { + buffer += sslBytesWritten; + bytesWritten += sslBytesWritten; + bytesRemaining -= sslBytesWritten; + + keepLooping = (bytesRemaining > 0); + } + else + { + if (result == errSSLWouldBlock) + { + waiting = YES; + sslWriteCachedLength = sslBytesToWrite; + } + else + { + error = [self sslError:result]; + } + + keepLooping = NO; + } + + } // while (keepLooping) + + } // if (hasNewDataToWrite) + } + } + else + { + // + // Writing data directly over raw socket + // + + int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; + + const uint8_t *buffer = (const uint8_t *)[currentWrite->buffer bytes] + currentWrite->bytesDone; + + NSUInteger bytesToWrite = [currentWrite->buffer length] - currentWrite->bytesDone; + + if (bytesToWrite > SIZE_MAX) // NSUInteger may be bigger than size_t (write param 3) + { + bytesToWrite = SIZE_MAX; + } + + ssize_t result = write(socketFD, buffer, (size_t)bytesToWrite); + LogVerbose(@"wrote to socket = %zd", result); + + // Check results + if (result < 0) + { + if (errno == EWOULDBLOCK) + { + waiting = YES; + } + else + { + error = [self errorWithErrno:errno reason:@"Error in write() function"]; + } + } + else + { + bytesWritten = result; + } + } + + // We're done with our writing. + // If we explictly ran into a situation where the socket told us there was no room in the buffer, + // then we immediately resume listening for notifications. + // + // We must do this before we dequeue another write, + // as that may in turn invoke this method again. + // + // Note that if CFStream is involved, it may have maliciously put our socket in blocking mode. + + if (waiting) + { + flags &= ~kSocketCanAcceptBytes; + + if (![self usingCFStreamForTLS]) + { + [self resumeWriteSource]; + } + } + + // Check our results + + BOOL done = NO; + + if (bytesWritten > 0) + { + // Update total amount read for the current write + currentWrite->bytesDone += bytesWritten; + LogVerbose(@"currentWrite->bytesDone = %lu", (unsigned long)currentWrite->bytesDone); + + // Is packet done? + done = (currentWrite->bytesDone == [currentWrite->buffer length]); + } + + if (done) + { + [self completeCurrentWrite]; + + if (!error) + { + dispatch_async(socketQueue, ^{ @autoreleasepool{ + + [self maybeDequeueWrite]; + }}); + } + } + else + { + // We were unable to finish writing the data, + // so we're waiting for another callback to notify us of available space in the lower-level output buffer. + + if (!waiting && !error) + { + // This would be the case if our write was able to accept some data, but not all of it. + + flags &= ~kSocketCanAcceptBytes; + + if (![self usingCFStreamForTLS]) + { + [self resumeWriteSource]; + } + } + + if (bytesWritten > 0) + { + // We're not done with the entire write, but we have written some bytes + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didWritePartialDataOfLength:tag:)]) + { + long theWriteTag = currentWrite->tag; + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socket:self didWritePartialDataOfLength:bytesWritten tag:theWriteTag]; + }}); + } + } + } + + // Check for errors + + if (error) + { + [self closeWithError:[self errorWithErrno:errno reason:@"Error in write() function"]]; + } + + // Do not add any code here without first adding a return statement in the error case above. +} + +- (void)completeCurrentWrite +{ + LogTrace(); + + NSAssert(currentWrite, @"Trying to complete current write when there is no current write."); + + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didWriteDataWithTag:)]) + { + long theWriteTag = currentWrite->tag; + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socket:self didWriteDataWithTag:theWriteTag]; + }}); + } + + [self endCurrentWrite]; +} + +- (void)endCurrentWrite +{ + if (writeTimer) + { + dispatch_source_cancel(writeTimer); + writeTimer = NULL; + } + + currentWrite = nil; +} + +- (void)setupWriteTimerWithTimeout:(NSTimeInterval)timeout +{ + if (timeout >= 0.0) + { + writeTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, socketQueue); + + __weak MGCDAsyncSocket *weakSelf = self; + + dispatch_source_set_event_handler(writeTimer, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf == nil) return_from_block; + + [strongSelf doWriteTimeout]; + + #pragma clang diagnostic pop + }}); + + #if !OS_OBJECT_USE_OBJC + dispatch_source_t theWriteTimer = writeTimer; + dispatch_source_set_cancel_handler(writeTimer, ^{ + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + LogVerbose(@"dispatch_release(writeTimer)"); + dispatch_release(theWriteTimer); + + #pragma clang diagnostic pop + }); + #endif + + dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)); + + dispatch_source_set_timer(writeTimer, tt, DISPATCH_TIME_FOREVER, 0); + dispatch_resume(writeTimer); + } +} + +- (void)doWriteTimeout +{ + // This is a little bit tricky. + // Ideally we'd like to synchronously query the delegate about a timeout extension. + // But if we do so synchronously we risk a possible deadlock. + // So instead we have to do so asynchronously, and callback to ourselves from within the delegate block. + + flags |= kWritesPaused; + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:shouldTimeoutWriteWithTag:elapsed:bytesDone:)]) + { + MGCDAsyncWritePacket *theWrite = currentWrite; + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + NSTimeInterval timeoutExtension = 0.0; + + timeoutExtension = [theDelegate socket:self shouldTimeoutWriteWithTag:theWrite->tag + elapsed:theWrite->timeout + bytesDone:theWrite->bytesDone]; + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + [self doWriteTimeoutWithExtension:timeoutExtension]; + }}); + }}); + } + else + { + [self doWriteTimeoutWithExtension:0.0]; + } +} + +- (void)doWriteTimeoutWithExtension:(NSTimeInterval)timeoutExtension +{ + if (currentWrite) + { + if (timeoutExtension > 0.0) + { + currentWrite->timeout += timeoutExtension; + + // Reschedule the timer + dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeoutExtension * NSEC_PER_SEC)); + dispatch_source_set_timer(writeTimer, tt, DISPATCH_TIME_FOREVER, 0); + + // Unpause writes, and continue + flags &= ~kWritesPaused; + [self doWriteData]; + } + else + { + LogVerbose(@"WriteTimeout"); + + [self closeWithError:[self writeTimeoutError]]; + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Security +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)startTLS:(NSDictionary *)tlsSettings +{ + LogTrace(); + + if (tlsSettings == nil) + { + // Passing nil/NULL to CFReadStreamSetProperty will appear to work the same as passing an empty dictionary, + // but causes problems if we later try to fetch the remote host's certificate. + // + // To be exact, it causes the following to return NULL instead of the normal result: + // CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates) + // + // So we use an empty dictionary instead, which works perfectly. + + tlsSettings = [NSDictionary dictionary]; + } + + MGCDAsyncSpecialPacket *packet = [[MGCDAsyncSpecialPacket alloc] initWithTLSSettings:tlsSettings]; + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + if ((self->flags & kSocketStarted) && !(self->flags & kQueuedTLS) && !(self->flags & kForbidReadsWrites)) + { + [self->readQueue addObject:packet]; + [self->writeQueue addObject:packet]; + + self->flags |= kQueuedTLS; + + [self maybeDequeueRead]; + [self maybeDequeueWrite]; + } + }}); + +} + +- (void)maybeStartTLS +{ + // We can't start TLS until: + // - All queued reads prior to the user calling startTLS are complete + // - All queued writes prior to the user calling startTLS are complete + // + // We'll know these conditions are met when both kStartingReadTLS and kStartingWriteTLS are set + + if ((flags & kStartingReadTLS) && (flags & kStartingWriteTLS)) + { + BOOL useSecureTransport = YES; + + #if TARGET_OS_IPHONE + { + MGCDAsyncSpecialPacket *tlsPacket = (MGCDAsyncSpecialPacket *)currentRead; + NSDictionary *tlsSettings = @{}; + if (tlsPacket) { + tlsSettings = tlsPacket->tlsSettings; + } + NSNumber *value = [tlsSettings objectForKey:MGCDAsyncSocketUseCFStreamForTLS]; + if (value && [value boolValue]) + useSecureTransport = NO; + } + #endif + + if (useSecureTransport) + { + [self ssl_startTLS]; + } + else + { + #if TARGET_OS_IPHONE + [self cf_startTLS]; + #endif + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Security via SecureTransport +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (OSStatus)sslReadWithBuffer:(void *)buffer length:(size_t *)bufferLength +{ + LogVerbose(@"sslReadWithBuffer:%p length:%lu", buffer, (unsigned long)*bufferLength); + + if ((socketFDBytesAvailable == 0) && ([sslPreBuffer availableBytes] == 0)) + { + LogVerbose(@"%@ - No data available to read...", THIS_METHOD); + + // No data available to read. + // + // Need to wait for readSource to fire and notify us of + // available data in the socket's internal read buffer. + + [self resumeReadSource]; + + *bufferLength = 0; + return errSSLWouldBlock; + } + + size_t totalBytesRead = 0; + size_t totalBytesLeftToBeRead = *bufferLength; + + BOOL done = NO; + BOOL socketError = NO; + + // + // STEP 1 : READ FROM SSL PRE BUFFER + // + + size_t sslPreBufferLength = [sslPreBuffer availableBytes]; + + if (sslPreBufferLength > 0) + { + LogVerbose(@"%@: Reading from SSL pre buffer...", THIS_METHOD); + + size_t bytesToCopy; + if (sslPreBufferLength > totalBytesLeftToBeRead) + bytesToCopy = totalBytesLeftToBeRead; + else + bytesToCopy = sslPreBufferLength; + + LogVerbose(@"%@: Copying %zu bytes from sslPreBuffer", THIS_METHOD, bytesToCopy); + + memcpy(buffer, [sslPreBuffer readBuffer], bytesToCopy); + [sslPreBuffer didRead:bytesToCopy]; + + LogVerbose(@"%@: sslPreBuffer.length = %zu", THIS_METHOD, [sslPreBuffer availableBytes]); + + totalBytesRead += bytesToCopy; + totalBytesLeftToBeRead -= bytesToCopy; + + done = (totalBytesLeftToBeRead == 0); + + if (done) LogVerbose(@"%@: Complete", THIS_METHOD); + } + + // + // STEP 2 : READ FROM SOCKET + // + + if (!done && (socketFDBytesAvailable > 0)) + { + LogVerbose(@"%@: Reading from socket...", THIS_METHOD); + + int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; + + BOOL readIntoPreBuffer; + size_t bytesToRead; + uint8_t *buf; + + if (socketFDBytesAvailable > totalBytesLeftToBeRead) + { + // Read all available data from socket into sslPreBuffer. + // Then copy requested amount into dataBuffer. + + LogVerbose(@"%@: Reading into sslPreBuffer...", THIS_METHOD); + + [sslPreBuffer ensureCapacityForWrite:socketFDBytesAvailable]; + + readIntoPreBuffer = YES; + bytesToRead = (size_t)socketFDBytesAvailable; + buf = [sslPreBuffer writeBuffer]; + } + else + { + // Read available data from socket directly into dataBuffer. + + LogVerbose(@"%@: Reading directly into dataBuffer...", THIS_METHOD); + + readIntoPreBuffer = NO; + bytesToRead = totalBytesLeftToBeRead; + buf = (uint8_t *)buffer + totalBytesRead; + } + + ssize_t result = read(socketFD, buf, bytesToRead); + LogVerbose(@"%@: read from socket = %zd", THIS_METHOD, result); + + if (result < 0) + { + LogVerbose(@"%@: read errno = %i", THIS_METHOD, errno); + + if (errno != EWOULDBLOCK) + { + socketError = YES; + } + + socketFDBytesAvailable = 0; + } + else if (result == 0) + { + LogVerbose(@"%@: read EOF", THIS_METHOD); + + socketError = YES; + socketFDBytesAvailable = 0; + } + else + { + size_t bytesReadFromSocket = result; + + if (socketFDBytesAvailable > bytesReadFromSocket) + socketFDBytesAvailable -= bytesReadFromSocket; + else + socketFDBytesAvailable = 0; + + if (readIntoPreBuffer) + { + [sslPreBuffer didWrite:bytesReadFromSocket]; + + size_t bytesToCopy = MIN(totalBytesLeftToBeRead, bytesReadFromSocket); + + LogVerbose(@"%@: Copying %zu bytes out of sslPreBuffer", THIS_METHOD, bytesToCopy); + + memcpy((uint8_t *)buffer + totalBytesRead, [sslPreBuffer readBuffer], bytesToCopy); + [sslPreBuffer didRead:bytesToCopy]; + + totalBytesRead += bytesToCopy; + totalBytesLeftToBeRead -= bytesToCopy; + + LogVerbose(@"%@: sslPreBuffer.length = %zu", THIS_METHOD, [sslPreBuffer availableBytes]); + } + else + { + totalBytesRead += bytesReadFromSocket; + totalBytesLeftToBeRead -= bytesReadFromSocket; + } + + done = (totalBytesLeftToBeRead == 0); + + if (done) LogVerbose(@"%@: Complete", THIS_METHOD); + } + } + + *bufferLength = totalBytesRead; + + if (done) + return noErr; + + if (socketError) + return errSSLClosedAbort; + + return errSSLWouldBlock; +} + +- (OSStatus)sslWriteWithBuffer:(const void *)buffer length:(size_t *)bufferLength +{ + if (!(flags & kSocketCanAcceptBytes)) + { + // Unable to write. + // + // Need to wait for writeSource to fire and notify us of + // available space in the socket's internal write buffer. + + [self resumeWriteSource]; + + *bufferLength = 0; + return errSSLWouldBlock; + } + + size_t bytesToWrite = *bufferLength; + size_t bytesWritten = 0; + + BOOL done = NO; + BOOL socketError = NO; + + int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; + + ssize_t result = write(socketFD, buffer, bytesToWrite); + + if (result < 0) + { + if (errno != EWOULDBLOCK) + { + socketError = YES; + } + + flags &= ~kSocketCanAcceptBytes; + } + else if (result == 0) + { + flags &= ~kSocketCanAcceptBytes; + } + else + { + bytesWritten = result; + + done = (bytesWritten == bytesToWrite); + } + + *bufferLength = bytesWritten; + + if (done) + return noErr; + + if (socketError) + return errSSLClosedAbort; + + return errSSLWouldBlock; +} + +static OSStatus SSLReadFunction(SSLConnectionRef connection, void *data, size_t *dataLength) +{ + MGCDAsyncSocket *asyncSocket = (__bridge MGCDAsyncSocket *)connection; + + NSCAssert(dispatch_get_specific(asyncSocket->IsOnSocketQueueOrTargetQueueKey), @"What the deuce?"); + + return [asyncSocket sslReadWithBuffer:data length:dataLength]; +} + +static OSStatus SSLWriteFunction(SSLConnectionRef connection, const void *data, size_t *dataLength) +{ + MGCDAsyncSocket *asyncSocket = (__bridge MGCDAsyncSocket *)connection; + + NSCAssert(dispatch_get_specific(asyncSocket->IsOnSocketQueueOrTargetQueueKey), @"What the deuce?"); + + return [asyncSocket sslWriteWithBuffer:data length:dataLength]; +} + +- (void)ssl_startTLS +{ + LogTrace(); + + LogVerbose(@"Starting TLS (via SecureTransport)..."); + + OSStatus status; + + MGCDAsyncSpecialPacket *tlsPacket = (MGCDAsyncSpecialPacket *)currentRead; + if (tlsPacket == nil) // Code to quiet the analyzer + { + NSAssert(NO, @"Logic error"); + + [self closeWithError:[self otherError:@"Logic error"]]; + return; + } + NSDictionary *tlsSettings = tlsPacket->tlsSettings; + + // Create SSLContext, and setup IO callbacks and connection ref + + NSNumber *isServerNumber = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLIsServer]; + BOOL isServer = [isServerNumber boolValue]; + + #if TARGET_OS_IPHONE || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 1080) + { + if (isServer) + sslContext = SSLCreateContext(kCFAllocatorDefault, kSSLServerSide, kSSLStreamType); + else + sslContext = SSLCreateContext(kCFAllocatorDefault, kSSLClientSide, kSSLStreamType); + + if (sslContext == NULL) + { + [self closeWithError:[self otherError:@"Error in SSLCreateContext"]]; + return; + } + } + #else // (__MAC_OS_X_VERSION_MIN_REQUIRED < 1080) + { + status = SSLNewContext(isServer, &sslContext); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLNewContext"]]; + return; + } + } + #endif + + status = SSLSetIOFuncs(sslContext, &SSLReadFunction, &SSLWriteFunction); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetIOFuncs"]]; + return; + } + + status = SSLSetConnection(sslContext, (__bridge SSLConnectionRef)self); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetConnection"]]; + return; + } + + + NSNumber *shouldManuallyEvaluateTrust = [tlsSettings objectForKey:MGCDAsyncSocketManuallyEvaluateTrust]; + if ([shouldManuallyEvaluateTrust boolValue]) + { + if (isServer) + { + [self closeWithError:[self otherError:@"Manual trust validation is not supported for server sockets"]]; + return; + } + + status = SSLSetSessionOption(sslContext, kSSLSessionOptionBreakOnServerAuth, true); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetSessionOption"]]; + return; + } + + #if !TARGET_OS_IPHONE && (__MAC_OS_X_VERSION_MIN_REQUIRED < 1080) + + // Note from Apple's documentation: + // + // It is only necessary to call SSLSetEnableCertVerify on the Mac prior to OS X 10.8. + // On OS X 10.8 and later setting kSSLSessionOptionBreakOnServerAuth always disables the + // built-in trust evaluation. All versions of iOS behave like OS X 10.8 and thus + // SSLSetEnableCertVerify is not available on that platform at all. + + status = SSLSetEnableCertVerify(sslContext, NO); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetEnableCertVerify"]]; + return; + } + + #endif + } + + // Configure SSLContext from given settings + // + // Checklist: + // 1. kCFStreamSSLPeerName + // 2. kCFStreamSSLCertificates + // 3. MGCDAsyncSocketSSLPeerID + // 4. MGCDAsyncSocketSSLProtocolVersionMin + // 5. MGCDAsyncSocketSSLProtocolVersionMax + // 6. MGCDAsyncSocketSSLSessionOptionFalseStart + // 7. MGCDAsyncSocketSSLSessionOptionSendOneByteRecord + // 8. MGCDAsyncSocketSSLCipherSuites + // 9. MGCDAsyncSocketSSLDiffieHellmanParameters (Mac) + // 10. MGCDAsyncSocketSSLALPN + // + // Deprecated (throw error): + // 10. kCFStreamSSLAllowsAnyRoot + // 11. kCFStreamSSLAllowsExpiredRoots + // 12. kCFStreamSSLAllowsExpiredCertificates + // 13. kCFStreamSSLValidatesCertificateChain + // 14. kCFStreamSSLLevel + + NSObject *value; + + // 1. kCFStreamSSLPeerName + + value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLPeerName]; + if ([value isKindOfClass:[NSString class]]) + { + NSString *peerName = (NSString *)value; + + const char *peer = [peerName UTF8String]; + size_t peerLen = strlen(peer); + + status = SSLSetPeerDomainName(sslContext, peer, peerLen); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetPeerDomainName"]]; + return; + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for kCFStreamSSLPeerName. Value must be of type NSString."); + + [self closeWithError:[self otherError:@"Invalid value for kCFStreamSSLPeerName."]]; + return; + } + + // 2. kCFStreamSSLCertificates + + value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLCertificates]; + if ([value isKindOfClass:[NSArray class]]) + { + NSArray *certs = (NSArray *)value; + + status = SSLSetCertificate(sslContext, (__bridge CFArrayRef)certs); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetCertificate"]]; + return; + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for kCFStreamSSLCertificates. Value must be of type NSArray."); + + [self closeWithError:[self otherError:@"Invalid value for kCFStreamSSLCertificates."]]; + return; + } + + // 3. MGCDAsyncSocketSSLPeerID + + value = [tlsSettings objectForKey:MGCDAsyncSocketSSLPeerID]; + if ([value isKindOfClass:[NSData class]]) + { + NSData *peerIdData = (NSData *)value; + + status = SSLSetPeerID(sslContext, [peerIdData bytes], [peerIdData length]); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetPeerID"]]; + return; + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for MGCDAsyncSocketSSLPeerID. Value must be of type NSData." + @" (You can convert strings to data using a method like" + @" [string dataUsingEncoding:NSUTF8StringEncoding])"); + + [self closeWithError:[self otherError:@"Invalid value for MGCDAsyncSocketSSLPeerID."]]; + return; + } + + // 4. MGCDAsyncSocketSSLProtocolVersionMin + + value = [tlsSettings objectForKey:MGCDAsyncSocketSSLProtocolVersionMin]; + if ([value isKindOfClass:[NSNumber class]]) + { + SSLProtocol minProtocol = (SSLProtocol)[(NSNumber *)value intValue]; + if (minProtocol != kSSLProtocolUnknown) + { + status = SSLSetProtocolVersionMin(sslContext, minProtocol); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetProtocolVersionMin"]]; + return; + } + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for MGCDAsyncSocketSSLProtocolVersionMin. Value must be of type NSNumber."); + + [self closeWithError:[self otherError:@"Invalid value for MGCDAsyncSocketSSLProtocolVersionMin."]]; + return; + } + + // 5. MGCDAsyncSocketSSLProtocolVersionMax + + value = [tlsSettings objectForKey:MGCDAsyncSocketSSLProtocolVersionMax]; + if ([value isKindOfClass:[NSNumber class]]) + { + SSLProtocol maxProtocol = (SSLProtocol)[(NSNumber *)value intValue]; + if (maxProtocol != kSSLProtocolUnknown) + { + status = SSLSetProtocolVersionMax(sslContext, maxProtocol); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetProtocolVersionMax"]]; + return; + } + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for MGCDAsyncSocketSSLProtocolVersionMax. Value must be of type NSNumber."); + + [self closeWithError:[self otherError:@"Invalid value for MGCDAsyncSocketSSLProtocolVersionMax."]]; + return; + } + + // 6. MGCDAsyncSocketSSLSessionOptionFalseStart + + value = [tlsSettings objectForKey:MGCDAsyncSocketSSLSessionOptionFalseStart]; + if ([value isKindOfClass:[NSNumber class]]) + { + NSNumber *falseStart = (NSNumber *)value; + status = SSLSetSessionOption(sslContext, kSSLSessionOptionFalseStart, [falseStart boolValue]); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetSessionOption (kSSLSessionOptionFalseStart)"]]; + return; + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for MGCDAsyncSocketSSLSessionOptionFalseStart. Value must be of type NSNumber."); + + [self closeWithError:[self otherError:@"Invalid value for MGCDAsyncSocketSSLSessionOptionFalseStart."]]; + return; + } + + // 7. MGCDAsyncSocketSSLSessionOptionSendOneByteRecord + + value = [tlsSettings objectForKey:MGCDAsyncSocketSSLSessionOptionSendOneByteRecord]; + if ([value isKindOfClass:[NSNumber class]]) + { + NSNumber *oneByteRecord = (NSNumber *)value; + status = SSLSetSessionOption(sslContext, kSSLSessionOptionSendOneByteRecord, [oneByteRecord boolValue]); + if (status != noErr) + { + [self closeWithError: + [self otherError:@"Error in SSLSetSessionOption (kSSLSessionOptionSendOneByteRecord)"]]; + return; + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for MGCDAsyncSocketSSLSessionOptionSendOneByteRecord." + @" Value must be of type NSNumber."); + + [self closeWithError:[self otherError:@"Invalid value for MGCDAsyncSocketSSLSessionOptionSendOneByteRecord."]]; + return; + } + + // 8. MGCDAsyncSocketSSLCipherSuites + + value = [tlsSettings objectForKey:MGCDAsyncSocketSSLCipherSuites]; + if ([value isKindOfClass:[NSArray class]]) + { + NSArray *cipherSuites = (NSArray *)value; + NSUInteger numberCiphers = [cipherSuites count]; + SSLCipherSuite ciphers[numberCiphers]; + + NSUInteger cipherIndex; + for (cipherIndex = 0; cipherIndex < numberCiphers; cipherIndex++) + { + NSNumber *cipherObject = [cipherSuites objectAtIndex:cipherIndex]; + ciphers[cipherIndex] = (SSLCipherSuite)[cipherObject unsignedIntValue]; + } + + status = SSLSetEnabledCiphers(sslContext, ciphers, numberCiphers); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetEnabledCiphers"]]; + return; + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for MGCDAsyncSocketSSLCipherSuites. Value must be of type NSArray."); + + [self closeWithError:[self otherError:@"Invalid value for MGCDAsyncSocketSSLCipherSuites."]]; + return; + } + + // 9. MGCDAsyncSocketSSLDiffieHellmanParameters + + #if !TARGET_OS_IPHONE + value = [tlsSettings objectForKey:MGCDAsyncSocketSSLDiffieHellmanParameters]; + if ([value isKindOfClass:[NSData class]]) + { + NSData *diffieHellmanData = (NSData *)value; + + status = SSLSetDiffieHellmanParams(sslContext, [diffieHellmanData bytes], [diffieHellmanData length]); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetDiffieHellmanParams"]]; + return; + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for MGCDAsyncSocketSSLDiffieHellmanParameters. Value must be of type NSData."); + + [self closeWithError:[self otherError:@"Invalid value for MGCDAsyncSocketSSLDiffieHellmanParameters."]]; + return; + } + #endif + + // 10. kCFStreamSSLCertificates + value = [tlsSettings objectForKey:MGCDAsyncSocketSSLALPN]; + if ([value isKindOfClass:[NSArray class]]) + { + if (@available(iOS 11.0, macOS 10.13, tvOS 11.0, *)) + { + CFArrayRef protocols = (__bridge CFArrayRef)((NSArray *) value); + status = SSLSetALPNProtocols(sslContext, protocols); + if (status != noErr) + { + [self closeWithError:[self otherError:@"Error in SSLSetALPNProtocols"]]; + return; + } + } + else + { + NSAssert(NO, @"Security option unavailable - MGCDAsyncSocketSSLALPN" + @" - iOS 11.0, macOS 10.13 required"); + [self closeWithError:[self otherError:@"Security option unavailable - MGCDAsyncSocketSSLALPN"]]; + } + } + else if (value) + { + NSAssert(NO, @"Invalid value for MGCDAsyncSocketSSLALPN. Value must be of type NSArray."); + + [self closeWithError:[self otherError:@"Invalid value for MGCDAsyncSocketSSLALPN."]]; + return; + } + + // DEPRECATED checks + + // 10. kCFStreamSSLAllowsAnyRoot + + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLAllowsAnyRoot]; + #pragma clang diagnostic pop + if (value) + { + NSAssert(NO, @"Security option unavailable - kCFStreamSSLAllowsAnyRoot" + @" - You must use manual trust evaluation"); + + [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLAllowsAnyRoot"]]; + return; + } + + // 11. kCFStreamSSLAllowsExpiredRoots + + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLAllowsExpiredRoots]; + #pragma clang diagnostic pop + if (value) + { + NSAssert(NO, @"Security option unavailable - kCFStreamSSLAllowsExpiredRoots" + @" - You must use manual trust evaluation"); + + [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLAllowsExpiredRoots"]]; + return; + } + + // 12. kCFStreamSSLValidatesCertificateChain + + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLValidatesCertificateChain]; + #pragma clang diagnostic pop + if (value) + { + NSAssert(NO, @"Security option unavailable - kCFStreamSSLValidatesCertificateChain" + @" - You must use manual trust evaluation"); + + [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLValidatesCertificateChain"]]; + return; + } + + // 13. kCFStreamSSLAllowsExpiredCertificates + + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLAllowsExpiredCertificates]; + #pragma clang diagnostic pop + if (value) + { + NSAssert(NO, @"Security option unavailable - kCFStreamSSLAllowsExpiredCertificates" + @" - You must use manual trust evaluation"); + + [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLAllowsExpiredCertificates"]]; + return; + } + + // 14. kCFStreamSSLLevel + + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdeprecated-declarations" + value = [tlsSettings objectForKey:(__bridge NSString *)kCFStreamSSLLevel]; + #pragma clang diagnostic pop + if (value) + { + NSAssert(NO, @"Security option unavailable - kCFStreamSSLLevel" + @" - You must use MGCDAsyncSocketSSLProtocolVersionMin & MGCDAsyncSocketSSLProtocolVersionMax"); + + [self closeWithError:[self otherError:@"Security option unavailable - kCFStreamSSLLevel"]]; + return; + } + + // Setup the sslPreBuffer + // + // Any data in the preBuffer needs to be moved into the sslPreBuffer, + // as this data is now part of the secure read stream. + + sslPreBuffer = [[MGCDAsyncSocketPreBuffer alloc] initWithCapacity:(1024 * 4)]; + + size_t preBufferLength = [preBuffer availableBytes]; + + if (preBufferLength > 0) + { + [sslPreBuffer ensureCapacityForWrite:preBufferLength]; + + memcpy([sslPreBuffer writeBuffer], [preBuffer readBuffer], preBufferLength); + [preBuffer didRead:preBufferLength]; + [sslPreBuffer didWrite:preBufferLength]; + } + + sslErrCode = lastSSLHandshakeError = noErr; + + // Start the SSL Handshake process + + [self ssl_continueSSLHandshake]; +} + +- (void)ssl_continueSSLHandshake +{ + LogTrace(); + + // If the return value is noErr, the session is ready for normal secure communication. + // If the return value is errSSLWouldBlock, the SSLHandshake function must be called again. + // If the return value is errSSLServerAuthCompleted, we ask delegate if we should trust the + // server and then call SSLHandshake again to resume the handshake or close the connection + // errSSLPeerBadCert SSL error. + // Otherwise, the return value indicates an error code. + + OSStatus status = SSLHandshake(sslContext); + lastSSLHandshakeError = status; + + if (status == noErr) + { + LogVerbose(@"SSLHandshake complete"); + + flags &= ~kStartingReadTLS; + flags &= ~kStartingWriteTLS; + + flags |= kSocketSecure; + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socketDidSecure:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socketDidSecure:self]; + }}); + } + + [self endCurrentRead]; + [self endCurrentWrite]; + + [self maybeDequeueRead]; + [self maybeDequeueWrite]; + } + else if (status == errSSLPeerAuthCompleted) + { + LogVerbose(@"SSLHandshake peerAuthCompleted - awaiting delegate approval"); + + __block SecTrustRef trust = NULL; + status = SSLCopyPeerTrust(sslContext, &trust); + if (status != noErr) + { + [self closeWithError:[self sslError:status]]; + return; + } + + int aStateIndex = stateIndex; + dispatch_queue_t theSocketQueue = socketQueue; + + __weak MGCDAsyncSocket *weakSelf = self; + + void (^comletionHandler)(BOOL) = ^(BOOL shouldTrust){ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + dispatch_async(theSocketQueue, ^{ @autoreleasepool { + + if (trust) { + CFRelease(trust); + trust = NULL; + } + + __strong MGCDAsyncSocket *strongSelf = weakSelf; + if (strongSelf) + { + [strongSelf ssl_shouldTrustPeer:shouldTrust stateIndex:aStateIndex]; + } + }}); + + #pragma clang diagnostic pop + }}; + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socket:didReceiveTrust:completionHandler:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socket:self didReceiveTrust:trust completionHandler:comletionHandler]; + }}); + } + else + { + if (trust) { + CFRelease(trust); + trust = NULL; + } + + NSString *msg = @"MGCDAsyncSocketManuallyEvaluateTrust specified in tlsSettings," + @" but delegate doesn't implement socket:shouldTrustPeer:"; + + [self closeWithError:[self otherError:msg]]; + return; + } + } + else if (status == errSSLWouldBlock) + { + LogVerbose(@"SSLHandshake continues..."); + + // Handshake continues... + // + // This method will be called again from doReadData or doWriteData. + } + else + { + [self closeWithError:[self sslError:status]]; + } +} + +- (void)ssl_shouldTrustPeer:(BOOL)shouldTrust stateIndex:(int)aStateIndex +{ + LogTrace(); + + if (aStateIndex != stateIndex) + { + LogInfo(@"Ignoring ssl_shouldTrustPeer - invalid state (maybe disconnected)"); + + // One of the following is true + // - the socket was disconnected + // - the startTLS operation timed out + // - the completionHandler was already invoked once + + return; + } + + // Increment stateIndex to ensure completionHandler can only be called once. + stateIndex++; + + if (shouldTrust) + { + NSAssert(lastSSLHandshakeError == errSSLPeerAuthCompleted, @"ssl_shouldTrustPeer called when last error is %d and not errSSLPeerAuthCompleted", (int)lastSSLHandshakeError); + [self ssl_continueSSLHandshake]; + } + else + { + [self closeWithError:[self sslError:errSSLPeerBadCert]]; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Security via CFStream +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#if TARGET_OS_IPHONE + +- (void)cf_finishSSLHandshake +{ + LogTrace(); + + if ((flags & kStartingReadTLS) && (flags & kStartingWriteTLS)) + { + flags &= ~kStartingReadTLS; + flags &= ~kStartingWriteTLS; + + flags |= kSocketSecure; + + __strong id theDelegate = delegate; + + if (delegateQueue && [theDelegate respondsToSelector:@selector(socketDidSecure:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate socketDidSecure:self]; + }}); + } + + [self endCurrentRead]; + [self endCurrentWrite]; + + [self maybeDequeueRead]; + [self maybeDequeueWrite]; + } +} + +- (void)cf_abortSSLHandshake:(NSError *)error +{ + LogTrace(); + + if ((flags & kStartingReadTLS) && (flags & kStartingWriteTLS)) + { + flags &= ~kStartingReadTLS; + flags &= ~kStartingWriteTLS; + + [self closeWithError:error]; + } +} + +- (void)cf_startTLS +{ + LogTrace(); + + LogVerbose(@"Starting TLS (via CFStream)..."); + + if ([preBuffer availableBytes] > 0) + { + NSString *msg = @"Invalid TLS transition. Handshake has already been read from socket."; + + [self closeWithError:[self otherError:msg]]; + return; + } + + [self suspendReadSource]; + [self suspendWriteSource]; + + socketFDBytesAvailable = 0; + flags &= ~kSocketCanAcceptBytes; + flags &= ~kSecureSocketHasBytesAvailable; + + flags |= kUsingCFStreamForTLS; + + if (![self createReadAndWriteStream]) + { + [self closeWithError:[self otherError:@"Error in CFStreamCreatePairWithSocket"]]; + return; + } + + if (![self registerForStreamCallbacksIncludingReadWrite:YES]) + { + [self closeWithError:[self otherError:@"Error in CFStreamSetClient"]]; + return; + } + + if (![self addStreamsToRunLoop]) + { + [self closeWithError:[self otherError:@"Error in CFStreamScheduleWithRunLoop"]]; + return; + } + + NSAssert([currentRead isKindOfClass:[MGCDAsyncSpecialPacket class]], @"Invalid read packet for startTLS"); + NSAssert([currentWrite isKindOfClass:[MGCDAsyncSpecialPacket class]], @"Invalid write packet for startTLS"); + + MGCDAsyncSpecialPacket *tlsPacket = (MGCDAsyncSpecialPacket *)currentRead; + CFDictionaryRef tlsSettings = (__bridge CFDictionaryRef)tlsPacket->tlsSettings; + + // Getting an error concerning kCFStreamPropertySSLSettings ? + // You need to add the CFNetwork framework to your iOS application. + + BOOL r1 = CFReadStreamSetProperty(readStream, kCFStreamPropertySSLSettings, tlsSettings); + BOOL r2 = CFWriteStreamSetProperty(writeStream, kCFStreamPropertySSLSettings, tlsSettings); + + // For some reason, starting around the time of iOS 4.3, + // the first call to set the kCFStreamPropertySSLSettings will return true, + // but the second will return false. + // + // Order doesn't seem to matter. + // So you could call CFReadStreamSetProperty and then CFWriteStreamSetProperty, or you could reverse the order. + // Either way, the first call will return true, and the second returns false. + // + // Interestingly, this doesn't seem to affect anything. + // Which is not altogether unusual, as the documentation seems to suggest that (for many settings) + // setting it on one side of the stream automatically sets it for the other side of the stream. + // + // Although there isn't anything in the documentation to suggest that the second attempt would fail. + // + // Furthermore, this only seems to affect streams that are negotiating a security upgrade. + // In other words, the socket gets connected, there is some back-and-forth communication over the unsecure + // connection, and then a startTLS is issued. + // So this mostly affects newer protocols (XMPP, IMAP) as opposed to older protocols (HTTPS). + + if (!r1 && !r2) // Yes, the && is correct - workaround for apple bug. + { + [self closeWithError:[self otherError:@"Error in CFStreamSetProperty"]]; + return; + } + + if (![self openStreams]) + { + [self closeWithError:[self otherError:@"Error in CFStreamOpen"]]; + return; + } + + LogVerbose(@"Waiting for SSL Handshake to complete..."); +} + +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark CFStream +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#if TARGET_OS_IPHONE + ++ (void)ignore:(id)_ +{} + ++ (void)startCFStreamThreadIfNeeded +{ + LogTrace(); + + static dispatch_once_t predicate; + dispatch_once(&predicate, ^{ + + cfstreamThreadRetainCount = 0; + cfstreamThreadSetupQueue = dispatch_queue_create("MGCDAsyncSocket-CFStreamThreadSetup", DISPATCH_QUEUE_SERIAL); + }); + + dispatch_sync(cfstreamThreadSetupQueue, ^{ @autoreleasepool { + + if (++cfstreamThreadRetainCount == 1) + { + cfstreamThread = [[NSThread alloc] initWithTarget:self + selector:@selector(cfstreamThread:) + object:nil]; + [cfstreamThread start]; + } + }}); +} + ++ (void)stopCFStreamThreadIfNeeded +{ + LogTrace(); + + // The creation of the cfstreamThread is relatively expensive. + // So we'd like to keep it available for recycling. + // However, there's a tradeoff here, because it shouldn't remain alive forever. + // So what we're going to do is use a little delay before taking it down. + // This way it can be reused properly in situations where multiple sockets are continually in flux. + + int delayInSeconds = 30; + dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); + dispatch_after(when, cfstreamThreadSetupQueue, ^{ @autoreleasepool { + #pragma clang diagnostic push + #pragma clang diagnostic warning "-Wimplicit-retain-self" + + if (cfstreamThreadRetainCount == 0) + { + LogWarn(@"Logic error concerning cfstreamThread start / stop"); + return_from_block; + } + + if (--cfstreamThreadRetainCount == 0) + { + [cfstreamThread cancel]; // set isCancelled flag + + // wake up the thread + [[self class] performSelector:@selector(ignore:) + onThread:cfstreamThread + withObject:[NSNull null] + waitUntilDone:NO]; + + cfstreamThread = nil; + } + + #pragma clang diagnostic pop + }}); +} + ++ (void)cfstreamThread:(id)unused { @autoreleasepool +{ + [[NSThread currentThread] setName:MGCDAsyncSocketThreadName]; + + LogInfo(@"CFStreamThread: Started"); + + // We can't run the run loop unless it has an associated input source or a timer. + // So we'll just create a timer that will never fire - unless the server runs for decades. + [NSTimer scheduledTimerWithTimeInterval:[[NSDate distantFuture] timeIntervalSinceNow] + target:self + selector:@selector(ignore:) + userInfo:nil + repeats:YES]; + + NSThread *currentThread = [NSThread currentThread]; + NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop]; + + BOOL isCancelled = [currentThread isCancelled]; + + while (!isCancelled && [currentRunLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) + { + isCancelled = [currentThread isCancelled]; + } + + LogInfo(@"CFStreamThread: Stopped"); +}} + ++ (void)scheduleCFStreams:(MGCDAsyncSocket *)asyncSocket +{ + LogTrace(); + NSAssert([NSThread currentThread] == cfstreamThread, @"Invoked on wrong thread"); + + CFRunLoopRef runLoop = CFRunLoopGetCurrent(); + + if (asyncSocket->readStream) + CFReadStreamScheduleWithRunLoop(asyncSocket->readStream, runLoop, kCFRunLoopDefaultMode); + + if (asyncSocket->writeStream) + CFWriteStreamScheduleWithRunLoop(asyncSocket->writeStream, runLoop, kCFRunLoopDefaultMode); +} + ++ (void)unscheduleCFStreams:(MGCDAsyncSocket *)asyncSocket +{ + LogTrace(); + NSAssert([NSThread currentThread] == cfstreamThread, @"Invoked on wrong thread"); + + CFRunLoopRef runLoop = CFRunLoopGetCurrent(); + + if (asyncSocket->readStream) + CFReadStreamUnscheduleFromRunLoop(asyncSocket->readStream, runLoop, kCFRunLoopDefaultMode); + + if (asyncSocket->writeStream) + CFWriteStreamUnscheduleFromRunLoop(asyncSocket->writeStream, runLoop, kCFRunLoopDefaultMode); +} + +static void CFReadStreamCallback (CFReadStreamRef stream, CFStreamEventType type, void *pInfo) +{ + MGCDAsyncSocket *asyncSocket = (__bridge MGCDAsyncSocket *)pInfo; + + switch(type) + { + case kCFStreamEventHasBytesAvailable: + { + dispatch_async(asyncSocket->socketQueue, ^{ @autoreleasepool { + + LogCVerbose(@"CFReadStreamCallback - HasBytesAvailable"); + + if (asyncSocket->readStream != stream) + return_from_block; + + if ((asyncSocket->flags & kStartingReadTLS) && (asyncSocket->flags & kStartingWriteTLS)) + { + // If we set kCFStreamPropertySSLSettings before we opened the streams, this might be a lie. + // (A callback related to the tcp stream, but not to the SSL layer). + + if (CFReadStreamHasBytesAvailable(asyncSocket->readStream)) + { + asyncSocket->flags |= kSecureSocketHasBytesAvailable; + [asyncSocket cf_finishSSLHandshake]; + } + } + else + { + asyncSocket->flags |= kSecureSocketHasBytesAvailable; + [asyncSocket doReadData]; + } + }}); + + break; + } + default: + { + NSError *error = (__bridge_transfer NSError *)CFReadStreamCopyError(stream); + + if (error == nil && type == kCFStreamEventEndEncountered) + { + error = [asyncSocket connectionClosedError]; + } + + dispatch_async(asyncSocket->socketQueue, ^{ @autoreleasepool { + + LogCVerbose(@"CFReadStreamCallback - Other"); + + if (asyncSocket->readStream != stream) + return_from_block; + + if ((asyncSocket->flags & kStartingReadTLS) && (asyncSocket->flags & kStartingWriteTLS)) + { + [asyncSocket cf_abortSSLHandshake:error]; + } + else + { + [asyncSocket closeWithError:error]; + } + }}); + + break; + } + } + +} + +static void CFWriteStreamCallback (CFWriteStreamRef stream, CFStreamEventType type, void *pInfo) +{ + MGCDAsyncSocket *asyncSocket = (__bridge MGCDAsyncSocket *)pInfo; + + switch(type) + { + case kCFStreamEventCanAcceptBytes: + { + dispatch_async(asyncSocket->socketQueue, ^{ @autoreleasepool { + + LogCVerbose(@"CFWriteStreamCallback - CanAcceptBytes"); + + if (asyncSocket->writeStream != stream) + return_from_block; + + if ((asyncSocket->flags & kStartingReadTLS) && (asyncSocket->flags & kStartingWriteTLS)) + { + // If we set kCFStreamPropertySSLSettings before we opened the streams, this might be a lie. + // (A callback related to the tcp stream, but not to the SSL layer). + + if (CFWriteStreamCanAcceptBytes(asyncSocket->writeStream)) + { + asyncSocket->flags |= kSocketCanAcceptBytes; + [asyncSocket cf_finishSSLHandshake]; + } + } + else + { + asyncSocket->flags |= kSocketCanAcceptBytes; + [asyncSocket doWriteData]; + } + }}); + + break; + } + default: + { + NSError *error = (__bridge_transfer NSError *)CFWriteStreamCopyError(stream); + + if (error == nil && type == kCFStreamEventEndEncountered) + { + error = [asyncSocket connectionClosedError]; + } + + dispatch_async(asyncSocket->socketQueue, ^{ @autoreleasepool { + + LogCVerbose(@"CFWriteStreamCallback - Other"); + + if (asyncSocket->writeStream != stream) + return_from_block; + + if ((asyncSocket->flags & kStartingReadTLS) && (asyncSocket->flags & kStartingWriteTLS)) + { + [asyncSocket cf_abortSSLHandshake:error]; + } + else + { + [asyncSocket closeWithError:error]; + } + }}); + + break; + } + } + +} + +- (BOOL)createReadAndWriteStream +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + + if (readStream || writeStream) + { + // Streams already created + return YES; + } + + int socketFD = (socket4FD != SOCKET_NULL) ? socket4FD : (socket6FD != SOCKET_NULL) ? socket6FD : socketUN; + + if (socketFD == SOCKET_NULL) + { + // Cannot create streams without a file descriptor + return NO; + } + + if (![self isConnected]) + { + // Cannot create streams until file descriptor is connected + return NO; + } + + LogVerbose(@"Creating read and write stream..."); + + CFStreamCreatePairWithSocket(NULL, (CFSocketNativeHandle)socketFD, &readStream, &writeStream); + + // The kCFStreamPropertyShouldCloseNativeSocket property should be false by default (for our case). + // But let's not take any chances. + + if (readStream) + CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse); + if (writeStream) + CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse); + + if ((readStream == NULL) || (writeStream == NULL)) + { + LogWarn(@"Unable to create read and write stream..."); + + if (readStream) + { + CFReadStreamClose(readStream); + CFRelease(readStream); + readStream = NULL; + } + if (writeStream) + { + CFWriteStreamClose(writeStream); + CFRelease(writeStream); + writeStream = NULL; + } + + return NO; + } + + return YES; +} + +- (BOOL)registerForStreamCallbacksIncludingReadWrite:(BOOL)includeReadWrite +{ + LogVerbose(@"%@ %@", THIS_METHOD, (includeReadWrite ? @"YES" : @"NO")); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert((readStream != NULL && writeStream != NULL), @"Read/Write stream is null"); + + streamContext.version = 0; + streamContext.info = (__bridge void *)(self); + streamContext.retain = nil; + streamContext.release = nil; + streamContext.copyDescription = nil; + + CFOptionFlags readStreamEvents = kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered; + if (includeReadWrite) + readStreamEvents |= kCFStreamEventHasBytesAvailable; + + if (!CFReadStreamSetClient(readStream, readStreamEvents, &CFReadStreamCallback, &streamContext)) + { + return NO; + } + + CFOptionFlags writeStreamEvents = kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered; + if (includeReadWrite) + writeStreamEvents |= kCFStreamEventCanAcceptBytes; + + if (!CFWriteStreamSetClient(writeStream, writeStreamEvents, &CFWriteStreamCallback, &streamContext)) + { + return NO; + } + + return YES; +} + +- (BOOL)addStreamsToRunLoop +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert((readStream != NULL && writeStream != NULL), @"Read/Write stream is null"); + + if (!(flags & kAddedStreamsToRunLoop)) + { + LogVerbose(@"Adding streams to runloop..."); + + [[self class] startCFStreamThreadIfNeeded]; + dispatch_sync(cfstreamThreadSetupQueue, ^{ + [[self class] performSelector:@selector(scheduleCFStreams:) + onThread:cfstreamThread + withObject:self + waitUntilDone:YES]; + }); + flags |= kAddedStreamsToRunLoop; + } + + return YES; +} + +- (void)removeStreamsFromRunLoop +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert((readStream != NULL && writeStream != NULL), @"Read/Write stream is null"); + + if (flags & kAddedStreamsToRunLoop) + { + LogVerbose(@"Removing streams from runloop..."); + + dispatch_sync(cfstreamThreadSetupQueue, ^{ + [[self class] performSelector:@selector(unscheduleCFStreams:) + onThread:cfstreamThread + withObject:self + waitUntilDone:YES]; + }); + [[self class] stopCFStreamThreadIfNeeded]; + + flags &= ~kAddedStreamsToRunLoop; + } +} + +- (BOOL)openStreams +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert((readStream != NULL && writeStream != NULL), @"Read/Write stream is null"); + + CFStreamStatus readStatus = CFReadStreamGetStatus(readStream); + CFStreamStatus writeStatus = CFWriteStreamGetStatus(writeStream); + + if ((readStatus == kCFStreamStatusNotOpen) || (writeStatus == kCFStreamStatusNotOpen)) + { + LogVerbose(@"Opening read and write stream..."); + + BOOL r1 = CFReadStreamOpen(readStream); + BOOL r2 = CFWriteStreamOpen(writeStream); + + if (!r1 || !r2) + { + LogError(@"Error in CFStreamOpen"); + return NO; + } + } + + return YES; +} + +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Advanced +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * See header file for big discussion of this method. +**/ +- (BOOL)autoDisconnectOnClosedReadStream +{ + // Note: YES means kAllowHalfDuplexConnection is OFF + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return ((config & kAllowHalfDuplexConnection) == 0); + } + else + { + __block BOOL result; + + dispatch_sync(socketQueue, ^{ + result = ((self->config & kAllowHalfDuplexConnection) == 0); + }); + + return result; + } +} + +/** + * See header file for big discussion of this method. +**/ +- (void)setAutoDisconnectOnClosedReadStream:(BOOL)flag +{ + // Note: YES means kAllowHalfDuplexConnection is OFF + + dispatch_block_t block = ^{ + + if (flag) + self->config &= ~kAllowHalfDuplexConnection; + else + self->config |= kAllowHalfDuplexConnection; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + + +/** + * See header file for big discussion of this method. +**/ +- (void)markSocketQueueTargetQueue:(dispatch_queue_t)socketNewTargetQueue +{ + void *nonNullUnusedPointer = (__bridge void *)self; + dispatch_queue_set_specific(socketNewTargetQueue, IsOnSocketQueueOrTargetQueueKey, nonNullUnusedPointer, NULL); +} + +/** + * See header file for big discussion of this method. +**/ +- (void)unmarkSocketQueueTargetQueue:(dispatch_queue_t)socketOldTargetQueue +{ + dispatch_queue_set_specific(socketOldTargetQueue, IsOnSocketQueueOrTargetQueueKey, NULL, NULL); +} + +/** + * See header file for big discussion of this method. +**/ +- (void)performBlock:(dispatch_block_t)block +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); +} + +/** + * Questions? Have you read the header file? +**/ +- (int)socketFD +{ + if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); + return SOCKET_NULL; + } + + if (socket4FD != SOCKET_NULL) + return socket4FD; + else + return socket6FD; +} + +/** + * Questions? Have you read the header file? +**/ +- (int)socket4FD +{ + if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); + return SOCKET_NULL; + } + + return socket4FD; +} + +/** + * Questions? Have you read the header file? +**/ +- (int)socket6FD +{ + if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); + return SOCKET_NULL; + } + + return socket6FD; +} + +#if TARGET_OS_IPHONE + +/** + * Questions? Have you read the header file? +**/ +- (CFReadStreamRef)readStream +{ + if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); + return NULL; + } + + if (readStream == NULL) + [self createReadAndWriteStream]; + + return readStream; +} + +/** + * Questions? Have you read the header file? +**/ +- (CFWriteStreamRef)writeStream +{ + if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); + return NULL; + } + + if (writeStream == NULL) + [self createReadAndWriteStream]; + + return writeStream; +} + +- (BOOL)enableBackgroundingOnSocketWithCaveat:(BOOL)caveat +{ + if (![self createReadAndWriteStream]) + { + // Error occurred creating streams (perhaps socket isn't open) + return NO; + } + + BOOL r1, r2; + + LogVerbose(@"Enabling backgrouding on socket"); + +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + r1 = CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); + r2 = CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); +#pragma clang diagnostic pop + + if (!r1 || !r2) + { + return NO; + } + + if (!caveat) + { + if (![self openStreams]) + { + return NO; + } + } + + return YES; +} + +/** + * Questions? Have you read the header file? +**/ +- (BOOL)enableBackgroundingOnSocket +{ + LogTrace(); + + if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); + return NO; + } + + return [self enableBackgroundingOnSocketWithCaveat:NO]; +} + +- (BOOL)enableBackgroundingOnSocketWithCaveat // Deprecated in iOS 4.??? +{ + // This method was created as a workaround for a bug in iOS. + // Apple has since fixed this bug. + // I'm not entirely sure which version of iOS they fixed it in... + + LogTrace(); + + if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); + return NO; + } + + return [self enableBackgroundingOnSocketWithCaveat:YES]; +} + +#endif + +- (SSLContextRef)sslContext +{ + if (!dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@ - Method only available from within the context of a performBlock: invocation", THIS_METHOD); + return NULL; + } + + return sslContext; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Class Utilities +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ++ (NSMutableArray *)lookupHost:(NSString *)host port:(uint16_t)port error:(NSError **)errPtr +{ + LogTrace(); + + NSMutableArray *addresses = nil; + NSError *error = nil; + + if ([host isEqualToString:@"localhost"] || [host isEqualToString:@"loopback"]) + { + // Use LOOPBACK address + struct sockaddr_in nativeAddr4; + nativeAddr4.sin_len = sizeof(struct sockaddr_in); + nativeAddr4.sin_family = AF_INET; + nativeAddr4.sin_port = htons(port); + nativeAddr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + memset(&(nativeAddr4.sin_zero), 0, sizeof(nativeAddr4.sin_zero)); + + struct sockaddr_in6 nativeAddr6; + nativeAddr6.sin6_len = sizeof(struct sockaddr_in6); + nativeAddr6.sin6_family = AF_INET6; + nativeAddr6.sin6_port = htons(port); + nativeAddr6.sin6_flowinfo = 0; + nativeAddr6.sin6_addr = in6addr_loopback; + nativeAddr6.sin6_scope_id = 0; + + // Wrap the native address structures + + NSData *address4 = [NSData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; + NSData *address6 = [NSData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; + + addresses = [NSMutableArray arrayWithCapacity:2]; + [addresses addObject:address4]; + [addresses addObject:address6]; + } + else + { + NSString *portStr = [NSString stringWithFormat:@"%hu", port]; + + struct addrinfo hints, *res, *res0; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + + int gai_error = getaddrinfo([host UTF8String], [portStr UTF8String], &hints, &res0); + + if (gai_error) + { + error = [self gaiError:gai_error]; + } + else + { + NSUInteger capacity = 0; + for (res = res0; res; res = res->ai_next) + { + if (res->ai_family == AF_INET || res->ai_family == AF_INET6) { + capacity++; + } + } + + addresses = [NSMutableArray arrayWithCapacity:capacity]; + + for (res = res0; res; res = res->ai_next) + { + if (res->ai_family == AF_INET) + { + // Found IPv4 address. + // Wrap the native address structure, and add to results. + + NSData *address4 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]; + [addresses addObject:address4]; + } + else if (res->ai_family == AF_INET6) + { + // Fixes connection issues with IPv6 + // https://github.com/robbiehanson/CocoaAsyncSocket/issues/429#issuecomment-222477158 + + // Found IPv6 address. + // Wrap the native address structure, and add to results. + + struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)(void *)res->ai_addr; + in_port_t *portPtr = &sockaddr->sin6_port; + if ((portPtr != NULL) && (*portPtr == 0)) { + *portPtr = htons(port); + } + + NSData *address6 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]; + [addresses addObject:address6]; + } + } + freeaddrinfo(res0); + + if ([addresses count] == 0) + { + error = [self gaiError:EAI_FAIL]; + } + } + } + + if (errPtr) *errPtr = error; + return addresses; +} + ++ (NSString *)hostFromSockaddr4:(const struct sockaddr_in *)pSockaddr4 +{ + char addrBuf[INET_ADDRSTRLEN]; + + if (inet_ntop(AF_INET, &pSockaddr4->sin_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL) + { + addrBuf[0] = '\0'; + } + + return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding]; +} + ++ (NSString *)hostFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6 +{ + char addrBuf[INET6_ADDRSTRLEN]; + + if (inet_ntop(AF_INET6, &pSockaddr6->sin6_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL) + { + addrBuf[0] = '\0'; + } + + return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding]; +} + ++ (uint16_t)portFromSockaddr4:(const struct sockaddr_in *)pSockaddr4 +{ + return ntohs(pSockaddr4->sin_port); +} + ++ (uint16_t)portFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6 +{ + return ntohs(pSockaddr6->sin6_port); +} + ++ (NSURL *)urlFromSockaddrUN:(const struct sockaddr_un *)pSockaddr +{ + NSString *path = [NSString stringWithUTF8String:pSockaddr->sun_path]; + return [NSURL fileURLWithPath:path]; +} + ++ (NSString *)hostFromAddress:(NSData *)address +{ + NSString *host; + + if ([self getHost:&host port:NULL fromAddress:address]) + return host; + else + return nil; +} + ++ (uint16_t)portFromAddress:(NSData *)address +{ + uint16_t port; + + if ([self getHost:NULL port:&port fromAddress:address]) + return port; + else + return 0; +} + ++ (BOOL)isIPv4Address:(NSData *)address +{ + if ([address length] >= sizeof(struct sockaddr)) + { + const struct sockaddr *sockaddrX = [address bytes]; + + if (sockaddrX->sa_family == AF_INET) { + return YES; + } + } + + return NO; +} + ++ (BOOL)isIPv6Address:(NSData *)address +{ + if ([address length] >= sizeof(struct sockaddr)) + { + const struct sockaddr *sockaddrX = [address bytes]; + + if (sockaddrX->sa_family == AF_INET6) { + return YES; + } + } + + return NO; +} + ++ (BOOL)getHost:(NSString **)hostPtr port:(uint16_t *)portPtr fromAddress:(NSData *)address +{ + return [self getHost:hostPtr port:portPtr family:NULL fromAddress:address]; +} + ++ (BOOL)getHost:(NSString **)hostPtr port:(uint16_t *)portPtr family:(sa_family_t *)afPtr fromAddress:(NSData *)address +{ + if ([address length] >= sizeof(struct sockaddr)) + { + const struct sockaddr *sockaddrX = [address bytes]; + + if (sockaddrX->sa_family == AF_INET) + { + if ([address length] >= sizeof(struct sockaddr_in)) + { + struct sockaddr_in sockaddr4; + memcpy(&sockaddr4, sockaddrX, sizeof(sockaddr4)); + + if (hostPtr) *hostPtr = [self hostFromSockaddr4:&sockaddr4]; + if (portPtr) *portPtr = [self portFromSockaddr4:&sockaddr4]; + if (afPtr) *afPtr = AF_INET; + + return YES; + } + } + else if (sockaddrX->sa_family == AF_INET6) + { + if ([address length] >= sizeof(struct sockaddr_in6)) + { + struct sockaddr_in6 sockaddr6; + memcpy(&sockaddr6, sockaddrX, sizeof(sockaddr6)); + + if (hostPtr) *hostPtr = [self hostFromSockaddr6:&sockaddr6]; + if (portPtr) *portPtr = [self portFromSockaddr6:&sockaddr6]; + if (afPtr) *afPtr = AF_INET6; + + return YES; + } + } + } + + return NO; +} + ++ (NSData *)CRLFData +{ + return [NSData dataWithBytes:"\x0D\x0A" length:2]; +} + ++ (NSData *)CRData +{ + return [NSData dataWithBytes:"\x0D" length:1]; +} + ++ (NSData *)LFData +{ + return [NSData dataWithBytes:"\x0A" length:1]; +} + ++ (NSData *)ZeroData +{ + return [NSData dataWithBytes:"" length:1]; +} + +@end diff --git a/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncUdpSocket.h b/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncUdpSocket.h new file mode 100644 index 0000000..99fa715 --- /dev/null +++ b/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncUdpSocket.h @@ -0,0 +1,1036 @@ +// +// MGCDAsyncUdpSocket +// +// This class is in the public domain. +// Originally created by Robbie Hanson of Deusty LLC. +// Updated and maintained by Deusty LLC and the Apple development community. +// +// https://github.com/robbiehanson/CocoaAsyncSocket +// + +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN +extern NSString *const MGCDAsyncUdpSocketException; +extern NSString *const MGCDAsyncUdpSocketErrorDomain; + +extern NSString *const MGCDAsyncUdpSocketQueueName; +extern NSString *const MGCDAsyncUdpSocketThreadName; + +typedef NS_ERROR_ENUM(MGCDAsyncUdpSocketErrorDomain, MGCDAsyncUdpSocketError) { + MGCDAsyncUdpSocketNoError = 0, // Never used + MGCDAsyncUdpSocketBadConfigError, // Invalid configuration + MGCDAsyncUdpSocketBadParamError, // Invalid parameter was passed + MGCDAsyncUdpSocketSendTimeoutError, // A send operation timed out + MGCDAsyncUdpSocketClosedError, // The socket was closed + MGCDAsyncUdpSocketOtherError, // Description provided in userInfo +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +@class MGCDAsyncUdpSocket; + +@protocol MGCDAsyncUdpSocketDelegate +@optional + +/** + * By design, UDP is a connectionless protocol, and connecting is not needed. + * However, you may optionally choose to connect to a particular host for reasons + * outlined in the documentation for the various connect methods listed above. + * + * This method is called if one of the connect methods are invoked, and the connection is successful. +**/ +- (void)udpSocket:(MGCDAsyncUdpSocket *)sock didConnectToAddress:(NSData *)address; + +/** + * By design, UDP is a connectionless protocol, and connecting is not needed. + * However, you may optionally choose to connect to a particular host for reasons + * outlined in the documentation for the various connect methods listed above. + * + * This method is called if one of the connect methods are invoked, and the connection fails. + * This may happen, for example, if a domain name is given for the host and the domain name is unable to be resolved. +**/ +- (void)udpSocket:(MGCDAsyncUdpSocket *)sock didNotConnect:(NSError * _Nullable)error; + +/** + * Called when the datagram with the given tag has been sent. +**/ +- (void)udpSocket:(MGCDAsyncUdpSocket *)sock didSendDataWithTag:(long)tag; + +/** + * Called if an error occurs while trying to send a datagram. + * This could be due to a timeout, or something more serious such as the data being too large to fit in a sigle packet. +**/ +- (void)udpSocket:(MGCDAsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError * _Nullable)error; + +/** + * Called when the socket has received the requested datagram. +**/ +- (void)udpSocket:(MGCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data + fromAddress:(NSData *)address + withFilterContext:(nullable id)filterContext; + +/** + * Called when the socket is closed. +**/ +- (void)udpSocketDidClose:(MGCDAsyncUdpSocket *)sock withError:(NSError * _Nullable)error; + +@end + +/** + * You may optionally set a receive filter for the socket. + * A filter can provide several useful features: + * + * 1. Many times udp packets need to be parsed. + * Since the filter can run in its own independent queue, you can parallelize this parsing quite easily. + * The end result is a parallel socket io, datagram parsing, and packet processing. + * + * 2. Many times udp packets are discarded because they are duplicate/unneeded/unsolicited. + * The filter can prevent such packets from arriving at the delegate. + * And because the filter can run in its own independent queue, this doesn't slow down the delegate. + * + * - Since the udp protocol does not guarantee delivery, udp packets may be lost. + * Many protocols built atop udp thus provide various resend/re-request algorithms. + * This sometimes results in duplicate packets arriving. + * A filter may allow you to architect the duplicate detection code to run in parallel to normal processing. + * + * - Since the udp socket may be connectionless, its possible for unsolicited packets to arrive. + * Such packets need to be ignored. + * + * 3. Sometimes traffic shapers are needed to simulate real world environments. + * A filter allows you to write custom code to simulate such environments. + * The ability to code this yourself is especially helpful when your simulated environment + * is more complicated than simple traffic shaping (e.g. simulating a cone port restricted router), + * or the system tools to handle this aren't available (e.g. on a mobile device). + * + * @param data - The packet that was received. + * @param address - The address the data was received from. + * See utilities section for methods to extract info from address. + * @param context - Out parameter you may optionally set, which will then be passed to the delegate method. + * For example, filter block can parse the data and then, + * pass the parsed data to the delegate. + * + * @returns - YES if the received packet should be passed onto the delegate. + * NO if the received packet should be discarded, and not reported to the delegete. + * + * Example: + * + * MGCDAsyncUdpSocketReceiveFilterBlock filter = ^BOOL (NSData *data, NSData *address, id *context) { + * + * MyProtocolMessage *msg = [MyProtocol parseMessage:data]; + * + * *context = response; + * return (response != nil); + * }; + * [udpSocket setReceiveFilter:filter withQueue:myParsingQueue]; + * +**/ +typedef BOOL (^MGCDAsyncUdpSocketReceiveFilterBlock)(NSData *data, NSData *address, id __nullable * __nonnull context); + +/** + * You may optionally set a send filter for the socket. + * A filter can provide several interesting possibilities: + * + * 1. Optional caching of resolved addresses for domain names. + * The cache could later be consulted, resulting in fewer system calls to getaddrinfo. + * + * 2. Reusable modules of code for bandwidth monitoring. + * + * 3. Sometimes traffic shapers are needed to simulate real world environments. + * A filter allows you to write custom code to simulate such environments. + * The ability to code this yourself is especially helpful when your simulated environment + * is more complicated than simple traffic shaping (e.g. simulating a cone port restricted router), + * or the system tools to handle this aren't available (e.g. on a mobile device). + * + * @param data - The packet that was received. + * @param address - The address the data was received from. + * See utilities section for methods to extract info from address. + * @param tag - The tag that was passed in the send method. + * + * @returns - YES if the packet should actually be sent over the socket. + * NO if the packet should be silently dropped (not sent over the socket). + * + * Regardless of the return value, the delegate will be informed that the packet was successfully sent. + * +**/ +typedef BOOL (^MGCDAsyncUdpSocketSendFilterBlock)(NSData *data, NSData *address, long tag); + + +@interface MGCDAsyncUdpSocket : NSObject + +/** + * MGCDAsyncUdpSocket uses the standard delegate paradigm, + * but executes all delegate callbacks on a given delegate dispatch queue. + * This allows for maximum concurrency, while at the same time providing easy thread safety. + * + * You MUST set a delegate AND delegate dispatch queue before attempting to + * use the socket, or you will get an error. + * + * The socket queue is optional. + * If you pass NULL, MGCDAsyncSocket will automatically create its own socket queue. + * If you choose to provide a socket queue, the socket queue must not be a concurrent queue, + * then please see the discussion for the method markSocketQueueTargetQueue. + * + * The delegate queue and socket queue can optionally be the same. +**/ +- (instancetype)init; +- (instancetype)initWithSocketQueue:(nullable dispatch_queue_t)sq; +- (instancetype)initWithDelegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq; +- (instancetype)initWithDelegate:(nullable id)aDelegate delegateQueue:(nullable dispatch_queue_t)dq socketQueue:(nullable dispatch_queue_t)sq NS_DESIGNATED_INITIALIZER; + +#pragma mark Configuration + +- (nullable id)delegate; +- (void)setDelegate:(nullable id)delegate; +- (void)synchronouslySetDelegate:(nullable id)delegate; + +- (nullable dispatch_queue_t)delegateQueue; +- (void)setDelegateQueue:(nullable dispatch_queue_t)delegateQueue; +- (void)synchronouslySetDelegateQueue:(nullable dispatch_queue_t)delegateQueue; + +- (void)getDelegate:(id __nullable * __nullable)delegatePtr delegateQueue:(dispatch_queue_t __nullable * __nullable)delegateQueuePtr; +- (void)setDelegate:(nullable id)delegate delegateQueue:(nullable dispatch_queue_t)delegateQueue; +- (void)synchronouslySetDelegate:(nullable id)delegate delegateQueue:(nullable dispatch_queue_t)delegateQueue; + +/** + * By default, both IPv4 and IPv6 are enabled. + * + * This means MGCDAsyncUdpSocket automatically supports both protocols, + * and can send to IPv4 or IPv6 addresses, + * as well as receive over IPv4 and IPv6. + * + * For operations that require DNS resolution, MGCDAsyncUdpSocket supports both IPv4 and IPv6. + * If a DNS lookup returns only IPv4 results, MGCDAsyncUdpSocket will automatically use IPv4. + * If a DNS lookup returns only IPv6 results, MGCDAsyncUdpSocket will automatically use IPv6. + * If a DNS lookup returns both IPv4 and IPv6 results, then the protocol used depends on the configured preference. + * If IPv4 is preferred, then IPv4 is used. + * If IPv6 is preferred, then IPv6 is used. + * If neutral, then the first IP version in the resolved array will be used. + * + * Starting with Mac OS X 10.7 Lion and iOS 5, the default IP preference is neutral. + * On prior systems the default IP preference is IPv4. + **/ +- (BOOL)isIPv4Enabled; +- (void)setIPv4Enabled:(BOOL)flag; + +- (BOOL)isIPv6Enabled; +- (void)setIPv6Enabled:(BOOL)flag; + +- (BOOL)isIPv4Preferred; +- (BOOL)isIPv6Preferred; +- (BOOL)isIPVersionNeutral; + +- (void)setPreferIPv4; +- (void)setPreferIPv6; +- (void)setIPVersionNeutral; + +/** + * Gets/Sets the maximum size of the buffer that will be allocated for receive operations. + * The default maximum size is 65535 bytes. + * + * The theoretical maximum size of any IPv4 UDP packet is UINT16_MAX = 65535. + * The theoretical maximum size of any IPv6 UDP packet is UINT32_MAX = 4294967295. + * + * Since the OS/MGCD notifies us of the size of each received UDP packet, + * the actual allocated buffer size for each packet is exact. + * And in practice the size of UDP packets is generally much smaller than the max. + * Indeed most protocols will send and receive packets of only a few bytes, + * or will set a limit on the size of packets to prevent fragmentation in the IP layer. + * + * If you set the buffer size too small, the sockets API in the OS will silently discard + * any extra data, and you will not be notified of the error. +**/ +- (uint16_t)maxReceiveIPv4BufferSize; +- (void)setMaxReceiveIPv4BufferSize:(uint16_t)max; + +- (uint32_t)maxReceiveIPv6BufferSize; +- (void)setMaxReceiveIPv6BufferSize:(uint32_t)max; + +/** + * Gets/Sets the maximum size of the buffer that will be allocated for send operations. + * The default maximum size is 65535 bytes. + * + * Given that a typical link MTU is 1500 bytes, a large UDP datagram will have to be + * fragmented, and that’s both expensive and risky (if one fragment goes missing, the + * entire datagram is lost). You are much better off sending a large number of smaller + * UDP datagrams, preferably using a path MTU algorithm to avoid fragmentation. + * + * You must set it before the sockt is created otherwise it won't work. + * + **/ +- (uint16_t)maxSendBufferSize; +- (void)setMaxSendBufferSize:(uint16_t)max; + +/** + * User data allows you to associate arbitrary information with the socket. + * This data is not used internally in any way. +**/ +- (nullable id)userData; +- (void)setUserData:(nullable id)arbitraryUserData; + +#pragma mark Diagnostics + +/** + * Returns the local address info for the socket. + * + * The localAddress method returns a sockaddr structure wrapped in a NSData object. + * The localHost method returns the human readable IP address as a string. + * + * Note: Address info may not be available until after the socket has been binded, connected + * or until after data has been sent. +**/ +- (nullable NSData *)localAddress; +- (nullable NSString *)localHost; +- (uint16_t)localPort; + +- (nullable NSData *)localAddress_IPv4; +- (nullable NSString *)localHost_IPv4; +- (uint16_t)localPort_IPv4; + +- (nullable NSData *)localAddress_IPv6; +- (nullable NSString *)localHost_IPv6; +- (uint16_t)localPort_IPv6; + +/** + * Returns the remote address info for the socket. + * + * The connectedAddress method returns a sockaddr structure wrapped in a NSData object. + * The connectedHost method returns the human readable IP address as a string. + * + * Note: Since UDP is connectionless by design, connected address info + * will not be available unless the socket is explicitly connected to a remote host/port. + * If the socket is not connected, these methods will return nil / 0. +**/ +- (nullable NSData *)connectedAddress; +- (nullable NSString *)connectedHost; +- (uint16_t)connectedPort; + +/** + * Returns whether or not this socket has been connected to a single host. + * By design, UDP is a connectionless protocol, and connecting is not needed. + * If connected, the socket will only be able to send/receive data to/from the connected host. +**/ +- (BOOL)isConnected; + +/** + * Returns whether or not this socket has been closed. + * The only way a socket can be closed is if you explicitly call one of the close methods. +**/ +- (BOOL)isClosed; + +/** + * Returns whether or not this socket is IPv4. + * + * By default this will be true, unless: + * - IPv4 is disabled (via setIPv4Enabled:) + * - The socket is explicitly bound to an IPv6 address + * - The socket is connected to an IPv6 address +**/ +- (BOOL)isIPv4; + +/** + * Returns whether or not this socket is IPv6. + * + * By default this will be true, unless: + * - IPv6 is disabled (via setIPv6Enabled:) + * - The socket is explicitly bound to an IPv4 address + * _ The socket is connected to an IPv4 address + * + * This method will also return false on platforms that do not support IPv6. + * Note: The iPhone does not currently support IPv6. +**/ +- (BOOL)isIPv6; + +#pragma mark Binding + +/** + * Binds the UDP socket to the given port. + * Binding should be done for server sockets that receive data prior to sending it. + * Client sockets can skip binding, + * as the OS will automatically assign the socket an available port when it starts sending data. + * + * You may optionally pass a port number of zero to immediately bind the socket, + * yet still allow the OS to automatically assign an available port. + * + * You cannot bind a socket after its been connected. + * You can only bind a socket once. + * You can still connect a socket (if desired) after binding. + * + * On success, returns YES. + * Otherwise returns NO, and sets errPtr. If you don't care about the error, you can pass NULL for errPtr. +**/ +- (BOOL)bindToPort:(uint16_t)port error:(NSError **)errPtr; + +/** + * Binds the UDP socket to the given port and optional interface. + * Binding should be done for server sockets that receive data prior to sending it. + * Client sockets can skip binding, + * as the OS will automatically assign the socket an available port when it starts sending data. + * + * You may optionally pass a port number of zero to immediately bind the socket, + * yet still allow the OS to automatically assign an available port. + * + * The interface may be a name (e.g. "en1" or "lo0") or the corresponding IP address (e.g. "192.168.4.35"). + * You may also use the special strings "localhost" or "loopback" to specify that + * the socket only accept packets from the local machine. + * + * You cannot bind a socket after its been connected. + * You can only bind a socket once. + * You can still connect a socket (if desired) after binding. + * + * On success, returns YES. + * Otherwise returns NO, and sets errPtr. If you don't care about the error, you can pass NULL for errPtr. +**/ +- (BOOL)bindToPort:(uint16_t)port interface:(nullable NSString *)interface error:(NSError **)errPtr; + +/** + * Binds the UDP socket to the given address, specified as a sockaddr structure wrapped in a NSData object. + * + * If you have an existing struct sockaddr you can convert it to a NSData object like so: + * struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; + * struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; + * + * Binding should be done for server sockets that receive data prior to sending it. + * Client sockets can skip binding, + * as the OS will automatically assign the socket an available port when it starts sending data. + * + * You cannot bind a socket after its been connected. + * You can only bind a socket once. + * You can still connect a socket (if desired) after binding. + * + * On success, returns YES. + * Otherwise returns NO, and sets errPtr. If you don't care about the error, you can pass NULL for errPtr. +**/ +- (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr; + +#pragma mark Connecting + +/** + * Connects the UDP socket to the given host and port. + * By design, UDP is a connectionless protocol, and connecting is not needed. + * + * Choosing to connect to a specific host/port has the following effect: + * - You will only be able to send data to the connected host/port. + * - You will only be able to receive data from the connected host/port. + * - You will receive ICMP messages that come from the connected host/port, such as "connection refused". + * + * The actual process of connecting a UDP socket does not result in any communication on the socket. + * It simply changes the internal state of the socket. + * + * You cannot bind a socket after it has been connected. + * You can only connect a socket once. + * + * The host may be a domain name (e.g. "deusty.com") or an IP address string (e.g. "192.168.0.2"). + * + * This method is asynchronous as it requires a DNS lookup to resolve the given host name. + * If an obvious error is detected, this method immediately returns NO and sets errPtr. + * If you don't care about the error, you can pass nil for errPtr. + * Otherwise, this method returns YES and begins the asynchronous connection process. + * The result of the asynchronous connection process will be reported via the delegate methods. + **/ +- (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)errPtr; + +/** + * Connects the UDP socket to the given address, specified as a sockaddr structure wrapped in a NSData object. + * + * If you have an existing struct sockaddr you can convert it to a NSData object like so: + * struct sockaddr sa -> NSData *dsa = [NSData dataWithBytes:&remoteAddr length:remoteAddr.sa_len]; + * struct sockaddr *sa -> NSData *dsa = [NSData dataWithBytes:remoteAddr length:remoteAddr->sa_len]; + * + * By design, UDP is a connectionless protocol, and connecting is not needed. + * + * Choosing to connect to a specific address has the following effect: + * - You will only be able to send data to the connected address. + * - You will only be able to receive data from the connected address. + * - You will receive ICMP messages that come from the connected address, such as "connection refused". + * + * Connecting a UDP socket does not result in any communication on the socket. + * It simply changes the internal state of the socket. + * + * You cannot bind a socket after its been connected. + * You can only connect a socket once. + * + * On success, returns YES. + * Otherwise returns NO, and sets errPtr. If you don't care about the error, you can pass nil for errPtr. + * + * Note: Unlike the connectToHost:onPort:error: method, this method does not require a DNS lookup. + * Thus when this method returns, the connection has either failed or fully completed. + * In other words, this method is synchronous, unlike the asynchronous connectToHost::: method. + * However, for compatibility and simplification of delegate code, if this method returns YES + * then the corresponding delegate method (udpSocket:didConnectToHost:port:) is still invoked. +**/ +- (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr; + +#pragma mark Multicast + +/** + * Join multicast group. + * Group should be an IP address (eg @"225.228.0.1"). + * + * On success, returns YES. + * Otherwise returns NO, and sets errPtr. If you don't care about the error, you can pass nil for errPtr. +**/ +- (BOOL)joinMulticastGroup:(NSString *)group error:(NSError **)errPtr; + +/** + * Join multicast group. + * Group should be an IP address (eg @"225.228.0.1"). + * The interface may be a name (e.g. "en1" or "lo0") or the corresponding IP address (e.g. "192.168.4.35"). + * + * On success, returns YES. + * Otherwise returns NO, and sets errPtr. If you don't care about the error, you can pass nil for errPtr. +**/ +- (BOOL)joinMulticastGroup:(NSString *)group onInterface:(nullable NSString *)interface error:(NSError **)errPtr; + +- (BOOL)leaveMulticastGroup:(NSString *)group error:(NSError **)errPtr; +- (BOOL)leaveMulticastGroup:(NSString *)group onInterface:(nullable NSString *)interface error:(NSError **)errPtr; + +/** + * Send multicast on a specified interface. + * For IPv4, interface should be the the IP address of the interface (eg @"192.168.10.1"). + * For IPv6, interface should be the a network interface name (eg @"en0"). + * + * On success, returns YES. + * Otherwise returns NO, and sets errPtr. If you don't care about the error, you can pass nil for errPtr. +**/ + +- (BOOL)sendIPv4MulticastOnInterface:(NSString*)interface error:(NSError **)errPtr; +- (BOOL)sendIPv6MulticastOnInterface:(NSString*)interface error:(NSError **)errPtr; + +#pragma mark Reuse Port + +/** + * By default, only one socket can be bound to a given IP address + port at a time. + * To enable multiple processes to simultaneously bind to the same address+port, + * you need to enable this functionality in the socket. All processes that wish to + * use the address+port simultaneously must all enable reuse port on the socket + * bound to that port. + **/ +- (BOOL)enableReusePort:(BOOL)flag error:(NSError **)errPtr; + +#pragma mark Broadcast + +/** + * By default, the underlying socket in the OS will not allow you to send broadcast messages. + * In order to send broadcast messages, you need to enable this functionality in the socket. + * + * A broadcast is a UDP message to addresses like "192.168.255.255" or "255.255.255.255" that is + * delivered to every host on the network. + * The reason this is generally disabled by default (by the OS) is to prevent + * accidental broadcast messages from flooding the network. +**/ +- (BOOL)enableBroadcast:(BOOL)flag error:(NSError **)errPtr; + +#pragma mark Sending + +/** + * Asynchronously sends the given data, with the given timeout and tag. + * + * This method may only be used with a connected socket. + * Recall that connecting is optional for a UDP socket. + * For connected sockets, data can only be sent to the connected address. + * For non-connected sockets, the remote destination is specified for each packet. + * For more information about optionally connecting udp sockets, see the documentation for the connect methods above. + * + * @param data + * The data to send. + * If data is nil or zero-length, this method does nothing. + * If passing NSMutableData, please read the thread-safety notice below. + * + * @param timeout + * The timeout for the send opeartion. + * If the timeout value is negative, the send operation will not use a timeout. + * + * @param tag + * The tag is for your convenience. + * It is not sent or received over the socket in any manner what-so-ever. + * It is reported back as a parameter in the udpSocket:didSendDataWithTag: + * or udpSocket:didNotSendDataWithTag:dueToError: methods. + * You can use it as an array index, state id, type constant, etc. + * + * + * Thread-Safety Note: + * If the given data parameter is mutable (NSMutableData) then you MUST NOT alter the data while + * the socket is sending it. In other words, it's not safe to alter the data until after the delegate method + * udpSocket:didSendDataWithTag: or udpSocket:didNotSendDataWithTag:dueToError: is invoked signifying + * that this particular send operation has completed. + * This is due to the fact that MGCDAsyncUdpSocket does NOT copy the data. + * It simply retains it for performance reasons. + * Often times, if NSMutableData is passed, it is because a request/response was built up in memory. + * Copying this data adds an unwanted/unneeded overhead. + * If you need to write data from an immutable buffer, and you need to alter the buffer before the socket + * completes sending the bytes (which is NOT immediately after this method returns, but rather at a later time + * when the delegate method notifies you), then you should first copy the bytes, and pass the copy to this method. +**/ +- (void)sendData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * Asynchronously sends the given data, with the given timeout and tag, to the given host and port. + * + * This method cannot be used with a connected socket. + * Recall that connecting is optional for a UDP socket. + * For connected sockets, data can only be sent to the connected address. + * For non-connected sockets, the remote destination is specified for each packet. + * For more information about optionally connecting udp sockets, see the documentation for the connect methods above. + * + * @param data + * The data to send. + * If data is nil or zero-length, this method does nothing. + * If passing NSMutableData, please read the thread-safety notice below. + * + * @param host + * The destination to send the udp packet to. + * May be specified as a domain name (e.g. "deusty.com") or an IP address string (e.g. "192.168.0.2"). + * You may also use the convenience strings of "loopback" or "localhost". + * + * @param port + * The port of the host to send to. + * + * @param timeout + * The timeout for the send opeartion. + * If the timeout value is negative, the send operation will not use a timeout. + * + * @param tag + * The tag is for your convenience. + * It is not sent or received over the socket in any manner what-so-ever. + * It is reported back as a parameter in the udpSocket:didSendDataWithTag: + * or udpSocket:didNotSendDataWithTag:dueToError: methods. + * You can use it as an array index, state id, type constant, etc. + * + * + * Thread-Safety Note: + * If the given data parameter is mutable (NSMutableData) then you MUST NOT alter the data while + * the socket is sending it. In other words, it's not safe to alter the data until after the delegate method + * udpSocket:didSendDataWithTag: or udpSocket:didNotSendDataWithTag:dueToError: is invoked signifying + * that this particular send operation has completed. + * This is due to the fact that MGCDAsyncUdpSocket does NOT copy the data. + * It simply retains it for performance reasons. + * Often times, if NSMutableData is passed, it is because a request/response was built up in memory. + * Copying this data adds an unwanted/unneeded overhead. + * If you need to write data from an immutable buffer, and you need to alter the buffer before the socket + * completes sending the bytes (which is NOT immediately after this method returns, but rather at a later time + * when the delegate method notifies you), then you should first copy the bytes, and pass the copy to this method. +**/ +- (void)sendData:(NSData *)data + toHost:(NSString *)host + port:(uint16_t)port + withTimeout:(NSTimeInterval)timeout + tag:(long)tag; + +/** + * Asynchronously sends the given data, with the given timeout and tag, to the given address. + * + * This method cannot be used with a connected socket. + * Recall that connecting is optional for a UDP socket. + * For connected sockets, data can only be sent to the connected address. + * For non-connected sockets, the remote destination is specified for each packet. + * For more information about optionally connecting udp sockets, see the documentation for the connect methods above. + * + * @param data + * The data to send. + * If data is nil or zero-length, this method does nothing. + * If passing NSMutableData, please read the thread-safety notice below. + * + * @param remoteAddr + * The address to send the data to (specified as a sockaddr structure wrapped in a NSData object). + * + * @param timeout + * The timeout for the send opeartion. + * If the timeout value is negative, the send operation will not use a timeout. + * + * @param tag + * The tag is for your convenience. + * It is not sent or received over the socket in any manner what-so-ever. + * It is reported back as a parameter in the udpSocket:didSendDataWithTag: + * or udpSocket:didNotSendDataWithTag:dueToError: methods. + * You can use it as an array index, state id, type constant, etc. + * + * + * Thread-Safety Note: + * If the given data parameter is mutable (NSMutableData) then you MUST NOT alter the data while + * the socket is sending it. In other words, it's not safe to alter the data until after the delegate method + * udpSocket:didSendDataWithTag: or udpSocket:didNotSendDataWithTag:dueToError: is invoked signifying + * that this particular send operation has completed. + * This is due to the fact that MGCDAsyncUdpSocket does NOT copy the data. + * It simply retains it for performance reasons. + * Often times, if NSMutableData is passed, it is because a request/response was built up in memory. + * Copying this data adds an unwanted/unneeded overhead. + * If you need to write data from an immutable buffer, and you need to alter the buffer before the socket + * completes sending the bytes (which is NOT immediately after this method returns, but rather at a later time + * when the delegate method notifies you), then you should first copy the bytes, and pass the copy to this method. +**/ +- (void)sendData:(NSData *)data toAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout tag:(long)tag; + +/** + * You may optionally set a send filter for the socket. + * A filter can provide several interesting possibilities: + * + * 1. Optional caching of resolved addresses for domain names. + * The cache could later be consulted, resulting in fewer system calls to getaddrinfo. + * + * 2. Reusable modules of code for bandwidth monitoring. + * + * 3. Sometimes traffic shapers are needed to simulate real world environments. + * A filter allows you to write custom code to simulate such environments. + * The ability to code this yourself is especially helpful when your simulated environment + * is more complicated than simple traffic shaping (e.g. simulating a cone port restricted router), + * or the system tools to handle this aren't available (e.g. on a mobile device). + * + * For more information about MGCDAsyncUdpSocketSendFilterBlock, see the documentation for its typedef. + * To remove a previously set filter, invoke this method and pass a nil filterBlock and NULL filterQueue. + * + * Note: This method invokes setSendFilter:withQueue:isAsynchronous: (documented below), + * passing YES for the isAsynchronous parameter. +**/ +- (void)setSendFilter:(nullable MGCDAsyncUdpSocketSendFilterBlock)filterBlock withQueue:(nullable dispatch_queue_t)filterQueue; + +/** + * The receive filter can be run via dispatch_async or dispatch_sync. + * Most typical situations call for asynchronous operation. + * + * However, there are a few situations in which synchronous operation is preferred. + * Such is the case when the filter is extremely minimal and fast. + * This is because dispatch_sync is faster than dispatch_async. + * + * If you choose synchronous operation, be aware of possible deadlock conditions. + * Since the socket queue is executing your block via dispatch_sync, + * then you cannot perform any tasks which may invoke dispatch_sync on the socket queue. + * For example, you can't query properties on the socket. +**/ +- (void)setSendFilter:(nullable MGCDAsyncUdpSocketSendFilterBlock)filterBlock + withQueue:(nullable dispatch_queue_t)filterQueue + isAsynchronous:(BOOL)isAsynchronous; + +#pragma mark Receiving + +/** + * There are two modes of operation for receiving packets: one-at-a-time & continuous. + * + * In one-at-a-time mode, you call receiveOnce everytime your delegate is ready to process an incoming udp packet. + * Receiving packets one-at-a-time may be better suited for implementing certain state machine code, + * where your state machine may not always be ready to process incoming packets. + * + * In continuous mode, the delegate is invoked immediately everytime incoming udp packets are received. + * Receiving packets continuously is better suited to real-time streaming applications. + * + * You may switch back and forth between one-at-a-time mode and continuous mode. + * If the socket is currently in continuous mode, calling this method will switch it to one-at-a-time mode. + * + * When a packet is received (and not filtered by the optional receive filter), + * the delegate method (udpSocket:didReceiveData:fromAddress:withFilterContext:) is invoked. + * + * If the socket is able to begin receiving packets, this method returns YES. + * Otherwise it returns NO, and sets the errPtr with appropriate error information. + * + * An example error: + * You created a udp socket to act as a server, and immediately called receive. + * You forgot to first bind the socket to a port number, and received a error with a message like: + * "Must bind socket before you can receive data." +**/ +- (BOOL)receiveOnce:(NSError **)errPtr; + +/** + * There are two modes of operation for receiving packets: one-at-a-time & continuous. + * + * In one-at-a-time mode, you call receiveOnce everytime your delegate is ready to process an incoming udp packet. + * Receiving packets one-at-a-time may be better suited for implementing certain state machine code, + * where your state machine may not always be ready to process incoming packets. + * + * In continuous mode, the delegate is invoked immediately everytime incoming udp packets are received. + * Receiving packets continuously is better suited to real-time streaming applications. + * + * You may switch back and forth between one-at-a-time mode and continuous mode. + * If the socket is currently in one-at-a-time mode, calling this method will switch it to continuous mode. + * + * For every received packet (not filtered by the optional receive filter), + * the delegate method (udpSocket:didReceiveData:fromAddress:withFilterContext:) is invoked. + * + * If the socket is able to begin receiving packets, this method returns YES. + * Otherwise it returns NO, and sets the errPtr with appropriate error information. + * + * An example error: + * You created a udp socket to act as a server, and immediately called receive. + * You forgot to first bind the socket to a port number, and received a error with a message like: + * "Must bind socket before you can receive data." +**/ +- (BOOL)beginReceiving:(NSError **)errPtr; + +/** + * If the socket is currently receiving (beginReceiving has been called), this method pauses the receiving. + * That is, it won't read any more packets from the underlying OS socket until beginReceiving is called again. + * + * Important Note: + * MGCDAsyncUdpSocket may be running in parallel with your code. + * That is, your delegate is likely running on a separate thread/dispatch_queue. + * When you invoke this method, MGCDAsyncUdpSocket may have already dispatched delegate methods to be invoked. + * Thus, if those delegate methods have already been dispatch_async'd, + * your didReceive delegate method may still be invoked after this method has been called. + * You should be aware of this, and program defensively. +**/ +- (void)pauseReceiving; + +/** + * You may optionally set a receive filter for the socket. + * This receive filter may be set to run in its own queue (independent of delegate queue). + * + * A filter can provide several useful features. + * + * 1. Many times udp packets need to be parsed. + * Since the filter can run in its own independent queue, you can parallelize this parsing quite easily. + * The end result is a parallel socket io, datagram parsing, and packet processing. + * + * 2. Many times udp packets are discarded because they are duplicate/unneeded/unsolicited. + * The filter can prevent such packets from arriving at the delegate. + * And because the filter can run in its own independent queue, this doesn't slow down the delegate. + * + * - Since the udp protocol does not guarantee delivery, udp packets may be lost. + * Many protocols built atop udp thus provide various resend/re-request algorithms. + * This sometimes results in duplicate packets arriving. + * A filter may allow you to architect the duplicate detection code to run in parallel to normal processing. + * + * - Since the udp socket may be connectionless, its possible for unsolicited packets to arrive. + * Such packets need to be ignored. + * + * 3. Sometimes traffic shapers are needed to simulate real world environments. + * A filter allows you to write custom code to simulate such environments. + * The ability to code this yourself is especially helpful when your simulated environment + * is more complicated than simple traffic shaping (e.g. simulating a cone port restricted router), + * or the system tools to handle this aren't available (e.g. on a mobile device). + * + * Example: + * + * MGCDAsyncUdpSocketReceiveFilterBlock filter = ^BOOL (NSData *data, NSData *address, id *context) { + * + * MyProtocolMessage *msg = [MyProtocol parseMessage:data]; + * + * *context = response; + * return (response != nil); + * }; + * [udpSocket setReceiveFilter:filter withQueue:myParsingQueue]; + * + * For more information about MGCDAsyncUdpSocketReceiveFilterBlock, see the documentation for its typedef. + * To remove a previously set filter, invoke this method and pass a nil filterBlock and NULL filterQueue. + * + * Note: This method invokes setReceiveFilter:withQueue:isAsynchronous: (documented below), + * passing YES for the isAsynchronous parameter. +**/ +- (void)setReceiveFilter:(nullable MGCDAsyncUdpSocketReceiveFilterBlock)filterBlock withQueue:(nullable dispatch_queue_t)filterQueue; + +/** + * The receive filter can be run via dispatch_async or dispatch_sync. + * Most typical situations call for asynchronous operation. + * + * However, there are a few situations in which synchronous operation is preferred. + * Such is the case when the filter is extremely minimal and fast. + * This is because dispatch_sync is faster than dispatch_async. + * + * If you choose synchronous operation, be aware of possible deadlock conditions. + * Since the socket queue is executing your block via dispatch_sync, + * then you cannot perform any tasks which may invoke dispatch_sync on the socket queue. + * For example, you can't query properties on the socket. +**/ +- (void)setReceiveFilter:(nullable MGCDAsyncUdpSocketReceiveFilterBlock)filterBlock + withQueue:(nullable dispatch_queue_t)filterQueue + isAsynchronous:(BOOL)isAsynchronous; + +#pragma mark Closing + +/** + * Immediately closes the underlying socket. + * Any pending send operations are discarded. + * + * The MGCDAsyncUdpSocket instance may optionally be used again. + * (it will setup/configure/use another unnderlying BSD socket). +**/ +- (void)close; + +/** + * Closes the underlying socket after all pending send operations have been sent. + * + * The MGCDAsyncUdpSocket instance may optionally be used again. + * (it will setup/configure/use another unnderlying BSD socket). +**/ +- (void)closeAfterSending; + +#pragma mark Advanced +/** + * MGCDAsyncSocket maintains thread safety by using an internal serial dispatch_queue. + * In most cases, the instance creates this queue itself. + * However, to allow for maximum flexibility, the internal queue may be passed in the init method. + * This allows for some advanced options such as controlling socket priority via target queues. + * However, when one begins to use target queues like this, they open the door to some specific deadlock issues. + * + * For example, imagine there are 2 queues: + * dispatch_queue_t socketQueue; + * dispatch_queue_t socketTargetQueue; + * + * If you do this (pseudo-code): + * socketQueue.targetQueue = socketTargetQueue; + * + * Then all socketQueue operations will actually get run on the given socketTargetQueue. + * This is fine and works great in most situations. + * But if you run code directly from within the socketTargetQueue that accesses the socket, + * you could potentially get deadlock. Imagine the following code: + * + * - (BOOL)socketHasSomething + * { + * __block BOOL result = NO; + * dispatch_block_t block = ^{ + * result = [self someInternalMethodToBeRunOnlyOnSocketQueue]; + * } + * if (is_executing_on_queue(socketQueue)) + * block(); + * else + * dispatch_sync(socketQueue, block); + * + * return result; + * } + * + * What happens if you call this method from the socketTargetQueue? The result is deadlock. + * This is because the MGCD API offers no mechanism to discover a queue's targetQueue. + * Thus we have no idea if our socketQueue is configured with a targetQueue. + * If we had this information, we could easily avoid deadlock. + * But, since these API's are missing or unfeasible, you'll have to explicitly set it. + * + * IF you pass a socketQueue via the init method, + * AND you've configured the passed socketQueue with a targetQueue, + * THEN you should pass the end queue in the target hierarchy. + * + * For example, consider the following queue hierarchy: + * socketQueue -> ipQueue -> moduleQueue + * + * This example demonstrates priority shaping within some server. + * All incoming client connections from the same IP address are executed on the same target queue. + * And all connections for a particular module are executed on the same target queue. + * Thus, the priority of all networking for the entire module can be changed on the fly. + * Additionally, networking traffic from a single IP cannot monopolize the module. + * + * Here's how you would accomplish something like that: + * - (dispatch_queue_t)newSocketQueueForConnectionFromAddress:(NSData *)address onSocket:(MGCDAsyncSocket *)sock + * { + * dispatch_queue_t socketQueue = dispatch_queue_create("", NULL); + * dispatch_queue_t ipQueue = [self ipQueueForAddress:address]; + * + * dispatch_set_target_queue(socketQueue, ipQueue); + * dispatch_set_target_queue(iqQueue, moduleQueue); + * + * return socketQueue; + * } + * - (void)socket:(MGCDAsyncSocket *)sock didAcceptNewSocket:(MGCDAsyncSocket *)newSocket + * { + * [clientConnections addObject:newSocket]; + * [newSocket markSocketQueueTargetQueue:moduleQueue]; + * } + * + * Note: This workaround is ONLY needed if you intend to execute code directly on the ipQueue or moduleQueue. + * This is often NOT the case, as such queues are used solely for execution shaping. + **/ +- (void)markSocketQueueTargetQueue:(dispatch_queue_t)socketQueuesPreConfiguredTargetQueue; +- (void)unmarkSocketQueueTargetQueue:(dispatch_queue_t)socketQueuesPreviouslyConfiguredTargetQueue; + +/** + * It's not thread-safe to access certain variables from outside the socket's internal queue. + * + * For example, the socket file descriptor. + * File descriptors are simply integers which reference an index in the per-process file table. + * However, when one requests a new file descriptor (by opening a file or socket), + * the file descriptor returned is guaranteed to be the lowest numbered unused descriptor. + * So if we're not careful, the following could be possible: + * + * - Thread A invokes a method which returns the socket's file descriptor. + * - The socket is closed via the socket's internal queue on thread B. + * - Thread C opens a file, and subsequently receives the file descriptor that was previously the socket's FD. + * - Thread A is now accessing/altering the file instead of the socket. + * + * In addition to this, other variables are not actually objects, + * and thus cannot be retained/released or even autoreleased. + * An example is the sslContext, of type SSLContextRef, which is actually a malloc'd struct. + * + * Although there are internal variables that make it difficult to maintain thread-safety, + * it is important to provide access to these variables + * to ensure this class can be used in a wide array of environments. + * This method helps to accomplish this by invoking the current block on the socket's internal queue. + * The methods below can be invoked from within the block to access + * those generally thread-unsafe internal variables in a thread-safe manner. + * The given block will be invoked synchronously on the socket's internal queue. + * + * If you save references to any protected variables and use them outside the block, you do so at your own peril. +**/ +- (void)performBlock:(dispatch_block_t)block; + +/** + * These methods are only available from within the context of a performBlock: invocation. + * See the documentation for the performBlock: method above. + * + * Provides access to the socket's file descriptor(s). + * If the socket isn't connected, or explicity bound to a particular interface, + * it might actually have multiple internal socket file descriptors - one for IPv4 and one for IPv6. +**/ +- (int)socketFD; +- (int)socket4FD; +- (int)socket6FD; + +#if TARGET_OS_IPHONE + +/** + * These methods are only available from within the context of a performBlock: invocation. + * See the documentation for the performBlock: method above. + * + * Returns (creating if necessary) a CFReadStream/CFWriteStream for the internal socket. + * + * Generally MGCDAsyncUdpSocket doesn't use CFStream. (It uses the faster MGCD API's.) + * However, if you need one for any reason, + * these methods are a convenient way to get access to a safe instance of one. +**/ +- (nullable CFReadStreamRef)readStream; +- (nullable CFWriteStreamRef)writeStream; + +/** + * This method is only available from within the context of a performBlock: invocation. + * See the documentation for the performBlock: method above. + * + * Configures the socket to allow it to operate when the iOS application has been backgrounded. + * In other words, this method creates a read & write stream, and invokes: + * + * CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); + * CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); + * + * Returns YES if successful, NO otherwise. + * + * Example usage: + * + * [asyncUdpSocket performBlock:^{ + * [asyncUdpSocket enableBackgroundingOnSocket]; + * }]; + * + * + * NOTE : Apple doesn't currently support backgrounding UDP sockets. (Only TCP for now). +**/ +//- (BOOL)enableBackgroundingOnSockets; + +#endif + +#pragma mark Utilities + +/** + * Extracting host/port/family information from raw address data. +**/ + ++ (nullable NSString *)hostFromAddress:(NSData *)address; ++ (uint16_t)portFromAddress:(NSData *)address; ++ (int)familyFromAddress:(NSData *)address; + ++ (BOOL)isIPv4Address:(NSData *)address; ++ (BOOL)isIPv6Address:(NSData *)address; + ++ (BOOL)getHost:(NSString * __nullable * __nullable)hostPtr port:(uint16_t * __nullable)portPtr fromAddress:(NSData *)address; ++ (BOOL)getHost:(NSString * __nullable * __nullable)hostPtr port:(uint16_t * __nullable)portPtr family:(int * __nullable)afPtr fromAddress:(NSData *)address; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncUdpSocket.m b/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncUdpSocket.m new file mode 100755 index 0000000..a40fb68 --- /dev/null +++ b/Pods/MqttCocoaAsyncSocket/Source/GCD/MGCDAsyncUdpSocket.m @@ -0,0 +1,5632 @@ +// +// MGCDAsyncUdpSocket +// +// This class is in the public domain. +// Originally created by Robbie Hanson of Deusty LLC. +// Updated and maintained by Deusty LLC and the Apple development community. +// +// https://github.com/robbiehanson/CocoaAsyncSocket +// + +#import "MGCDAsyncUdpSocket.h" + +#if ! __has_feature(objc_arc) +#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC). +// For more information see: https://github.com/robbiehanson/CocoaAsyncSocket/wiki/ARC +#endif + +#if TARGET_OS_IPHONE + #import + #import +#endif + +#import +#import +#import +#import +#import +#import +#import + + +#if 0 + +// Logging Enabled - See log level below + +// Logging uses the CocoaLumberjack framework (which is also MGCD based). +// https://github.com/robbiehanson/CocoaLumberjack +// +// It allows us to do a lot of logging without significantly slowing down the code. +#import "DDLog.h" + +#define LogAsync NO +#define LogContext 65535 + +#define LogObjc(flg, frmt, ...) LOG_OBJC_MAYBE(LogAsync, logLevel, flg, LogContext, frmt, ##__VA_ARGS__) +#define LogC(flg, frmt, ...) LOG_C_MAYBE(LogAsync, logLevel, flg, LogContext, frmt, ##__VA_ARGS__) + +#define LogError(frmt, ...) LogObjc(LOG_FLAG_ERROR, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogWarn(frmt, ...) LogObjc(LOG_FLAG_WARN, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogInfo(frmt, ...) LogObjc(LOG_FLAG_INFO, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogVerbose(frmt, ...) LogObjc(LOG_FLAG_VERBOSE, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) + +#define LogCError(frmt, ...) LogC(LOG_FLAG_ERROR, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogCWarn(frmt, ...) LogC(LOG_FLAG_WARN, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogCInfo(frmt, ...) LogC(LOG_FLAG_INFO, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) +#define LogCVerbose(frmt, ...) LogC(LOG_FLAG_VERBOSE, (@"%@: " frmt), THIS_FILE, ##__VA_ARGS__) + +#define LogTrace() LogObjc(LOG_FLAG_VERBOSE, @"%@: %@", THIS_FILE, THIS_METHOD) +#define LogCTrace() LogC(LOG_FLAG_VERBOSE, @"%@: %s", THIS_FILE, __FUNCTION__) + +// Log levels : off, error, warn, info, verbose +static const int logLevel = LOG_LEVEL_VERBOSE; + +#else + +// Logging Disabled + +#define LogError(frmt, ...) {} +#define LogWarn(frmt, ...) {} +#define LogInfo(frmt, ...) {} +#define LogVerbose(frmt, ...) {} + +#define LogCError(frmt, ...) {} +#define LogCWarn(frmt, ...) {} +#define LogCInfo(frmt, ...) {} +#define LogCVerbose(frmt, ...) {} + +#define LogTrace() {} +#define LogCTrace(frmt, ...) {} + +#endif + +/** + * Seeing a return statements within an inner block + * can sometimes be mistaken for a return point of the enclosing method. + * This makes inline blocks a bit easier to read. +**/ +#define return_from_block return + +/** + * A socket file descriptor is really just an integer. + * It represents the index of the socket within the kernel. + * This makes invalid file descriptor comparisons easier to read. +**/ +#define SOCKET_NULL -1 + +/** + * Just to type less code. +**/ +#define AutoreleasedBlock(block) ^{ @autoreleasepool { block(); }} + + +@class MGCDAsyncUdpSendPacket; + +NSString *const MGCDAsyncUdpSocketException = @"MGCDAsyncUdpSocketException"; +NSString *const MGCDAsyncUdpSocketErrorDomain = @"MGCDAsyncUdpSocketErrorDomain"; + +NSString *const MGCDAsyncUdpSocketQueueName = @"MGCDAsyncUdpSocket"; +NSString *const MGCDAsyncUdpSocketThreadName = @"MGCDAsyncUdpSocket-CFStream"; + +enum MGCDAsyncUdpSocketFlags +{ + kDidCreateSockets = 1 << 0, // If set, the sockets have been created. + kDidBind = 1 << 1, // If set, bind has been called. + kConnecting = 1 << 2, // If set, a connection attempt is in progress. + kDidConnect = 1 << 3, // If set, socket is connected. + kReceiveOnce = 1 << 4, // If set, one-at-a-time receive is enabled + kReceiveContinuous = 1 << 5, // If set, continuous receive is enabled + kIPv4Deactivated = 1 << 6, // If set, socket4 was closed due to bind or connect on IPv6. + kIPv6Deactivated = 1 << 7, // If set, socket6 was closed due to bind or connect on IPv4. + kSend4SourceSuspended = 1 << 8, // If set, send4Source is suspended. + kSend6SourceSuspended = 1 << 9, // If set, send6Source is suspended. + kReceive4SourceSuspended = 1 << 10, // If set, receive4Source is suspended. + kReceive6SourceSuspended = 1 << 11, // If set, receive6Source is suspended. + kSock4CanAcceptBytes = 1 << 12, // If set, we know socket4 can accept bytes. If unset, it's unknown. + kSock6CanAcceptBytes = 1 << 13, // If set, we know socket6 can accept bytes. If unset, it's unknown. + kForbidSendReceive = 1 << 14, // If set, no new send or receive operations are allowed to be queued. + kCloseAfterSends = 1 << 15, // If set, close as soon as no more sends are queued. + kFlipFlop = 1 << 16, // Used to alternate between IPv4 and IPv6 sockets. +#if TARGET_OS_IPHONE + kAddedStreamListener = 1 << 17, // If set, CFStreams have been added to listener thread +#endif +}; + +enum MGCDAsyncUdpSocketConfig +{ + kIPv4Disabled = 1 << 0, // If set, IPv4 is disabled + kIPv6Disabled = 1 << 1, // If set, IPv6 is disabled + kPreferIPv4 = 1 << 2, // If set, IPv4 is preferred over IPv6 + kPreferIPv6 = 1 << 3, // If set, IPv6 is preferred over IPv4 +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +@interface MGCDAsyncUdpSocket () +{ +#if __has_feature(objc_arc_weak) + __weak id delegate; +#else + __unsafe_unretained id delegate; +#endif + dispatch_queue_t delegateQueue; + + MGCDAsyncUdpSocketReceiveFilterBlock receiveFilterBlock; + dispatch_queue_t receiveFilterQueue; + BOOL receiveFilterAsync; + + MGCDAsyncUdpSocketSendFilterBlock sendFilterBlock; + dispatch_queue_t sendFilterQueue; + BOOL sendFilterAsync; + + uint32_t flags; + uint16_t config; + + uint16_t max4ReceiveSize; + uint32_t max6ReceiveSize; + + uint16_t maxSendSize; + + int socket4FD; + int socket6FD; + + dispatch_queue_t socketQueue; + + dispatch_source_t send4Source; + dispatch_source_t send6Source; + dispatch_source_t receive4Source; + dispatch_source_t receive6Source; + dispatch_source_t sendTimer; + + MGCDAsyncUdpSendPacket *currentSend; + NSMutableArray *sendQueue; + + unsigned long socket4FDBytesAvailable; + unsigned long socket6FDBytesAvailable; + + uint32_t pendingFilterOperations; + + NSData *cachedLocalAddress4; + NSString *cachedLocalHost4; + uint16_t cachedLocalPort4; + + NSData *cachedLocalAddress6; + NSString *cachedLocalHost6; + uint16_t cachedLocalPort6; + + NSData *cachedConnectedAddress; + NSString *cachedConnectedHost; + uint16_t cachedConnectedPort; + int cachedConnectedFamily; + + void *IsOnSocketQueueOrTargetQueueKey; + +#if TARGET_OS_IPHONE + CFStreamClientContext streamContext; + CFReadStreamRef readStream4; + CFReadStreamRef readStream6; + CFWriteStreamRef writeStream4; + CFWriteStreamRef writeStream6; +#endif + + id userData; +} + +- (void)resumeSend4Source; +- (void)resumeSend6Source; +- (void)resumeReceive4Source; +- (void)resumeReceive6Source; +- (void)closeSockets; + +- (void)maybeConnect; +- (BOOL)connectWithAddress4:(NSData *)address4 error:(NSError **)errPtr; +- (BOOL)connectWithAddress6:(NSData *)address6 error:(NSError **)errPtr; + +- (void)maybeDequeueSend; +- (void)doPreSend; +- (void)doSend; +- (void)endCurrentSend; +- (void)setupSendTimerWithTimeout:(NSTimeInterval)timeout; + +- (void)doReceive; +- (void)doReceiveEOF; + +- (void)closeWithError:(NSError *)error; + +- (BOOL)performMulticastRequest:(int)requestType forGroup:(NSString *)group onInterface:(NSString *)interface error:(NSError **)errPtr; + +#if TARGET_OS_IPHONE +- (BOOL)createReadAndWriteStreams:(NSError **)errPtr; +- (BOOL)registerForStreamCallbacks:(NSError **)errPtr; +- (BOOL)addStreamsToRunLoop:(NSError **)errPtr; +- (BOOL)openStreams:(NSError **)errPtr; +- (void)removeStreamsFromRunLoop; +- (void)closeReadAndWriteStreams; +#endif + ++ (NSString *)hostFromSockaddr4:(const struct sockaddr_in *)pSockaddr4; ++ (NSString *)hostFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6; ++ (uint16_t)portFromSockaddr4:(const struct sockaddr_in *)pSockaddr4; ++ (uint16_t)portFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6; + +#if TARGET_OS_IPHONE +// Forward declaration ++ (void)listenerThread:(id)unused; +#endif + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * The MGCDAsyncUdpSendPacket encompasses the instructions for a single send/write. +**/ +@interface MGCDAsyncUdpSendPacket : NSObject { +@public + NSData *buffer; + NSTimeInterval timeout; + long tag; + + BOOL resolveInProgress; + BOOL filterInProgress; + + NSArray *resolvedAddresses; + NSError *resolveError; + + NSData *address; + int addressFamily; +} + +- (instancetype)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i NS_DESIGNATED_INITIALIZER; + +@end + +@implementation MGCDAsyncUdpSendPacket + +// Cover the superclass' designated initializer +- (instancetype)init NS_UNAVAILABLE +{ + NSAssert(0, @"Use the designated initializer"); + return nil; +} + +- (instancetype)initWithData:(NSData *)d timeout:(NSTimeInterval)t tag:(long)i +{ + if ((self = [super init])) + { + buffer = d; + timeout = t; + tag = i; + + resolveInProgress = NO; + } + return self; +} + + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +@interface MGCDAsyncUdpSpecialPacket : NSObject { +@public +// uint8_t type; + + BOOL resolveInProgress; + + NSArray *addresses; + NSError *error; +} + +- (instancetype)init NS_DESIGNATED_INITIALIZER; + +@end + +@implementation MGCDAsyncUdpSpecialPacket + +- (instancetype)init +{ + self = [super init]; + return self; +} + + +@end + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark - +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +@implementation MGCDAsyncUdpSocket + +- (instancetype)init +{ + LogTrace(); + + return [self initWithDelegate:nil delegateQueue:NULL socketQueue:NULL]; +} + +- (instancetype)initWithSocketQueue:(dispatch_queue_t)sq +{ + LogTrace(); + + return [self initWithDelegate:nil delegateQueue:NULL socketQueue:sq]; +} + +- (instancetype)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq +{ + LogTrace(); + + return [self initWithDelegate:aDelegate delegateQueue:dq socketQueue:NULL]; +} + +- (instancetype)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq socketQueue:(dispatch_queue_t)sq +{ + LogTrace(); + + if ((self = [super init])) + { + delegate = aDelegate; + + if (dq) + { + delegateQueue = dq; + #if !OS_OBJECT_USE_OBJC + dispatch_retain(delegateQueue); + #endif + } + + max4ReceiveSize = 65535; + max6ReceiveSize = 65535; + + maxSendSize = 65535; + + socket4FD = SOCKET_NULL; + socket6FD = SOCKET_NULL; + + if (sq) + { + NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), + @"The given socketQueue parameter must not be a concurrent queue."); + NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), + @"The given socketQueue parameter must not be a concurrent queue."); + NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), + @"The given socketQueue parameter must not be a concurrent queue."); + + socketQueue = sq; + #if !OS_OBJECT_USE_OBJC + dispatch_retain(socketQueue); + #endif + } + else + { + socketQueue = dispatch_queue_create([MGCDAsyncUdpSocketQueueName UTF8String], NULL); + } + + // The dispatch_queue_set_specific() and dispatch_get_specific() functions take a "void *key" parameter. + // From the documentation: + // + // > Keys are only compared as pointers and are never dereferenced. + // > Thus, you can use a pointer to a static variable for a specific subsystem or + // > any other value that allows you to identify the value uniquely. + // + // We're just going to use the memory address of an ivar. + // Specifically an ivar that is explicitly named for our purpose to make the code more readable. + // + // However, it feels tedious (and less readable) to include the "&" all the time: + // dispatch_get_specific(&IsOnSocketQueueOrTargetQueueKey) + // + // So we're going to make it so it doesn't matter if we use the '&' or not, + // by assigning the value of the ivar to the address of the ivar. + // Thus: IsOnSocketQueueOrTargetQueueKey == &IsOnSocketQueueOrTargetQueueKey; + + IsOnSocketQueueOrTargetQueueKey = &IsOnSocketQueueOrTargetQueueKey; + + void *nonNullUnusedPointer = (__bridge void *)self; + dispatch_queue_set_specific(socketQueue, IsOnSocketQueueOrTargetQueueKey, nonNullUnusedPointer, NULL); + + currentSend = nil; + sendQueue = [[NSMutableArray alloc] initWithCapacity:5]; + + #if TARGET_OS_IPHONE + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(applicationWillEnterForeground:) + name:UIApplicationWillEnterForegroundNotification + object:nil]; + #endif + } + return self; +} + +- (void)dealloc +{ + LogInfo(@"%@ - %@ (start)", THIS_METHOD, self); + +#if TARGET_OS_IPHONE + [[NSNotificationCenter defaultCenter] removeObserver:self]; +#endif + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + [self closeWithError:nil]; + } + else + { + dispatch_sync(socketQueue, ^{ + [self closeWithError:nil]; + }); + } + + delegate = nil; + #if !OS_OBJECT_USE_OBJC + if (delegateQueue) dispatch_release(delegateQueue); + #endif + delegateQueue = NULL; + + #if !OS_OBJECT_USE_OBJC + if (socketQueue) dispatch_release(socketQueue); + #endif + socketQueue = NULL; + + LogInfo(@"%@ - %@ (finish)", THIS_METHOD, self); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Configuration +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (id)delegate +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return delegate; + } + else + { + __block id result = nil; + + dispatch_sync(socketQueue, ^{ + result = self->delegate; + }); + + return result; + } +} + +- (void)setDelegate:(id)newDelegate synchronously:(BOOL)synchronously +{ + dispatch_block_t block = ^{ + self->delegate = newDelegate; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { + block(); + } + else { + if (synchronously) + dispatch_sync(socketQueue, block); + else + dispatch_async(socketQueue, block); + } +} + +- (void)setDelegate:(id)newDelegate +{ + [self setDelegate:newDelegate synchronously:NO]; +} + +- (void)synchronouslySetDelegate:(id)newDelegate +{ + [self setDelegate:newDelegate synchronously:YES]; +} + +- (dispatch_queue_t)delegateQueue +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + return delegateQueue; + } + else + { + __block dispatch_queue_t result = NULL; + + dispatch_sync(socketQueue, ^{ + result = self->delegateQueue; + }); + + return result; + } +} + +- (void)setDelegateQueue:(dispatch_queue_t)newDelegateQueue synchronously:(BOOL)synchronously +{ + dispatch_block_t block = ^{ + + #if !OS_OBJECT_USE_OBJC + if (self->delegateQueue) dispatch_release(self->delegateQueue); + if (newDelegateQueue) dispatch_retain(newDelegateQueue); + #endif + + self->delegateQueue = newDelegateQueue; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { + block(); + } + else { + if (synchronously) + dispatch_sync(socketQueue, block); + else + dispatch_async(socketQueue, block); + } +} + +- (void)setDelegateQueue:(dispatch_queue_t)newDelegateQueue +{ + [self setDelegateQueue:newDelegateQueue synchronously:NO]; +} + +- (void)synchronouslySetDelegateQueue:(dispatch_queue_t)newDelegateQueue +{ + [self setDelegateQueue:newDelegateQueue synchronously:YES]; +} + +- (void)getDelegate:(id *)delegatePtr delegateQueue:(dispatch_queue_t *)delegateQueuePtr +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + if (delegatePtr) *delegatePtr = delegate; + if (delegateQueuePtr) *delegateQueuePtr = delegateQueue; + } + else + { + __block id dPtr = NULL; + __block dispatch_queue_t dqPtr = NULL; + + dispatch_sync(socketQueue, ^{ + dPtr = self->delegate; + dqPtr = self->delegateQueue; + }); + + if (delegatePtr) *delegatePtr = dPtr; + if (delegateQueuePtr) *delegateQueuePtr = dqPtr; + } +} + +- (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue synchronously:(BOOL)synchronously +{ + dispatch_block_t block = ^{ + + self->delegate = newDelegate; + + #if !OS_OBJECT_USE_OBJC + if (self->delegateQueue) dispatch_release(self->delegateQueue); + if (newDelegateQueue) dispatch_retain(newDelegateQueue); + #endif + + self->delegateQueue = newDelegateQueue; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) { + block(); + } + else { + if (synchronously) + dispatch_sync(socketQueue, block); + else + dispatch_async(socketQueue, block); + } +} + +- (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue +{ + [self setDelegate:newDelegate delegateQueue:newDelegateQueue synchronously:NO]; +} + +- (void)synchronouslySetDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQueue +{ + [self setDelegate:newDelegate delegateQueue:newDelegateQueue synchronously:YES]; +} + +- (BOOL)isIPv4Enabled +{ + // Note: YES means kIPv4Disabled is OFF + + __block BOOL result = NO; + + dispatch_block_t block = ^{ + + result = ((self->config & kIPv4Disabled) == 0); + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (void)setIPv4Enabled:(BOOL)flag +{ + // Note: YES means kIPv4Disabled is OFF + + dispatch_block_t block = ^{ + + LogVerbose(@"%@ %@", THIS_METHOD, (flag ? @"YES" : @"NO")); + + if (flag) + self->config &= ~kIPv4Disabled; + else + self->config |= kIPv4Disabled; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (BOOL)isIPv6Enabled +{ + // Note: YES means kIPv6Disabled is OFF + + __block BOOL result = NO; + + dispatch_block_t block = ^{ + + result = ((self->config & kIPv6Disabled) == 0); + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (void)setIPv6Enabled:(BOOL)flag +{ + // Note: YES means kIPv6Disabled is OFF + + dispatch_block_t block = ^{ + + LogVerbose(@"%@ %@", THIS_METHOD, (flag ? @"YES" : @"NO")); + + if (flag) + self->config &= ~kIPv6Disabled; + else + self->config |= kIPv6Disabled; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (BOOL)isIPv4Preferred +{ + __block BOOL result = NO; + + dispatch_block_t block = ^{ + result = (self->config & kPreferIPv4) ? YES : NO; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (BOOL)isIPv6Preferred +{ + __block BOOL result = NO; + + dispatch_block_t block = ^{ + result = (self->config & kPreferIPv6) ? YES : NO; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (BOOL)isIPVersionNeutral +{ + __block BOOL result = NO; + + dispatch_block_t block = ^{ + result = (self->config & (kPreferIPv4 | kPreferIPv6)) == 0; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (void)setPreferIPv4 +{ + dispatch_block_t block = ^{ + + LogTrace(); + + self->config |= kPreferIPv4; + self->config &= ~kPreferIPv6; + + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (void)setPreferIPv6 +{ + dispatch_block_t block = ^{ + + LogTrace(); + + self->config &= ~kPreferIPv4; + self->config |= kPreferIPv6; + + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (void)setIPVersionNeutral +{ + dispatch_block_t block = ^{ + + LogTrace(); + + self->config &= ~kPreferIPv4; + self->config &= ~kPreferIPv6; + + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (uint16_t)maxReceiveIPv4BufferSize +{ + __block uint16_t result = 0; + + dispatch_block_t block = ^{ + + result = self->max4ReceiveSize; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (void)setMaxReceiveIPv4BufferSize:(uint16_t)max +{ + dispatch_block_t block = ^{ + + LogVerbose(@"%@ %u", THIS_METHOD, (unsigned)max); + + self->max4ReceiveSize = max; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (uint32_t)maxReceiveIPv6BufferSize +{ + __block uint32_t result = 0; + + dispatch_block_t block = ^{ + + result = self->max6ReceiveSize; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (void)setMaxReceiveIPv6BufferSize:(uint32_t)max +{ + dispatch_block_t block = ^{ + + LogVerbose(@"%@ %u", THIS_METHOD, (unsigned)max); + + self->max6ReceiveSize = max; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (void)setMaxSendBufferSize:(uint16_t)max +{ + dispatch_block_t block = ^{ + + LogVerbose(@"%@ %u", THIS_METHOD, (unsigned)max); + + self->maxSendSize = max; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (uint16_t)maxSendBufferSize +{ + __block uint16_t result = 0; + + dispatch_block_t block = ^{ + + result = self->maxSendSize; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (id)userData +{ + __block id result = nil; + + dispatch_block_t block = ^{ + + result = self->userData; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (void)setUserData:(id)arbitraryUserData +{ + dispatch_block_t block = ^{ + + if (self->userData != arbitraryUserData) + { + self->userData = arbitraryUserData; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Delegate Helpers +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)notifyDidConnectToAddress:(NSData *)anAddress +{ + LogTrace(); + + __strong id theDelegate = delegate; + if (delegateQueue && [theDelegate respondsToSelector:@selector(udpSocket:didConnectToAddress:)]) + { + NSData *address = [anAddress copy]; // In case param is NSMutableData + + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate udpSocket:self didConnectToAddress:address]; + }}); + } +} + +- (void)notifyDidNotConnect:(NSError *)error +{ + LogTrace(); + + __strong id theDelegate = delegate; + if (delegateQueue && [theDelegate respondsToSelector:@selector(udpSocket:didNotConnect:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate udpSocket:self didNotConnect:error]; + }}); + } +} + +- (void)notifyDidSendDataWithTag:(long)tag +{ + LogTrace(); + + __strong id theDelegate = delegate; + if (delegateQueue && [theDelegate respondsToSelector:@selector(udpSocket:didSendDataWithTag:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate udpSocket:self didSendDataWithTag:tag]; + }}); + } +} + +- (void)notifyDidNotSendDataWithTag:(long)tag dueToError:(NSError *)error +{ + LogTrace(); + + __strong id theDelegate = delegate; + if (delegateQueue && [theDelegate respondsToSelector:@selector(udpSocket:didNotSendDataWithTag:dueToError:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate udpSocket:self didNotSendDataWithTag:tag dueToError:error]; + }}); + } +} + +- (void)notifyDidReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)context +{ + LogTrace(); + + SEL selector = @selector(udpSocket:didReceiveData:fromAddress:withFilterContext:); + + __strong id theDelegate = delegate; + if (delegateQueue && [theDelegate respondsToSelector:selector]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate udpSocket:self didReceiveData:data fromAddress:address withFilterContext:context]; + }}); + } +} + +- (void)notifyDidCloseWithError:(NSError *)error +{ + LogTrace(); + + __strong id theDelegate = delegate; + if (delegateQueue && [theDelegate respondsToSelector:@selector(udpSocketDidClose:withError:)]) + { + dispatch_async(delegateQueue, ^{ @autoreleasepool { + + [theDelegate udpSocketDidClose:self withError:error]; + }}); + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Errors +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (NSError *)badConfigError:(NSString *)errMsg +{ + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncUdpSocketErrorDomain + code:MGCDAsyncUdpSocketBadConfigError + userInfo:userInfo]; +} + +- (NSError *)badParamError:(NSString *)errMsg +{ + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncUdpSocketErrorDomain + code:MGCDAsyncUdpSocketBadParamError + userInfo:userInfo]; +} + +- (NSError *)gaiError:(int)gai_error +{ + NSString *errMsg = [NSString stringWithCString:gai_strerror(gai_error) encoding:NSASCIIStringEncoding]; + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:@"kCFStreamErrorDomainNetDB" code:gai_error userInfo:userInfo]; +} + +- (NSError *)errnoErrorWithReason:(NSString *)reason +{ + NSString *errMsg = [NSString stringWithUTF8String:strerror(errno)]; + NSDictionary *userInfo; + + if (reason) + userInfo = @{NSLocalizedDescriptionKey : errMsg, + NSLocalizedFailureReasonErrorKey : reason}; + else + userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:NSPOSIXErrorDomain code:errno userInfo:userInfo]; +} + +- (NSError *)errnoError +{ + return [self errnoErrorWithReason:nil]; +} + +/** + * Returns a standard send timeout error. +**/ +- (NSError *)sendTimeoutError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncUdpSocketSendTimeoutError", + @"MGCDAsyncUdpSocket", [NSBundle mainBundle], + @"Send operation timed out", nil); + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncUdpSocketErrorDomain + code:MGCDAsyncUdpSocketSendTimeoutError + userInfo:userInfo]; +} + +- (NSError *)socketClosedError +{ + NSString *errMsg = NSLocalizedStringWithDefaultValue(@"MGCDAsyncUdpSocketClosedError", + @"MGCDAsyncUdpSocket", [NSBundle mainBundle], + @"Socket closed", nil); + + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncUdpSocketErrorDomain code:MGCDAsyncUdpSocketClosedError userInfo:userInfo]; +} + +- (NSError *)otherError:(NSString *)errMsg +{ + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : errMsg}; + + return [NSError errorWithDomain:MGCDAsyncUdpSocketErrorDomain + code:MGCDAsyncUdpSocketOtherError + userInfo:userInfo]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Utilities +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)preOp:(NSError **)errPtr +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + if (delegate == nil) // Must have delegate set + { + if (errPtr) + { + NSString *msg = @"Attempting to use socket without a delegate. Set a delegate first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + if (delegateQueue == NULL) // Must have delegate queue set + { + if (errPtr) + { + NSString *msg = @"Attempting to use socket without a delegate queue. Set a delegate queue first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + return YES; +} + +/** + * This method executes on a global concurrent queue. + * When complete, it executes the given completion block on the socketQueue. +**/ +- (void)asyncResolveHost:(NSString *)aHost + port:(uint16_t)port + withCompletionBlock:(void (^)(NSArray *addresses, NSError *error))completionBlock +{ + LogTrace(); + + // Check parameter(s) + + if (aHost == nil) + { + NSString *msg = @"The host param is nil. Should be domain name or IP address string."; + NSError *error = [self badParamError:msg]; + + // We should still use dispatch_async since this method is expected to be asynchronous + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + completionBlock(nil, error); + }}); + + return; + } + + // It's possible that the given aHost parameter is actually a NSMutableString. + // So we want to copy it now, within this block that will be executed synchronously. + // This way the asynchronous lookup block below doesn't have to worry about it changing. + + NSString *host = [aHost copy]; + + + dispatch_queue_t globalConcurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); + dispatch_async(globalConcurrentQueue, ^{ @autoreleasepool { + + NSMutableArray *addresses = [NSMutableArray arrayWithCapacity:2]; + NSError *error = nil; + + if ([host isEqualToString:@"localhost"] || [host isEqualToString:@"loopback"]) + { + // Use LOOPBACK address + struct sockaddr_in sockaddr4; + memset(&sockaddr4, 0, sizeof(sockaddr4)); + + sockaddr4.sin_len = sizeof(struct sockaddr_in); + sockaddr4.sin_family = AF_INET; + sockaddr4.sin_port = htons(port); + sockaddr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + + struct sockaddr_in6 sockaddr6; + memset(&sockaddr6, 0, sizeof(sockaddr6)); + + sockaddr6.sin6_len = sizeof(struct sockaddr_in6); + sockaddr6.sin6_family = AF_INET6; + sockaddr6.sin6_port = htons(port); + sockaddr6.sin6_addr = in6addr_loopback; + + // Wrap the native address structures and add to list + [addresses addObject:[NSData dataWithBytes:&sockaddr4 length:sizeof(sockaddr4)]]; + [addresses addObject:[NSData dataWithBytes:&sockaddr6 length:sizeof(sockaddr6)]]; + } + else + { + NSString *portStr = [NSString stringWithFormat:@"%hu", port]; + + struct addrinfo hints, *res, *res0; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_protocol = IPPROTO_UDP; + + int gai_error = getaddrinfo([host UTF8String], [portStr UTF8String], &hints, &res0); + + if (gai_error) + { + error = [self gaiError:gai_error]; + } + else + { + for(res = res0; res; res = res->ai_next) + { + if (res->ai_family == AF_INET) + { + // Found IPv4 address + // Wrap the native address structure and add to list + + [addresses addObject:[NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]]; + } + else if (res->ai_family == AF_INET6) + { + + // Fixes connection issues with IPv6, it is the same solution for udp socket. + // https://github.com/robbiehanson/CocoaAsyncSocket/issues/429#issuecomment-222477158 + struct sockaddr_in6 *sockaddr = (struct sockaddr_in6 *)(void *)res->ai_addr; + in_port_t *portPtr = &sockaddr->sin6_port; + if ((portPtr != NULL) && (*portPtr == 0)) { + *portPtr = htons(port); + } + + // Found IPv6 address + // Wrap the native address structure and add to list + [addresses addObject:[NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]]; + } + } + freeaddrinfo(res0); + + if ([addresses count] == 0) + { + error = [self gaiError:EAI_FAIL]; + } + } + } + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + completionBlock(addresses, error); + }}); + + }}); +} + +/** + * This method picks an address from the given list of addresses. + * The address picked depends upon which protocols are disabled, deactived, & preferred. + * + * Returns the address family (AF_INET or AF_INET6) of the picked address, + * or AF_UNSPEC and the corresponding error is there's a problem. +**/ +- (int)getAddress:(NSData **)addressPtr error:(NSError **)errorPtr fromAddresses:(NSArray *)addresses +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert([addresses count] > 0, @"Expected at least one address"); + + int resultAF = AF_UNSPEC; + NSData *resultAddress = nil; + NSError *resultError = nil; + + // Check for problems + + BOOL resolvedIPv4Address = NO; + BOOL resolvedIPv6Address = NO; + + for (NSData *address in addresses) + { + switch ([[self class] familyFromAddress:address]) + { + case AF_INET : resolvedIPv4Address = YES; break; + case AF_INET6 : resolvedIPv6Address = YES; break; + + default : NSAssert(NO, @"Addresses array contains invalid address"); + } + } + + BOOL isIPv4Disabled = (config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && !resolvedIPv6Address) + { + NSString *msg = @"IPv4 has been disabled and DNS lookup found no IPv6 address(es)."; + resultError = [self otherError:msg]; + + if (addressPtr) *addressPtr = resultAddress; + if (errorPtr) *errorPtr = resultError; + + return resultAF; + } + + if (isIPv6Disabled && !resolvedIPv4Address) + { + NSString *msg = @"IPv6 has been disabled and DNS lookup found no IPv4 address(es)."; + resultError = [self otherError:msg]; + + if (addressPtr) *addressPtr = resultAddress; + if (errorPtr) *errorPtr = resultError; + + return resultAF; + } + + BOOL isIPv4Deactivated = (flags & kIPv4Deactivated) ? YES : NO; + BOOL isIPv6Deactivated = (flags & kIPv6Deactivated) ? YES : NO; + + if (isIPv4Deactivated && !resolvedIPv6Address) + { + NSString *msg = @"IPv4 has been deactivated due to bind/connect, and DNS lookup found no IPv6 address(es)."; + resultError = [self otherError:msg]; + + if (addressPtr) *addressPtr = resultAddress; + if (errorPtr) *errorPtr = resultError; + + return resultAF; + } + + if (isIPv6Deactivated && !resolvedIPv4Address) + { + NSString *msg = @"IPv6 has been deactivated due to bind/connect, and DNS lookup found no IPv4 address(es)."; + resultError = [self otherError:msg]; + + if (addressPtr) *addressPtr = resultAddress; + if (errorPtr) *errorPtr = resultError; + + return resultAF; + } + + // Extract first IPv4 and IPv6 address in list + + BOOL ipv4WasFirstInList = YES; + NSData *address4 = nil; + NSData *address6 = nil; + + for (NSData *address in addresses) + { + int af = [[self class] familyFromAddress:address]; + + if (af == AF_INET) + { + if (address4 == nil) + { + address4 = address; + + if (address6) + break; + else + ipv4WasFirstInList = YES; + } + } + else // af == AF_INET6 + { + if (address6 == nil) + { + address6 = address; + + if (address4) + break; + else + ipv4WasFirstInList = NO; + } + } + } + + // Determine socket type + + BOOL preferIPv4 = (config & kPreferIPv4) ? YES : NO; + BOOL preferIPv6 = (config & kPreferIPv6) ? YES : NO; + + BOOL useIPv4 = ((preferIPv4 && address4) || (address6 == nil)); + BOOL useIPv6 = ((preferIPv6 && address6) || (address4 == nil)); + + NSAssert(!(preferIPv4 && preferIPv6), @"Invalid config state"); + NSAssert(!(useIPv4 && useIPv6), @"Invalid logic"); + + if (useIPv4 || (!useIPv6 && ipv4WasFirstInList)) + { + resultAF = AF_INET; + resultAddress = address4; + } + else + { + resultAF = AF_INET6; + resultAddress = address6; + } + + if (addressPtr) *addressPtr = resultAddress; + if (errorPtr) *errorPtr = resultError; + + return resultAF; +} + +/** + * Finds the address(es) of an interface description. + * An inteface description may be an interface name (en0, en1, lo0) or corresponding IP (192.168.4.34). +**/ +- (void)convertIntefaceDescription:(NSString *)interfaceDescription + port:(uint16_t)port + intoAddress4:(NSData **)interfaceAddr4Ptr + address6:(NSData **)interfaceAddr6Ptr +{ + NSData *addr4 = nil; + NSData *addr6 = nil; + + if (interfaceDescription == nil) + { + // ANY address + + struct sockaddr_in sockaddr4; + memset(&sockaddr4, 0, sizeof(sockaddr4)); + + sockaddr4.sin_len = sizeof(sockaddr4); + sockaddr4.sin_family = AF_INET; + sockaddr4.sin_port = htons(port); + sockaddr4.sin_addr.s_addr = htonl(INADDR_ANY); + + struct sockaddr_in6 sockaddr6; + memset(&sockaddr6, 0, sizeof(sockaddr6)); + + sockaddr6.sin6_len = sizeof(sockaddr6); + sockaddr6.sin6_family = AF_INET6; + sockaddr6.sin6_port = htons(port); + sockaddr6.sin6_addr = in6addr_any; + + addr4 = [NSData dataWithBytes:&sockaddr4 length:sizeof(sockaddr4)]; + addr6 = [NSData dataWithBytes:&sockaddr6 length:sizeof(sockaddr6)]; + } + else if ([interfaceDescription isEqualToString:@"localhost"] || + [interfaceDescription isEqualToString:@"loopback"]) + { + // LOOPBACK address + + struct sockaddr_in sockaddr4; + memset(&sockaddr4, 0, sizeof(sockaddr4)); + + sockaddr4.sin_len = sizeof(struct sockaddr_in); + sockaddr4.sin_family = AF_INET; + sockaddr4.sin_port = htons(port); + sockaddr4.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + + struct sockaddr_in6 sockaddr6; + memset(&sockaddr6, 0, sizeof(sockaddr6)); + + sockaddr6.sin6_len = sizeof(struct sockaddr_in6); + sockaddr6.sin6_family = AF_INET6; + sockaddr6.sin6_port = htons(port); + sockaddr6.sin6_addr = in6addr_loopback; + + addr4 = [NSData dataWithBytes:&sockaddr4 length:sizeof(sockaddr4)]; + addr6 = [NSData dataWithBytes:&sockaddr6 length:sizeof(sockaddr6)]; + } + else + { + const char *iface = [interfaceDescription UTF8String]; + + struct ifaddrs *addrs; + const struct ifaddrs *cursor; + + if ((getifaddrs(&addrs) == 0)) + { + cursor = addrs; + while (cursor != NULL) + { + if ((addr4 == nil) && (cursor->ifa_addr->sa_family == AF_INET)) + { + // IPv4 + + struct sockaddr_in *addr = (struct sockaddr_in *)(void *)cursor->ifa_addr; + + if (strcmp(cursor->ifa_name, iface) == 0) + { + // Name match + + struct sockaddr_in nativeAddr4 = *addr; + nativeAddr4.sin_port = htons(port); + + addr4 = [NSData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; + } + else + { + char ip[INET_ADDRSTRLEN]; + + const char *conversion; + conversion = inet_ntop(AF_INET, &addr->sin_addr, ip, sizeof(ip)); + + if ((conversion != NULL) && (strcmp(ip, iface) == 0)) + { + // IP match + + struct sockaddr_in nativeAddr4 = *addr; + nativeAddr4.sin_port = htons(port); + + addr4 = [NSData dataWithBytes:&nativeAddr4 length:sizeof(nativeAddr4)]; + } + } + } + else if ((addr6 == nil) && (cursor->ifa_addr->sa_family == AF_INET6)) + { + // IPv6 + + const struct sockaddr_in6 *addr = (const struct sockaddr_in6 *)(const void *)cursor->ifa_addr; + + if (strcmp(cursor->ifa_name, iface) == 0) + { + // Name match + + struct sockaddr_in6 nativeAddr6 = *addr; + nativeAddr6.sin6_port = htons(port); + + addr6 = [NSData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; + } + else + { + char ip[INET6_ADDRSTRLEN]; + + const char *conversion; + conversion = inet_ntop(AF_INET6, &addr->sin6_addr, ip, sizeof(ip)); + + if ((conversion != NULL) && (strcmp(ip, iface) == 0)) + { + // IP match + + struct sockaddr_in6 nativeAddr6 = *addr; + nativeAddr6.sin6_port = htons(port); + + addr6 = [NSData dataWithBytes:&nativeAddr6 length:sizeof(nativeAddr6)]; + } + } + } + + cursor = cursor->ifa_next; + } + + freeifaddrs(addrs); + } + } + + if (interfaceAddr4Ptr) *interfaceAddr4Ptr = addr4; + if (interfaceAddr6Ptr) *interfaceAddr6Ptr = addr6; +} + +/** + * Converts a numeric hostname into its corresponding address. + * The hostname is expected to be an IPv4 or IPv6 address represented as a human-readable string. (e.g. 192.168.4.34) +**/ +- (void)convertNumericHost:(NSString *)numericHost + port:(uint16_t)port + intoAddress4:(NSData **)addr4Ptr + address6:(NSData **)addr6Ptr +{ + NSData *addr4 = nil; + NSData *addr6 = nil; + + if (numericHost) + { + NSString *portStr = [NSString stringWithFormat:@"%hu", port]; + + struct addrinfo hints, *res, *res0; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_protocol = IPPROTO_UDP; + hints.ai_flags = AI_NUMERICHOST; // No name resolution should be attempted + + if (getaddrinfo([numericHost UTF8String], [portStr UTF8String], &hints, &res0) == 0) + { + for (res = res0; res; res = res->ai_next) + { + if ((addr4 == nil) && (res->ai_family == AF_INET)) + { + // Found IPv4 address + // Wrap the native address structure + addr4 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]; + } + else if ((addr6 == nil) && (res->ai_family == AF_INET6)) + { + // Found IPv6 address + // Wrap the native address structure + addr6 = [NSData dataWithBytes:res->ai_addr length:res->ai_addrlen]; + } + } + freeaddrinfo(res0); + } + } + + if (addr4Ptr) *addr4Ptr = addr4; + if (addr6Ptr) *addr6Ptr = addr6; +} + +- (BOOL)isConnectedToAddress4:(NSData *)someAddr4 +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert(flags & kDidConnect, @"Not connected"); + NSAssert(cachedConnectedAddress, @"Expected cached connected address"); + + if (cachedConnectedFamily != AF_INET) + { + return NO; + } + + const struct sockaddr_in *sSockaddr4 = (const struct sockaddr_in *)[someAddr4 bytes]; + const struct sockaddr_in *cSockaddr4 = (const struct sockaddr_in *)[cachedConnectedAddress bytes]; + + if (memcmp(&sSockaddr4->sin_addr, &cSockaddr4->sin_addr, sizeof(struct in_addr)) != 0) + { + return NO; + } + if (memcmp(&sSockaddr4->sin_port, &cSockaddr4->sin_port, sizeof(in_port_t)) != 0) + { + return NO; + } + + return YES; +} + +- (BOOL)isConnectedToAddress6:(NSData *)someAddr6 +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert(flags & kDidConnect, @"Not connected"); + NSAssert(cachedConnectedAddress, @"Expected cached connected address"); + + if (cachedConnectedFamily != AF_INET6) + { + return NO; + } + + const struct sockaddr_in6 *sSockaddr6 = (const struct sockaddr_in6 *)[someAddr6 bytes]; + const struct sockaddr_in6 *cSockaddr6 = (const struct sockaddr_in6 *)[cachedConnectedAddress bytes]; + + if (memcmp(&sSockaddr6->sin6_addr, &cSockaddr6->sin6_addr, sizeof(struct in6_addr)) != 0) + { + return NO; + } + if (memcmp(&sSockaddr6->sin6_port, &cSockaddr6->sin6_port, sizeof(in_port_t)) != 0) + { + return NO; + } + + return YES; +} + +- (unsigned int)indexOfInterfaceAddr4:(NSData *)interfaceAddr4 +{ + if (interfaceAddr4 == nil) + return 0; + if ([interfaceAddr4 length] != sizeof(struct sockaddr_in)) + return 0; + + int result = 0; + const struct sockaddr_in *ifaceAddr = (const struct sockaddr_in *)[interfaceAddr4 bytes]; + + struct ifaddrs *addrs; + const struct ifaddrs *cursor; + + if ((getifaddrs(&addrs) == 0)) + { + cursor = addrs; + while (cursor != NULL) + { + if (cursor->ifa_addr->sa_family == AF_INET) + { + // IPv4 + + const struct sockaddr_in *addr = (const struct sockaddr_in *)(const void *)cursor->ifa_addr; + + if (memcmp(&addr->sin_addr, &ifaceAddr->sin_addr, sizeof(struct in_addr)) == 0) + { + result = if_nametoindex(cursor->ifa_name); + break; + } + } + + cursor = cursor->ifa_next; + } + + freeifaddrs(addrs); + } + + return result; +} + +- (unsigned int)indexOfInterfaceAddr6:(NSData *)interfaceAddr6 +{ + if (interfaceAddr6 == nil) + return 0; + if ([interfaceAddr6 length] != sizeof(struct sockaddr_in6)) + return 0; + + int result = 0; + const struct sockaddr_in6 *ifaceAddr = (const struct sockaddr_in6 *)[interfaceAddr6 bytes]; + + struct ifaddrs *addrs; + const struct ifaddrs *cursor; + + if ((getifaddrs(&addrs) == 0)) + { + cursor = addrs; + while (cursor != NULL) + { + if (cursor->ifa_addr->sa_family == AF_INET6) + { + // IPv6 + + const struct sockaddr_in6 *addr = (const struct sockaddr_in6 *)(const void *)cursor->ifa_addr; + + if (memcmp(&addr->sin6_addr, &ifaceAddr->sin6_addr, sizeof(struct in6_addr)) == 0) + { + result = if_nametoindex(cursor->ifa_name); + break; + } + } + + cursor = cursor->ifa_next; + } + + freeifaddrs(addrs); + } + + return result; +} + +- (void)setupSendAndReceiveSourcesForSocket4 +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + send4Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_WRITE, socket4FD, 0, socketQueue); + receive4Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, socket4FD, 0, socketQueue); + + // Setup event handlers + + dispatch_source_set_event_handler(send4Source, ^{ @autoreleasepool { + + LogVerbose(@"send4EventBlock"); + LogVerbose(@"dispatch_source_get_data(send4Source) = %lu", dispatch_source_get_data(send4Source)); + + self->flags |= kSock4CanAcceptBytes; + + // If we're ready to send data, do so immediately. + // Otherwise pause the send source or it will continue to fire over and over again. + + if (self->currentSend == nil) + { + LogVerbose(@"Nothing to send"); + [self suspendSend4Source]; + } + else if (self->currentSend->resolveInProgress) + { + LogVerbose(@"currentSend - waiting for address resolve"); + [self suspendSend4Source]; + } + else if (self->currentSend->filterInProgress) + { + LogVerbose(@"currentSend - waiting on sendFilter"); + [self suspendSend4Source]; + } + else + { + [self doSend]; + } + + }}); + + dispatch_source_set_event_handler(receive4Source, ^{ @autoreleasepool { + + LogVerbose(@"receive4EventBlock"); + + self->socket4FDBytesAvailable = dispatch_source_get_data(self->receive4Source); + LogVerbose(@"socket4FDBytesAvailable: %lu", socket4FDBytesAvailable); + + if (self->socket4FDBytesAvailable > 0) + [self doReceive]; + else + [self doReceiveEOF]; + + }}); + + // Setup cancel handlers + + __block int socketFDRefCount = 2; + + int theSocketFD = socket4FD; + + #if !OS_OBJECT_USE_OBJC + dispatch_source_t theSendSource = send4Source; + dispatch_source_t theReceiveSource = receive4Source; + #endif + + dispatch_source_set_cancel_handler(send4Source, ^{ + + LogVerbose(@"send4CancelBlock"); + + #if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(send4Source)"); + dispatch_release(theSendSource); + #endif + + if (--socketFDRefCount == 0) + { + LogVerbose(@"close(socket4FD)"); + close(theSocketFD); + } + }); + + dispatch_source_set_cancel_handler(receive4Source, ^{ + + LogVerbose(@"receive4CancelBlock"); + + #if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(receive4Source)"); + dispatch_release(theReceiveSource); + #endif + + if (--socketFDRefCount == 0) + { + LogVerbose(@"close(socket4FD)"); + close(theSocketFD); + } + }); + + // We will not be able to receive until the socket is bound to a port, + // either explicitly via bind, or implicitly by connect or by sending data. + // + // But we should be able to send immediately. + + socket4FDBytesAvailable = 0; + flags |= kSock4CanAcceptBytes; + + flags |= kSend4SourceSuspended; + flags |= kReceive4SourceSuspended; +} + +- (void)setupSendAndReceiveSourcesForSocket6 +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + send6Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_WRITE, socket6FD, 0, socketQueue); + receive6Source = dispatch_source_create(DISPATCH_SOURCE_TYPE_READ, socket6FD, 0, socketQueue); + + // Setup event handlers + + dispatch_source_set_event_handler(send6Source, ^{ @autoreleasepool { + + LogVerbose(@"send6EventBlock"); + LogVerbose(@"dispatch_source_get_data(send6Source) = %lu", dispatch_source_get_data(send6Source)); + + self->flags |= kSock6CanAcceptBytes; + + // If we're ready to send data, do so immediately. + // Otherwise pause the send source or it will continue to fire over and over again. + + if (self->currentSend == nil) + { + LogVerbose(@"Nothing to send"); + [self suspendSend6Source]; + } + else if (self->currentSend->resolveInProgress) + { + LogVerbose(@"currentSend - waiting for address resolve"); + [self suspendSend6Source]; + } + else if (self->currentSend->filterInProgress) + { + LogVerbose(@"currentSend - waiting on sendFilter"); + [self suspendSend6Source]; + } + else + { + [self doSend]; + } + + }}); + + dispatch_source_set_event_handler(receive6Source, ^{ @autoreleasepool { + + LogVerbose(@"receive6EventBlock"); + + self->socket6FDBytesAvailable = dispatch_source_get_data(self->receive6Source); + LogVerbose(@"socket6FDBytesAvailable: %lu", socket6FDBytesAvailable); + + if (self->socket6FDBytesAvailable > 0) + [self doReceive]; + else + [self doReceiveEOF]; + + }}); + + // Setup cancel handlers + + __block int socketFDRefCount = 2; + + int theSocketFD = socket6FD; + + #if !OS_OBJECT_USE_OBJC + dispatch_source_t theSendSource = send6Source; + dispatch_source_t theReceiveSource = receive6Source; + #endif + + dispatch_source_set_cancel_handler(send6Source, ^{ + + LogVerbose(@"send6CancelBlock"); + + #if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(send6Source)"); + dispatch_release(theSendSource); + #endif + + if (--socketFDRefCount == 0) + { + LogVerbose(@"close(socket6FD)"); + close(theSocketFD); + } + }); + + dispatch_source_set_cancel_handler(receive6Source, ^{ + + LogVerbose(@"receive6CancelBlock"); + + #if !OS_OBJECT_USE_OBJC + LogVerbose(@"dispatch_release(receive6Source)"); + dispatch_release(theReceiveSource); + #endif + + if (--socketFDRefCount == 0) + { + LogVerbose(@"close(socket6FD)"); + close(theSocketFD); + } + }); + + // We will not be able to receive until the socket is bound to a port, + // either explicitly via bind, or implicitly by connect or by sending data. + // + // But we should be able to send immediately. + + socket6FDBytesAvailable = 0; + flags |= kSock6CanAcceptBytes; + + flags |= kSend6SourceSuspended; + flags |= kReceive6SourceSuspended; +} + +- (BOOL)createSocket4:(BOOL)useIPv4 socket6:(BOOL)useIPv6 error:(NSError * __autoreleasing *)errPtr +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert(((flags & kDidCreateSockets) == 0), @"Sockets have already been created"); + + // CreateSocket Block + // This block will be invoked below. + + int(^createSocket)(int) = ^int (int domain) { + + int socketFD = socket(domain, SOCK_DGRAM, 0); + + if (socketFD == SOCKET_NULL) + { + if (errPtr) + *errPtr = [self errnoErrorWithReason:@"Error in socket() function"]; + + return SOCKET_NULL; + } + + int status; + + // Set socket options + + status = fcntl(socketFD, F_SETFL, O_NONBLOCK); + if (status == -1) + { + if (errPtr) + *errPtr = [self errnoErrorWithReason:@"Error enabling non-blocking IO on socket (fcntl)"]; + + close(socketFD); + return SOCKET_NULL; + } + + int reuseaddr = 1; + status = setsockopt(socketFD, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr)); + if (status == -1) + { + if (errPtr) + *errPtr = [self errnoErrorWithReason:@"Error enabling address reuse (setsockopt)"]; + + close(socketFD); + return SOCKET_NULL; + } + + int nosigpipe = 1; + status = setsockopt(socketFD, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(nosigpipe)); + if (status == -1) + { + if (errPtr) + *errPtr = [self errnoErrorWithReason:@"Error disabling sigpipe (setsockopt)"]; + + close(socketFD); + return SOCKET_NULL; + } + + /** + * The theoretical maximum size of any IPv4 UDP packet is UINT16_MAX = 65535. + * The theoretical maximum size of any IPv6 UDP packet is UINT32_MAX = 4294967295. + * + * The default maximum size of the UDP buffer in iOS is 9216 bytes. + * + * This is the reason of #222(MGCD does not necessarily return the size of an entire UDP packet) and + * #535(MGCDAsyncUDPSocket can not send data when data is greater than 9K) + * + * + * Enlarge the maximum size of UDP packet. + * I can not ensure the protocol type now so that the max size is set to 65535 :) + **/ + + status = setsockopt(socketFD, SOL_SOCKET, SO_SNDBUF, (const char*)&self->maxSendSize, sizeof(int)); + if (status == -1) + { + if (errPtr) + *errPtr = [self errnoErrorWithReason:@"Error setting send buffer size (setsockopt)"]; + close(socketFD); + return SOCKET_NULL; + } + + status = setsockopt(socketFD, SOL_SOCKET, SO_RCVBUF, (const char*)&self->maxSendSize, sizeof(int)); + if (status == -1) + { + if (errPtr) + *errPtr = [self errnoErrorWithReason:@"Error setting receive buffer size (setsockopt)"]; + close(socketFD); + return SOCKET_NULL; + } + + + return socketFD; + }; + + // Create sockets depending upon given configuration. + + if (useIPv4) + { + LogVerbose(@"Creating IPv4 socket"); + + socket4FD = createSocket(AF_INET); + if (socket4FD == SOCKET_NULL) + { + // errPtr set in local createSocket() block + return NO; + } + } + + if (useIPv6) + { + LogVerbose(@"Creating IPv6 socket"); + + socket6FD = createSocket(AF_INET6); + if (socket6FD == SOCKET_NULL) + { + // errPtr set in local createSocket() block + + if (socket4FD != SOCKET_NULL) + { + close(socket4FD); + socket4FD = SOCKET_NULL; + } + + return NO; + } + } + + // Setup send and receive sources + + if (useIPv4) + [self setupSendAndReceiveSourcesForSocket4]; + if (useIPv6) + [self setupSendAndReceiveSourcesForSocket6]; + + flags |= kDidCreateSockets; + return YES; +} + +- (BOOL)createSockets:(NSError **)errPtr +{ + LogTrace(); + + BOOL useIPv4 = [self isIPv4Enabled]; + BOOL useIPv6 = [self isIPv6Enabled]; + + return [self createSocket4:useIPv4 socket6:useIPv6 error:errPtr]; +} + +- (void)suspendSend4Source +{ + if (send4Source && !(flags & kSend4SourceSuspended)) + { + LogVerbose(@"dispatch_suspend(send4Source)"); + + dispatch_suspend(send4Source); + flags |= kSend4SourceSuspended; + } +} + +- (void)suspendSend6Source +{ + if (send6Source && !(flags & kSend6SourceSuspended)) + { + LogVerbose(@"dispatch_suspend(send6Source)"); + + dispatch_suspend(send6Source); + flags |= kSend6SourceSuspended; + } +} + +- (void)resumeSend4Source +{ + if (send4Source && (flags & kSend4SourceSuspended)) + { + LogVerbose(@"dispatch_resume(send4Source)"); + + dispatch_resume(send4Source); + flags &= ~kSend4SourceSuspended; + } +} + +- (void)resumeSend6Source +{ + if (send6Source && (flags & kSend6SourceSuspended)) + { + LogVerbose(@"dispatch_resume(send6Source)"); + + dispatch_resume(send6Source); + flags &= ~kSend6SourceSuspended; + } +} + +- (void)suspendReceive4Source +{ + if (receive4Source && !(flags & kReceive4SourceSuspended)) + { + LogVerbose(@"dispatch_suspend(receive4Source)"); + + dispatch_suspend(receive4Source); + flags |= kReceive4SourceSuspended; + } +} + +- (void)suspendReceive6Source +{ + if (receive6Source && !(flags & kReceive6SourceSuspended)) + { + LogVerbose(@"dispatch_suspend(receive6Source)"); + + dispatch_suspend(receive6Source); + flags |= kReceive6SourceSuspended; + } +} + +- (void)resumeReceive4Source +{ + if (receive4Source && (flags & kReceive4SourceSuspended)) + { + LogVerbose(@"dispatch_resume(receive4Source)"); + + dispatch_resume(receive4Source); + flags &= ~kReceive4SourceSuspended; + } +} + +- (void)resumeReceive6Source +{ + if (receive6Source && (flags & kReceive6SourceSuspended)) + { + LogVerbose(@"dispatch_resume(receive6Source)"); + + dispatch_resume(receive6Source); + flags &= ~kReceive6SourceSuspended; + } +} + +- (void)closeSocket4 +{ + if (socket4FD != SOCKET_NULL) + { + LogVerbose(@"dispatch_source_cancel(send4Source)"); + dispatch_source_cancel(send4Source); + + LogVerbose(@"dispatch_source_cancel(receive4Source)"); + dispatch_source_cancel(receive4Source); + + // For some crazy reason (in my opinion), cancelling a dispatch source doesn't + // invoke the cancel handler if the dispatch source is paused. + // So we have to unpause the source if needed. + // This allows the cancel handler to be run, which in turn releases the source and closes the socket. + + [self resumeSend4Source]; + [self resumeReceive4Source]; + + // The sockets will be closed by the cancel handlers of the corresponding source + + send4Source = NULL; + receive4Source = NULL; + + socket4FD = SOCKET_NULL; + + // Clear socket states + + socket4FDBytesAvailable = 0; + flags &= ~kSock4CanAcceptBytes; + + // Clear cached info + + cachedLocalAddress4 = nil; + cachedLocalHost4 = nil; + cachedLocalPort4 = 0; + } +} + +- (void)closeSocket6 +{ + if (socket6FD != SOCKET_NULL) + { + LogVerbose(@"dispatch_source_cancel(send6Source)"); + dispatch_source_cancel(send6Source); + + LogVerbose(@"dispatch_source_cancel(receive6Source)"); + dispatch_source_cancel(receive6Source); + + // For some crazy reason (in my opinion), cancelling a dispatch source doesn't + // invoke the cancel handler if the dispatch source is paused. + // So we have to unpause the source if needed. + // This allows the cancel handler to be run, which in turn releases the source and closes the socket. + + [self resumeSend6Source]; + [self resumeReceive6Source]; + + send6Source = NULL; + receive6Source = NULL; + + // The sockets will be closed by the cancel handlers of the corresponding source + + socket6FD = SOCKET_NULL; + + // Clear socket states + + socket6FDBytesAvailable = 0; + flags &= ~kSock6CanAcceptBytes; + + // Clear cached info + + cachedLocalAddress6 = nil; + cachedLocalHost6 = nil; + cachedLocalPort6 = 0; + } +} + +- (void)closeSockets +{ + [self closeSocket4]; + [self closeSocket6]; + + flags &= ~kDidCreateSockets; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Diagnostics +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)getLocalAddress:(NSData **)dataPtr + host:(NSString **)hostPtr + port:(uint16_t *)portPtr + forSocket:(int)socketFD + withFamily:(int)socketFamily +{ + + NSData *data = nil; + NSString *host = nil; + uint16_t port = 0; + + if (socketFamily == AF_INET) + { + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if (getsockname(socketFD, (struct sockaddr *)&sockaddr4, &sockaddr4len) == 0) + { + data = [NSData dataWithBytes:&sockaddr4 length:sockaddr4len]; + host = [[self class] hostFromSockaddr4:&sockaddr4]; + port = [[self class] portFromSockaddr4:&sockaddr4]; + } + else + { + LogWarn(@"Error in getsockname: %@", [self errnoError]); + } + } + else if (socketFamily == AF_INET6) + { + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if (getsockname(socketFD, (struct sockaddr *)&sockaddr6, &sockaddr6len) == 0) + { + data = [NSData dataWithBytes:&sockaddr6 length:sockaddr6len]; + host = [[self class] hostFromSockaddr6:&sockaddr6]; + port = [[self class] portFromSockaddr6:&sockaddr6]; + } + else + { + LogWarn(@"Error in getsockname: %@", [self errnoError]); + } + } + + if (dataPtr) *dataPtr = data; + if (hostPtr) *hostPtr = host; + if (portPtr) *portPtr = port; + + return (data != nil); +} + +- (void)maybeUpdateCachedLocalAddress4Info +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + if ( cachedLocalAddress4 || ((flags & kDidBind) == 0) || (socket4FD == SOCKET_NULL) ) + { + return; + } + + NSData *address = nil; + NSString *host = nil; + uint16_t port = 0; + + if ([self getLocalAddress:&address host:&host port:&port forSocket:socket4FD withFamily:AF_INET]) + { + + cachedLocalAddress4 = address; + cachedLocalHost4 = host; + cachedLocalPort4 = port; + } +} + +- (void)maybeUpdateCachedLocalAddress6Info +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + if ( cachedLocalAddress6 || ((flags & kDidBind) == 0) || (socket6FD == SOCKET_NULL) ) + { + return; + } + + NSData *address = nil; + NSString *host = nil; + uint16_t port = 0; + + if ([self getLocalAddress:&address host:&host port:&port forSocket:socket6FD withFamily:AF_INET6]) + { + + cachedLocalAddress6 = address; + cachedLocalHost6 = host; + cachedLocalPort6 = port; + } +} + +- (NSData *)localAddress +{ + __block NSData *result = nil; + + dispatch_block_t block = ^{ + + if (self->socket4FD != SOCKET_NULL) + { + [self maybeUpdateCachedLocalAddress4Info]; + result = self->cachedLocalAddress4; + } + else + { + [self maybeUpdateCachedLocalAddress6Info]; + result = self->cachedLocalAddress6; + } + + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (NSString *)localHost +{ + __block NSString *result = nil; + + dispatch_block_t block = ^{ + + if (self->socket4FD != SOCKET_NULL) + { + [self maybeUpdateCachedLocalAddress4Info]; + result = self->cachedLocalHost4; + } + else + { + [self maybeUpdateCachedLocalAddress6Info]; + result = self->cachedLocalHost6; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (uint16_t)localPort +{ + __block uint16_t result = 0; + + dispatch_block_t block = ^{ + + if (self->socket4FD != SOCKET_NULL) + { + [self maybeUpdateCachedLocalAddress4Info]; + result = self->cachedLocalPort4; + } + else + { + [self maybeUpdateCachedLocalAddress6Info]; + result = self->cachedLocalPort6; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (NSData *)localAddress_IPv4 +{ + __block NSData *result = nil; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedLocalAddress4Info]; + result = self->cachedLocalAddress4; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (NSString *)localHost_IPv4 +{ + __block NSString *result = nil; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedLocalAddress4Info]; + result = self->cachedLocalHost4; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (uint16_t)localPort_IPv4 +{ + __block uint16_t result = 0; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedLocalAddress4Info]; + result = self->cachedLocalPort4; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (NSData *)localAddress_IPv6 +{ + __block NSData *result = nil; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedLocalAddress6Info]; + result = self->cachedLocalAddress6; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (NSString *)localHost_IPv6 +{ + __block NSString *result = nil; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedLocalAddress6Info]; + result = self->cachedLocalHost6; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (uint16_t)localPort_IPv6 +{ + __block uint16_t result = 0; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedLocalAddress6Info]; + result = self->cachedLocalPort6; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (void)maybeUpdateCachedConnectedAddressInfo +{ + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + if (cachedConnectedAddress || (flags & kDidConnect) == 0) + { + return; + } + + NSData *data = nil; + NSString *host = nil; + uint16_t port = 0; + int family = AF_UNSPEC; + + if (socket4FD != SOCKET_NULL) + { + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + if (getpeername(socket4FD, (struct sockaddr *)&sockaddr4, &sockaddr4len) == 0) + { + data = [NSData dataWithBytes:&sockaddr4 length:sockaddr4len]; + host = [[self class] hostFromSockaddr4:&sockaddr4]; + port = [[self class] portFromSockaddr4:&sockaddr4]; + family = AF_INET; + } + else + { + LogWarn(@"Error in getpeername: %@", [self errnoError]); + } + } + else if (socket6FD != SOCKET_NULL) + { + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + if (getpeername(socket6FD, (struct sockaddr *)&sockaddr6, &sockaddr6len) == 0) + { + data = [NSData dataWithBytes:&sockaddr6 length:sockaddr6len]; + host = [[self class] hostFromSockaddr6:&sockaddr6]; + port = [[self class] portFromSockaddr6:&sockaddr6]; + family = AF_INET6; + } + else + { + LogWarn(@"Error in getpeername: %@", [self errnoError]); + } + } + + + cachedConnectedAddress = data; + cachedConnectedHost = host; + cachedConnectedPort = port; + cachedConnectedFamily = family; +} + +- (NSData *)connectedAddress +{ + __block NSData *result = nil; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedConnectedAddressInfo]; + result = self->cachedConnectedAddress; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (NSString *)connectedHost +{ + __block NSString *result = nil; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedConnectedAddressInfo]; + result = self->cachedConnectedHost; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (uint16_t)connectedPort +{ + __block uint16_t result = 0; + + dispatch_block_t block = ^{ + + [self maybeUpdateCachedConnectedAddressInfo]; + result = self->cachedConnectedPort; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, AutoreleasedBlock(block)); + + return result; +} + +- (BOOL)isConnected +{ + __block BOOL result = NO; + + dispatch_block_t block = ^{ + result = (self->flags & kDidConnect) ? YES : NO; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (BOOL)isClosed +{ + __block BOOL result = YES; + + dispatch_block_t block = ^{ + + result = (self->flags & kDidCreateSockets) ? NO : YES; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (BOOL)isIPv4 +{ + __block BOOL result = NO; + + dispatch_block_t block = ^{ + + if (self->flags & kDidCreateSockets) + { + result = (self->socket4FD != SOCKET_NULL); + } + else + { + result = [self isIPv4Enabled]; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +- (BOOL)isIPv6 +{ + __block BOOL result = NO; + + dispatch_block_t block = ^{ + + if (self->flags & kDidCreateSockets) + { + result = (self->socket6FD != SOCKET_NULL); + } + else + { + result = [self isIPv6Enabled]; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + return result; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Binding +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * This method runs through the various checks required prior to a bind attempt. + * It is shared between the various bind methods. +**/ +- (BOOL)preBind:(NSError **)errPtr +{ + if (![self preOp:errPtr]) + { + return NO; + } + + if (flags & kDidBind) + { + if (errPtr) + { + NSString *msg = @"Cannot bind a socket more than once."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + if ((flags & kConnecting) || (flags & kDidConnect)) + { + if (errPtr) + { + NSString *msg = @"Cannot bind after connecting. If needed, bind first, then connect."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + BOOL isIPv4Disabled = (config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && isIPv6Disabled) // Must have IPv4 or IPv6 enabled + { + if (errPtr) + { + NSString *msg = @"Both IPv4 and IPv6 have been disabled. Must enable at least one protocol first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + return YES; +} + +- (BOOL)bindToPort:(uint16_t)port error:(NSError **)errPtr +{ + return [self bindToPort:port interface:nil error:errPtr]; +} + +- (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + // Run through sanity checks + + if (![self preBind:&err]) + { + return_from_block; + } + + // Check the given interface + + NSData *interface4 = nil; + NSData *interface6 = nil; + + [self convertIntefaceDescription:interface port:port intoAddress4:&interface4 address6:&interface6]; + + if ((interface4 == nil) && (interface6 == nil)) + { + NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\") or IP address."; + err = [self badParamError:msg]; + + return_from_block; + } + + BOOL isIPv4Disabled = (self->config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (self->config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && (interface6 == nil)) + { + NSString *msg = @"IPv4 has been disabled and specified interface doesn't support IPv6."; + err = [self badParamError:msg]; + + return_from_block; + } + + if (isIPv6Disabled && (interface4 == nil)) + { + NSString *msg = @"IPv6 has been disabled and specified interface doesn't support IPv4."; + err = [self badParamError:msg]; + + return_from_block; + } + + // Determine protocol(s) + + BOOL useIPv4 = !isIPv4Disabled && (interface4 != nil); + BOOL useIPv6 = !isIPv6Disabled && (interface6 != nil); + + // Create the socket(s) if needed + + if ((self->flags & kDidCreateSockets) == 0) + { + if (![self createSocket4:useIPv4 socket6:useIPv6 error:&err]) + { + return_from_block; + } + } + + // Bind the socket(s) + + LogVerbose(@"Binding socket to port(%hu) interface(%@)", port, interface); + + if (useIPv4) + { + int status = bind(self->socket4FD, (const struct sockaddr *)[interface4 bytes], (socklen_t)[interface4 length]); + if (status == -1) + { + [self closeSockets]; + + NSString *reason = @"Error in bind() function"; + err = [self errnoErrorWithReason:reason]; + + return_from_block; + } + } + + if (useIPv6) + { + int status = bind(self->socket6FD, (const struct sockaddr *)[interface6 bytes], (socklen_t)[interface6 length]); + if (status == -1) + { + [self closeSockets]; + + NSString *reason = @"Error in bind() function"; + err = [self errnoErrorWithReason:reason]; + + return_from_block; + } + } + + // Update flags + + self->flags |= kDidBind; + + if (!useIPv4) self->flags |= kIPv4Deactivated; + if (!useIPv6) self->flags |= kIPv6Deactivated; + + result = YES; + + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (err) + LogError(@"Error binding to port/interface: %@", err); + + if (errPtr) + *errPtr = err; + + return result; +} + +- (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + // Run through sanity checks + + if (![self preBind:&err]) + { + return_from_block; + } + + // Check the given address + + int addressFamily = [[self class] familyFromAddress:localAddr]; + + if (addressFamily == AF_UNSPEC) + { + NSString *msg = @"A valid IPv4 or IPv6 address was not given"; + err = [self badParamError:msg]; + + return_from_block; + } + + NSData *localAddr4 = (addressFamily == AF_INET) ? localAddr : nil; + NSData *localAddr6 = (addressFamily == AF_INET6) ? localAddr : nil; + + BOOL isIPv4Disabled = (self->config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (self->config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && localAddr4) + { + NSString *msg = @"IPv4 has been disabled and an IPv4 address was passed."; + err = [self badParamError:msg]; + + return_from_block; + } + + if (isIPv6Disabled && localAddr6) + { + NSString *msg = @"IPv6 has been disabled and an IPv6 address was passed."; + err = [self badParamError:msg]; + + return_from_block; + } + + // Determine protocol(s) + + BOOL useIPv4 = !isIPv4Disabled && (localAddr4 != nil); + BOOL useIPv6 = !isIPv6Disabled && (localAddr6 != nil); + + // Create the socket(s) if needed + + if ((self->flags & kDidCreateSockets) == 0) + { + if (![self createSocket4:useIPv4 socket6:useIPv6 error:&err]) + { + return_from_block; + } + } + + // Bind the socket(s) + + if (useIPv4) + { + LogVerbose(@"Binding socket to address(%@:%hu)", + [[self class] hostFromAddress:localAddr4], + [[self class] portFromAddress:localAddr4]); + + int status = bind(self->socket4FD, (const struct sockaddr *)[localAddr4 bytes], (socklen_t)[localAddr4 length]); + if (status == -1) + { + [self closeSockets]; + + NSString *reason = @"Error in bind() function"; + err = [self errnoErrorWithReason:reason]; + + return_from_block; + } + } + else + { + LogVerbose(@"Binding socket to address(%@:%hu)", + [[self class] hostFromAddress:localAddr6], + [[self class] portFromAddress:localAddr6]); + + int status = bind(self->socket6FD, (const struct sockaddr *)[localAddr6 bytes], (socklen_t)[localAddr6 length]); + if (status == -1) + { + [self closeSockets]; + + NSString *reason = @"Error in bind() function"; + err = [self errnoErrorWithReason:reason]; + + return_from_block; + } + } + + // Update flags + + self->flags |= kDidBind; + + if (!useIPv4) self->flags |= kIPv4Deactivated; + if (!useIPv6) self->flags |= kIPv6Deactivated; + + result = YES; + + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (err) + LogError(@"Error binding to address: %@", err); + + if (errPtr) + *errPtr = err; + + return result; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Connecting +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * This method runs through the various checks required prior to a connect attempt. + * It is shared between the various connect methods. +**/ +- (BOOL)preConnect:(NSError **)errPtr +{ + if (![self preOp:errPtr]) + { + return NO; + } + + if ((flags & kConnecting) || (flags & kDidConnect)) + { + if (errPtr) + { + NSString *msg = @"Cannot connect a socket more than once."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + BOOL isIPv4Disabled = (config & kIPv4Disabled) ? YES : NO; + BOOL isIPv6Disabled = (config & kIPv6Disabled) ? YES : NO; + + if (isIPv4Disabled && isIPv6Disabled) // Must have IPv4 or IPv6 enabled + { + if (errPtr) + { + NSString *msg = @"Both IPv4 and IPv6 have been disabled. Must enable at least one protocol first."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + return YES; +} + +- (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + // Run through sanity checks. + + if (![self preConnect:&err]) + { + return_from_block; + } + + // Check parameter(s) + + if (host == nil) + { + NSString *msg = @"The host param is nil. Should be domain name or IP address string."; + err = [self badParamError:msg]; + + return_from_block; + } + + // Create the socket(s) if needed + + if ((self->flags & kDidCreateSockets) == 0) + { + if (![self createSockets:&err]) + { + return_from_block; + } + } + + // Create special connect packet + + MGCDAsyncUdpSpecialPacket *packet = [[MGCDAsyncUdpSpecialPacket alloc] init]; + packet->resolveInProgress = YES; + + // Start asynchronous DNS resolve for host:port on background queue + + LogVerbose(@"Dispatching DNS resolve for connect..."); + + [self asyncResolveHost:host port:port withCompletionBlock:^(NSArray *addresses, NSError *error) { + + // The asyncResolveHost:port:: method asynchronously dispatches a task onto the global concurrent queue, + // and immediately returns. Once the async resolve task completes, + // this block is executed on our socketQueue. + + packet->resolveInProgress = NO; + + packet->addresses = addresses; + packet->error = error; + + [self maybeConnect]; + }]; + + // Updates flags, add connect packet to send queue, and pump send queue + + self->flags |= kConnecting; + + [self->sendQueue addObject:packet]; + [self maybeDequeueSend]; + + result = YES; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (err) + LogError(@"Error connecting to host/port: %@", err); + + if (errPtr) + *errPtr = err; + + return result; +} + +- (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + // Run through sanity checks. + + if (![self preConnect:&err]) + { + return_from_block; + } + + // Check parameter(s) + + if (remoteAddr == nil) + { + NSString *msg = @"The address param is nil. Should be a valid address."; + err = [self badParamError:msg]; + + return_from_block; + } + + // Create the socket(s) if needed + + if ((self->flags & kDidCreateSockets) == 0) + { + if (![self createSockets:&err]) + { + return_from_block; + } + } + + // The remoteAddr parameter could be of type NSMutableData. + // So we copy it to be safe. + + NSData *address = [remoteAddr copy]; + NSArray *addresses = [NSArray arrayWithObject:address]; + + MGCDAsyncUdpSpecialPacket *packet = [[MGCDAsyncUdpSpecialPacket alloc] init]; + packet->addresses = addresses; + + // Updates flags, add connect packet to send queue, and pump send queue + + self->flags |= kConnecting; + + [self->sendQueue addObject:packet]; + [self maybeDequeueSend]; + + result = YES; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (err) + LogError(@"Error connecting to address: %@", err); + + if (errPtr) + *errPtr = err; + + return result; +} + +- (void)maybeConnect +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + + BOOL sendQueueReady = [currentSend isKindOfClass:[MGCDAsyncUdpSpecialPacket class]]; + + if (sendQueueReady) + { + MGCDAsyncUdpSpecialPacket *connectPacket = (MGCDAsyncUdpSpecialPacket *)currentSend; + + if (connectPacket->resolveInProgress) + { + LogVerbose(@"Waiting for DNS resolve..."); + } + else + { + if (connectPacket->error) + { + [self notifyDidNotConnect:connectPacket->error]; + } + else + { + NSData *address = nil; + NSError *error = nil; + + int addressFamily = [self getAddress:&address error:&error fromAddresses:connectPacket->addresses]; + + // Perform connect + + BOOL result = NO; + + switch (addressFamily) + { + case AF_INET : result = [self connectWithAddress4:address error:&error]; break; + case AF_INET6 : result = [self connectWithAddress6:address error:&error]; break; + } + + if (result) + { + flags |= kDidBind; + flags |= kDidConnect; + + cachedConnectedAddress = address; + cachedConnectedHost = [[self class] hostFromAddress:address]; + cachedConnectedPort = [[self class] portFromAddress:address]; + cachedConnectedFamily = addressFamily; + + [self notifyDidConnectToAddress:address]; + } + else + { + [self notifyDidNotConnect:error]; + } + } + + flags &= ~kConnecting; + + [self endCurrentSend]; + [self maybeDequeueSend]; + } + } +} + +- (BOOL)connectWithAddress4:(NSData *)address4 error:(NSError **)errPtr +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + int status = connect(socket4FD, (const struct sockaddr *)[address4 bytes], (socklen_t)[address4 length]); + if (status != 0) + { + if (errPtr) + *errPtr = [self errnoErrorWithReason:@"Error in connect() function"]; + + return NO; + } + + [self closeSocket6]; + flags |= kIPv6Deactivated; + + return YES; +} + +- (BOOL)connectWithAddress6:(NSData *)address6 error:(NSError **)errPtr +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + int status = connect(socket6FD, (const struct sockaddr *)[address6 bytes], (socklen_t)[address6 length]); + if (status != 0) + { + if (errPtr) + *errPtr = [self errnoErrorWithReason:@"Error in connect() function"]; + + return NO; + } + + [self closeSocket4]; + flags |= kIPv4Deactivated; + + return YES; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Multicast +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)preJoin:(NSError **)errPtr +{ + if (![self preOp:errPtr]) + { + return NO; + } + + if (!(flags & kDidBind)) + { + if (errPtr) + { + NSString *msg = @"Must bind a socket before joining a multicast group."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + if ((flags & kConnecting) || (flags & kDidConnect)) + { + if (errPtr) + { + NSString *msg = @"Cannot join a multicast group if connected."; + *errPtr = [self badConfigError:msg]; + } + return NO; + } + + return YES; +} + +- (BOOL)joinMulticastGroup:(NSString *)group error:(NSError **)errPtr +{ + return [self joinMulticastGroup:group onInterface:nil error:errPtr]; +} + +- (BOOL)joinMulticastGroup:(NSString *)group onInterface:(NSString *)interface error:(NSError **)errPtr +{ + // IP_ADD_MEMBERSHIP == IPV6_JOIN_GROUP + return [self performMulticastRequest:IP_ADD_MEMBERSHIP forGroup:group onInterface:interface error:errPtr]; +} + +- (BOOL)leaveMulticastGroup:(NSString *)group error:(NSError **)errPtr +{ + return [self leaveMulticastGroup:group onInterface:nil error:errPtr]; +} + +- (BOOL)leaveMulticastGroup:(NSString *)group onInterface:(NSString *)interface error:(NSError **)errPtr +{ + // IP_DROP_MEMBERSHIP == IPV6_LEAVE_GROUP + return [self performMulticastRequest:IP_DROP_MEMBERSHIP forGroup:group onInterface:interface error:errPtr]; +} + +- (BOOL)performMulticastRequest:(int)requestType + forGroup:(NSString *)group + onInterface:(NSString *)interface + error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + // Run through sanity checks + + if (![self preJoin:&err]) + { + return_from_block; + } + + // Convert group to address + + NSData *groupAddr4 = nil; + NSData *groupAddr6 = nil; + + [self convertNumericHost:group port:0 intoAddress4:&groupAddr4 address6:&groupAddr6]; + + if ((groupAddr4 == nil) && (groupAddr6 == nil)) + { + NSString *msg = @"Unknown group. Specify valid group IP address."; + err = [self badParamError:msg]; + + return_from_block; + } + + // Convert interface to address + + NSData *interfaceAddr4 = nil; + NSData *interfaceAddr6 = nil; + + [self convertIntefaceDescription:interface port:0 intoAddress4:&interfaceAddr4 address6:&interfaceAddr6]; + + if ((interfaceAddr4 == nil) && (interfaceAddr6 == nil)) + { + NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\") or IP address."; + err = [self badParamError:msg]; + + return_from_block; + } + + // Perform join + + if ((self->socket4FD != SOCKET_NULL) && groupAddr4 && interfaceAddr4) + { + const struct sockaddr_in *nativeGroup = (const struct sockaddr_in *)[groupAddr4 bytes]; + const struct sockaddr_in *nativeIface = (const struct sockaddr_in *)[interfaceAddr4 bytes]; + + struct ip_mreq imreq; + imreq.imr_multiaddr = nativeGroup->sin_addr; + imreq.imr_interface = nativeIface->sin_addr; + + int status = setsockopt(self->socket4FD, IPPROTO_IP, requestType, (const void *)&imreq, sizeof(imreq)); + if (status != 0) + { + err = [self errnoErrorWithReason:@"Error in setsockopt() function"]; + + return_from_block; + } + + // Using IPv4 only + [self closeSocket6]; + + result = YES; + } + else if ((self->socket6FD != SOCKET_NULL) && groupAddr6 && interfaceAddr6) + { + const struct sockaddr_in6 *nativeGroup = (const struct sockaddr_in6 *)[groupAddr6 bytes]; + + struct ipv6_mreq imreq; + imreq.ipv6mr_multiaddr = nativeGroup->sin6_addr; + imreq.ipv6mr_interface = [self indexOfInterfaceAddr6:interfaceAddr6]; + + int status = setsockopt(self->socket6FD, IPPROTO_IPV6, requestType, (const void *)&imreq, sizeof(imreq)); + if (status != 0) + { + err = [self errnoErrorWithReason:@"Error in setsockopt() function"]; + + return_from_block; + } + + // Using IPv6 only + [self closeSocket4]; + + result = YES; + } + else + { + NSString *msg = @"Socket, group, and interface do not have matching IP versions"; + err = [self badParamError:msg]; + + return_from_block; + } + + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (errPtr) + *errPtr = err; + + return result; +} + +- (BOOL)sendIPv4MulticastOnInterface:(NSString*)interface error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + if (![self preOp:&err]) + { + return_from_block; + } + + if ((self->flags & kDidCreateSockets) == 0) + { + if (![self createSockets:&err]) + { + return_from_block; + } + } + + // Convert interface to address + + NSData *interfaceAddr4 = nil; + NSData *interfaceAddr6 = nil; + + [self convertIntefaceDescription:interface port:0 intoAddress4:&interfaceAddr4 address6:&interfaceAddr6]; + + if (interfaceAddr4 == nil) + { + NSString *msg = @"Unknown interface. Specify valid interface by IP address."; + err = [self badParamError:msg]; + return_from_block; + } + + if (self->socket4FD != SOCKET_NULL) { + const struct sockaddr_in *nativeIface = (struct sockaddr_in *)[interfaceAddr4 bytes]; + struct in_addr interface_addr = nativeIface->sin_addr; + int status = setsockopt(self->socket4FD, IPPROTO_IP, IP_MULTICAST_IF, &interface_addr, sizeof(interface_addr)); + if (status != 0) { + err = [self errnoErrorWithReason:@"Error in setsockopt() function"]; + return_from_block; + } + result = YES; + } + + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (errPtr) + *errPtr = err; + + return result; +} + +- (BOOL)sendIPv6MulticastOnInterface:(NSString*)interface error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + if (![self preOp:&err]) + { + return_from_block; + } + + if ((self->flags & kDidCreateSockets) == 0) + { + if (![self createSockets:&err]) + { + return_from_block; + } + } + + // Convert interface to address + + NSData *interfaceAddr4 = nil; + NSData *interfaceAddr6 = nil; + + [self convertIntefaceDescription:interface port:0 intoAddress4:&interfaceAddr4 address6:&interfaceAddr6]; + + if (interfaceAddr6 == nil) + { + NSString *msg = @"Unknown interface. Specify valid interface by name (e.g. \"en1\")."; + err = [self badParamError:msg]; + return_from_block; + } + + if ((self->socket6FD != SOCKET_NULL)) { + uint32_t scope_id = [self indexOfInterfaceAddr6:interfaceAddr6]; + int status = setsockopt(self->socket6FD, IPPROTO_IPV6, IPV6_MULTICAST_IF, &scope_id, sizeof(scope_id)); + if (status != 0) { + err = [self errnoErrorWithReason:@"Error in setsockopt() function"]; + return_from_block; + } + result = YES; + } + + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (errPtr) + *errPtr = err; + + return result; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Reuse port +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)enableReusePort:(BOOL)flag error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + if (![self preOp:&err]) + { + return_from_block; + } + + if ((self->flags & kDidCreateSockets) == 0) + { + if (![self createSockets:&err]) + { + return_from_block; + } + } + + int value = flag ? 1 : 0; + if (self->socket4FD != SOCKET_NULL) + { + int error = setsockopt(self->socket4FD, SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof(value)); + + if (error) + { + err = [self errnoErrorWithReason:@"Error in setsockopt() function"]; + + return_from_block; + } + result = YES; + } + + if (self->socket6FD != SOCKET_NULL) + { + int error = setsockopt(self->socket6FD, SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof(value)); + + if (error) + { + err = [self errnoErrorWithReason:@"Error in setsockopt() function"]; + + return_from_block; + } + result = YES; + } + + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (errPtr) + *errPtr = err; + + return result; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Broadcast +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)enableBroadcast:(BOOL)flag error:(NSError **)errPtr +{ + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ @autoreleasepool { + + if (![self preOp:&err]) + { + return_from_block; + } + + if ((self->flags & kDidCreateSockets) == 0) + { + if (![self createSockets:&err]) + { + return_from_block; + } + } + + if (self->socket4FD != SOCKET_NULL) + { + int value = flag ? 1 : 0; + int error = setsockopt(self->socket4FD, SOL_SOCKET, SO_BROADCAST, (const void *)&value, sizeof(value)); + + if (error) + { + err = [self errnoErrorWithReason:@"Error in setsockopt() function"]; + + return_from_block; + } + result = YES; + } + + // IPv6 does not implement broadcast, the ability to send a packet to all hosts on the attached link. + // The same effect can be achieved by sending a packet to the link-local all hosts multicast group. + + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (errPtr) + *errPtr = err; + + return result; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Sending +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)sendData:(NSData *)data withTag:(long)tag +{ + [self sendData:data withTimeout:-1.0 tag:tag]; +} + +- (void)sendData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + LogTrace(); + + if ([data length] == 0) + { + LogWarn(@"Ignoring attempt to send nil/empty data."); + return; + } + + + + MGCDAsyncUdpSendPacket *packet = [[MGCDAsyncUdpSendPacket alloc] initWithData:data timeout:timeout tag:tag]; + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + [self->sendQueue addObject:packet]; + [self maybeDequeueSend]; + }}); + +} + +- (void)sendData:(NSData *)data + toHost:(NSString *)host + port:(uint16_t)port + withTimeout:(NSTimeInterval)timeout + tag:(long)tag +{ + LogTrace(); + + if ([data length] == 0) + { + LogWarn(@"Ignoring attempt to send nil/empty data."); + return; + } + + MGCDAsyncUdpSendPacket *packet = [[MGCDAsyncUdpSendPacket alloc] initWithData:data timeout:timeout tag:tag]; + packet->resolveInProgress = YES; + + [self asyncResolveHost:host port:port withCompletionBlock:^(NSArray *addresses, NSError *error) { + + // The asyncResolveHost:port:: method asynchronously dispatches a task onto the global concurrent queue, + // and immediately returns. Once the async resolve task completes, + // this block is executed on our socketQueue. + + packet->resolveInProgress = NO; + + packet->resolvedAddresses = addresses; + packet->resolveError = error; + + if (packet == self->currentSend) + { + LogVerbose(@"currentSend - address resolved"); + [self doPreSend]; + } + }]; + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + [self->sendQueue addObject:packet]; + [self maybeDequeueSend]; + + }}); + +} + +- (void)sendData:(NSData *)data toAddress:(NSData *)remoteAddr withTimeout:(NSTimeInterval)timeout tag:(long)tag +{ + LogTrace(); + + if ([data length] == 0) + { + LogWarn(@"Ignoring attempt to send nil/empty data."); + return; + } + + MGCDAsyncUdpSendPacket *packet = [[MGCDAsyncUdpSendPacket alloc] initWithData:data timeout:timeout tag:tag]; + packet->addressFamily = [MGCDAsyncUdpSocket familyFromAddress:remoteAddr]; + packet->address = remoteAddr; + + dispatch_async(socketQueue, ^{ @autoreleasepool { + + [self->sendQueue addObject:packet]; + [self maybeDequeueSend]; + }}); +} + +- (void)setSendFilter:(MGCDAsyncUdpSocketSendFilterBlock)filterBlock withQueue:(dispatch_queue_t)filterQueue +{ + [self setSendFilter:filterBlock withQueue:filterQueue isAsynchronous:YES]; +} + +- (void)setSendFilter:(MGCDAsyncUdpSocketSendFilterBlock)filterBlock + withQueue:(dispatch_queue_t)filterQueue + isAsynchronous:(BOOL)isAsynchronous +{ + MGCDAsyncUdpSocketSendFilterBlock newFilterBlock = NULL; + dispatch_queue_t newFilterQueue = NULL; + + if (filterBlock) + { + NSAssert(filterQueue, @"Must provide a dispatch_queue in which to run the filter block."); + + newFilterBlock = [filterBlock copy]; + newFilterQueue = filterQueue; + #if !OS_OBJECT_USE_OBJC + dispatch_retain(newFilterQueue); + #endif + } + + dispatch_block_t block = ^{ + + #if !OS_OBJECT_USE_OBJC + if (self->sendFilterQueue) dispatch_release(self->sendFilterQueue); + #endif + + self->sendFilterBlock = newFilterBlock; + self->sendFilterQueue = newFilterQueue; + self->sendFilterAsync = isAsynchronous; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (void)maybeDequeueSend +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + // If we don't have a send operation already in progress + if (currentSend == nil) + { + // Create the sockets if needed + if ((flags & kDidCreateSockets) == 0) + { + NSError *err = nil; + if (![self createSockets:&err]) + { + [self closeWithError:err]; + return; + } + } + + while ([sendQueue count] > 0) + { + // Dequeue the next object in the queue + currentSend = [sendQueue objectAtIndex:0]; + [sendQueue removeObjectAtIndex:0]; + + if ([currentSend isKindOfClass:[MGCDAsyncUdpSpecialPacket class]]) + { + [self maybeConnect]; + + return; // The maybeConnect method, if it connects, will invoke this method again + } + else if (currentSend->resolveError) + { + // Notify delegate + [self notifyDidNotSendDataWithTag:currentSend->tag dueToError:currentSend->resolveError]; + + // Clear currentSend + currentSend = nil; + + continue; + } + else + { + // Start preprocessing checks on the send packet + [self doPreSend]; + + break; + } + } + + if ((currentSend == nil) && (flags & kCloseAfterSends)) + { + [self closeWithError:nil]; + } + } +} + +/** + * This method is called after a sendPacket has been dequeued. + * It performs various preprocessing checks on the packet, + * and queries the sendFilter (if set) to determine if the packet can be sent. + * + * If the packet passes all checks, it will be passed on to the doSend method. +**/ +- (void)doPreSend +{ + LogTrace(); + + // + // 1. Check for problems with send packet + // + + BOOL waitingForResolve = NO; + NSError *error = nil; + + if (flags & kDidConnect) + { + // Connected socket + + if (currentSend->resolveInProgress || currentSend->resolvedAddresses || currentSend->resolveError) + { + NSString *msg = @"Cannot specify destination of packet for connected socket"; + error = [self badConfigError:msg]; + } + else + { + currentSend->address = cachedConnectedAddress; + currentSend->addressFamily = cachedConnectedFamily; + } + } + else + { + // Non-Connected socket + + if (currentSend->resolveInProgress) + { + // We're waiting for the packet's destination to be resolved. + waitingForResolve = YES; + } + else if (currentSend->resolveError) + { + error = currentSend->resolveError; + } + else if (currentSend->address == nil) + { + if (currentSend->resolvedAddresses == nil) + { + NSString *msg = @"You must specify destination of packet for a non-connected socket"; + error = [self badConfigError:msg]; + } + else + { + // Pick the proper address to use (out of possibly several resolved addresses) + + NSData *address = nil; + int addressFamily = AF_UNSPEC; + + addressFamily = [self getAddress:&address error:&error fromAddresses:currentSend->resolvedAddresses]; + + currentSend->address = address; + currentSend->addressFamily = addressFamily; + } + } + } + + if (waitingForResolve) + { + // We're waiting for the packet's destination to be resolved. + + LogVerbose(@"currentSend - waiting for address resolve"); + + if (flags & kSock4CanAcceptBytes) { + [self suspendSend4Source]; + } + if (flags & kSock6CanAcceptBytes) { + [self suspendSend6Source]; + } + + return; + } + + if (error) + { + // Unable to send packet due to some error. + // Notify delegate and move on. + + [self notifyDidNotSendDataWithTag:currentSend->tag dueToError:error]; + [self endCurrentSend]; + [self maybeDequeueSend]; + + return; + } + + // + // 2. Query sendFilter (if applicable) + // + + if (sendFilterBlock && sendFilterQueue) + { + // Query sendFilter + + if (sendFilterAsync) + { + // Scenario 1 of 3 - Need to asynchronously query sendFilter + + currentSend->filterInProgress = YES; + MGCDAsyncUdpSendPacket *sendPacket = currentSend; + + dispatch_async(sendFilterQueue, ^{ @autoreleasepool { + + BOOL allowed = self->sendFilterBlock(sendPacket->buffer, sendPacket->address, sendPacket->tag); + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + sendPacket->filterInProgress = NO; + if (sendPacket == self->currentSend) + { + if (allowed) + { + [self doSend]; + } + else + { + LogVerbose(@"currentSend - silently dropped by sendFilter"); + + [self notifyDidSendDataWithTag:self->currentSend->tag]; + [self endCurrentSend]; + [self maybeDequeueSend]; + } + } + }}); + }}); + } + else + { + // Scenario 2 of 3 - Need to synchronously query sendFilter + + __block BOOL allowed = YES; + + dispatch_sync(sendFilterQueue, ^{ @autoreleasepool { + + allowed = self->sendFilterBlock(self->currentSend->buffer, self->currentSend->address, self->currentSend->tag); + }}); + + if (allowed) + { + [self doSend]; + } + else + { + LogVerbose(@"currentSend - silently dropped by sendFilter"); + + [self notifyDidSendDataWithTag:currentSend->tag]; + [self endCurrentSend]; + [self maybeDequeueSend]; + } + } + } + else // if (!sendFilterBlock || !sendFilterQueue) + { + // Scenario 3 of 3 - No sendFilter. Just go straight into sending. + + [self doSend]; + } +} + +/** + * This method performs the actual sending of data in the currentSend packet. + * It should only be called if the +**/ +- (void)doSend +{ + LogTrace(); + + NSAssert(currentSend != nil, @"Invalid logic"); + + // Perform the actual send + + ssize_t result = 0; + + if (flags & kDidConnect) + { + // Connected socket + + const void *buffer = [currentSend->buffer bytes]; + size_t length = (size_t)[currentSend->buffer length]; + + if (currentSend->addressFamily == AF_INET) + { + result = send(socket4FD, buffer, length, 0); + LogVerbose(@"send(socket4FD) = %d", result); + } + else + { + result = send(socket6FD, buffer, length, 0); + LogVerbose(@"send(socket6FD) = %d", result); + } + } + else + { + // Non-Connected socket + + const void *buffer = [currentSend->buffer bytes]; + size_t length = (size_t)[currentSend->buffer length]; + + const void *dst = [currentSend->address bytes]; + socklen_t dstSize = (socklen_t)[currentSend->address length]; + + if (currentSend->addressFamily == AF_INET) + { + result = sendto(socket4FD, buffer, length, 0, dst, dstSize); + LogVerbose(@"sendto(socket4FD) = %d", result); + } + else + { + result = sendto(socket6FD, buffer, length, 0, dst, dstSize); + LogVerbose(@"sendto(socket6FD) = %d", result); + } + } + + // If the socket wasn't bound before, it is now + + if ((flags & kDidBind) == 0) + { + flags |= kDidBind; + } + + // Check the results. + // + // From the send() & sendto() manpage: + // + // Upon successful completion, the number of bytes which were sent is returned. + // Otherwise, -1 is returned and the global variable errno is set to indicate the error. + + BOOL waitingForSocket = NO; + NSError *socketError = nil; + + if (result == 0) + { + waitingForSocket = YES; + } + else if (result < 0) + { + if (errno == EAGAIN) + waitingForSocket = YES; + else + socketError = [self errnoErrorWithReason:@"Error in send() function."]; + } + + if (waitingForSocket) + { + // Not enough room in the underlying OS socket send buffer. + // Wait for a notification of available space. + + LogVerbose(@"currentSend - waiting for socket"); + + if (!(flags & kSock4CanAcceptBytes)) { + [self resumeSend4Source]; + } + if (!(flags & kSock6CanAcceptBytes)) { + [self resumeSend6Source]; + } + + if ((sendTimer == NULL) && (currentSend->timeout >= 0.0)) + { + // Unable to send packet right away. + // Start timer to timeout the send operation. + + [self setupSendTimerWithTimeout:currentSend->timeout]; + } + } + else if (socketError) + { + [self closeWithError:socketError]; + } + else // done + { + [self notifyDidSendDataWithTag:currentSend->tag]; + [self endCurrentSend]; + [self maybeDequeueSend]; + } +} + +/** + * Releases all resources associated with the currentSend. +**/ +- (void)endCurrentSend +{ + if (sendTimer) + { + dispatch_source_cancel(sendTimer); + #if !OS_OBJECT_USE_OBJC + dispatch_release(sendTimer); + #endif + sendTimer = NULL; + } + + currentSend = nil; +} + +/** + * Performs the operations to timeout the current send operation, and move on. +**/ +- (void)doSendTimeout +{ + LogTrace(); + + [self notifyDidNotSendDataWithTag:currentSend->tag dueToError:[self sendTimeoutError]]; + [self endCurrentSend]; + [self maybeDequeueSend]; +} + +/** + * Sets up a timer that fires to timeout the current send operation. + * This method should only be called once per send packet. +**/ +- (void)setupSendTimerWithTimeout:(NSTimeInterval)timeout +{ + NSAssert(sendTimer == NULL, @"Invalid logic"); + NSAssert(timeout >= 0.0, @"Invalid logic"); + + LogTrace(); + + sendTimer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, socketQueue); + + dispatch_source_set_event_handler(sendTimer, ^{ @autoreleasepool { + + [self doSendTimeout]; + }}); + + dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeout * NSEC_PER_SEC)); + + dispatch_source_set_timer(sendTimer, tt, DISPATCH_TIME_FOREVER, 0); + dispatch_resume(sendTimer); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Receiving +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (BOOL)receiveOnce:(NSError **)errPtr +{ + LogTrace(); + + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ + + if ((self->flags & kReceiveOnce) == 0) + { + if ((self->flags & kDidCreateSockets) == 0) + { + NSString *msg = @"Must bind socket before you can receive data. " + @"You can do this explicitly via bind, or implicitly via connect or by sending data."; + + err = [self badConfigError:msg]; + return_from_block; + } + + self->flags |= kReceiveOnce; // Enable + self->flags &= ~kReceiveContinuous; // Disable + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + [self doReceive]; + }}); + } + + result = YES; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (err) + LogError(@"Error in beginReceiving: %@", err); + + if (errPtr) + *errPtr = err; + + return result; +} + +- (BOOL)beginReceiving:(NSError **)errPtr +{ + LogTrace(); + + __block BOOL result = NO; + __block NSError *err = nil; + + dispatch_block_t block = ^{ + + if ((self->flags & kReceiveContinuous) == 0) + { + if ((self->flags & kDidCreateSockets) == 0) + { + NSString *msg = @"Must bind socket before you can receive data. " + @"You can do this explicitly via bind, or implicitly via connect or by sending data."; + + err = [self badConfigError:msg]; + return_from_block; + } + + self->flags |= kReceiveContinuous; // Enable + self->flags &= ~kReceiveOnce; // Disable + + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + [self doReceive]; + }}); + } + + result = YES; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); + + if (err) + LogError(@"Error in beginReceiving: %@", err); + + if (errPtr) + *errPtr = err; + + return result; +} + +- (void)pauseReceiving +{ + LogTrace(); + + dispatch_block_t block = ^{ + + self->flags &= ~kReceiveOnce; // Disable + self->flags &= ~kReceiveContinuous; // Disable + + if (self->socket4FDBytesAvailable > 0) { + [self suspendReceive4Source]; + } + if (self->socket6FDBytesAvailable > 0) { + [self suspendReceive6Source]; + } + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (void)setReceiveFilter:(MGCDAsyncUdpSocketReceiveFilterBlock)filterBlock withQueue:(dispatch_queue_t)filterQueue +{ + [self setReceiveFilter:filterBlock withQueue:filterQueue isAsynchronous:YES]; +} + +- (void)setReceiveFilter:(MGCDAsyncUdpSocketReceiveFilterBlock)filterBlock + withQueue:(dispatch_queue_t)filterQueue + isAsynchronous:(BOOL)isAsynchronous +{ + MGCDAsyncUdpSocketReceiveFilterBlock newFilterBlock = NULL; + dispatch_queue_t newFilterQueue = NULL; + + if (filterBlock) + { + NSAssert(filterQueue, @"Must provide a dispatch_queue in which to run the filter block."); + + newFilterBlock = [filterBlock copy]; + newFilterQueue = filterQueue; + #if !OS_OBJECT_USE_OBJC + dispatch_retain(newFilterQueue); + #endif + } + + dispatch_block_t block = ^{ + + #if !OS_OBJECT_USE_OBJC + if (self->receiveFilterQueue) dispatch_release(self->receiveFilterQueue); + #endif + + self->receiveFilterBlock = newFilterBlock; + self->receiveFilterQueue = newFilterQueue; + self->receiveFilterAsync = isAsynchronous; + }; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +- (void)doReceive +{ + LogTrace(); + + if ((flags & (kReceiveOnce | kReceiveContinuous)) == 0) + { + LogVerbose(@"Receiving is paused..."); + + if (socket4FDBytesAvailable > 0) { + [self suspendReceive4Source]; + } + if (socket6FDBytesAvailable > 0) { + [self suspendReceive6Source]; + } + + return; + } + + if ((flags & kReceiveOnce) && (pendingFilterOperations > 0)) + { + LogVerbose(@"Receiving is temporarily paused (pending filter operations)..."); + + if (socket4FDBytesAvailable > 0) { + [self suspendReceive4Source]; + } + if (socket6FDBytesAvailable > 0) { + [self suspendReceive6Source]; + } + + return; + } + + if ((socket4FDBytesAvailable == 0) && (socket6FDBytesAvailable == 0)) + { + LogVerbose(@"No data available to receive..."); + + if (socket4FDBytesAvailable == 0) { + [self resumeReceive4Source]; + } + if (socket6FDBytesAvailable == 0) { + [self resumeReceive6Source]; + } + + return; + } + + // Figure out if we should receive on socket4 or socket6 + + BOOL doReceive4; + + if (flags & kDidConnect) + { + // Connected socket + + doReceive4 = (socket4FD != SOCKET_NULL); + } + else + { + // Non-Connected socket + + if (socket4FDBytesAvailable > 0) + { + if (socket6FDBytesAvailable > 0) + { + // Bytes available on socket4 & socket6 + + doReceive4 = (flags & kFlipFlop) ? YES : NO; + + flags ^= kFlipFlop; // flags = flags xor kFlipFlop; (toggle flip flop bit) + } + else { + // Bytes available on socket4, but not socket6 + doReceive4 = YES; + } + } + else { + // Bytes available on socket6, but not socket4 + doReceive4 = NO; + } + } + + // Perform socket IO + + ssize_t result = 0; + + NSData *data = nil; + NSData *addr4 = nil; + NSData *addr6 = nil; + + if (doReceive4) + { + NSAssert(socket4FDBytesAvailable > 0, @"Invalid logic"); + LogVerbose(@"Receiving on IPv4"); + + struct sockaddr_in sockaddr4; + socklen_t sockaddr4len = sizeof(sockaddr4); + + // #222: MGCD does not necessarily return the size of an entire UDP packet + // from dispatch_source_get_data(), so we must use the maximum packet size. + size_t bufSize = max4ReceiveSize; + void *buf = malloc(bufSize); + + result = recvfrom(socket4FD, buf, bufSize, 0, (struct sockaddr *)&sockaddr4, &sockaddr4len); + LogVerbose(@"recvfrom(socket4FD) = %i", (int)result); + + if (result > 0) + { + if ((size_t)result >= socket4FDBytesAvailable) + socket4FDBytesAvailable = 0; + else + socket4FDBytesAvailable -= result; + + if ((size_t)result != bufSize) { + buf = realloc(buf, result); + } + + data = [NSData dataWithBytesNoCopy:buf length:result freeWhenDone:YES]; + addr4 = [NSData dataWithBytes:&sockaddr4 length:sockaddr4len]; + } + else + { + LogVerbose(@"recvfrom(socket4FD) = %@", [self errnoError]); + socket4FDBytesAvailable = 0; + free(buf); + } + } + else + { + NSAssert(socket6FDBytesAvailable > 0, @"Invalid logic"); + LogVerbose(@"Receiving on IPv6"); + + struct sockaddr_in6 sockaddr6; + socklen_t sockaddr6len = sizeof(sockaddr6); + + // #222: MGCD does not necessarily return the size of an entire UDP packet + // from dispatch_source_get_data(), so we must use the maximum packet size. + size_t bufSize = max6ReceiveSize; + void *buf = malloc(bufSize); + + result = recvfrom(socket6FD, buf, bufSize, 0, (struct sockaddr *)&sockaddr6, &sockaddr6len); + LogVerbose(@"recvfrom(socket6FD) -> %i", (int)result); + + if (result > 0) + { + if ((size_t)result >= socket6FDBytesAvailable) + socket6FDBytesAvailable = 0; + else + socket6FDBytesAvailable -= result; + + if ((size_t)result != bufSize) { + buf = realloc(buf, result); + } + + data = [NSData dataWithBytesNoCopy:buf length:result freeWhenDone:YES]; + addr6 = [NSData dataWithBytes:&sockaddr6 length:sockaddr6len]; + } + else + { + LogVerbose(@"recvfrom(socket6FD) = %@", [self errnoError]); + socket6FDBytesAvailable = 0; + free(buf); + } + } + + + BOOL waitingForSocket = NO; + BOOL notifiedDelegate = NO; + BOOL ignored = NO; + + NSError *socketError = nil; + + if (result == 0) + { + waitingForSocket = YES; + } + else if (result < 0) + { + if (errno == EAGAIN) + waitingForSocket = YES; + else + socketError = [self errnoErrorWithReason:@"Error in recvfrom() function"]; + } + else + { + if (flags & kDidConnect) + { + if (addr4 && ![self isConnectedToAddress4:addr4]) + ignored = YES; + if (addr6 && ![self isConnectedToAddress6:addr6]) + ignored = YES; + } + + NSData *addr = (addr4 != nil) ? addr4 : addr6; + + if (!ignored) + { + if (receiveFilterBlock && receiveFilterQueue) + { + // Run data through filter, and if approved, notify delegate + + __block id filterContext = nil; + __block BOOL allowed = NO; + + if (receiveFilterAsync) + { + pendingFilterOperations++; + dispatch_async(receiveFilterQueue, ^{ @autoreleasepool { + + allowed = self->receiveFilterBlock(data, addr, &filterContext); + + // Transition back to socketQueue to get the current delegate / delegateQueue + dispatch_async(self->socketQueue, ^{ @autoreleasepool { + + self->pendingFilterOperations--; + + if (allowed) + { + [self notifyDidReceiveData:data fromAddress:addr withFilterContext:filterContext]; + } + else + { + LogVerbose(@"received packet silently dropped by receiveFilter"); + } + + if (self->flags & kReceiveOnce) + { + if (allowed) + { + // The delegate has been notified, + // so our receive once operation has completed. + self->flags &= ~kReceiveOnce; + } + else if (self->pendingFilterOperations == 0) + { + // All pending filter operations have completed, + // and none were allowed through. + // Our receive once operation hasn't completed yet. + [self doReceive]; + } + } + }}); + }}); + } + else // if (!receiveFilterAsync) + { + dispatch_sync(receiveFilterQueue, ^{ @autoreleasepool { + + allowed = self->receiveFilterBlock(data, addr, &filterContext); + }}); + + if (allowed) + { + [self notifyDidReceiveData:data fromAddress:addr withFilterContext:filterContext]; + notifiedDelegate = YES; + } + else + { + LogVerbose(@"received packet silently dropped by receiveFilter"); + ignored = YES; + } + } + } + else // if (!receiveFilterBlock || !receiveFilterQueue) + { + [self notifyDidReceiveData:data fromAddress:addr withFilterContext:nil]; + notifiedDelegate = YES; + } + } + } + + if (waitingForSocket) + { + // Wait for a notification of available data. + + if (socket4FDBytesAvailable == 0) { + [self resumeReceive4Source]; + } + if (socket6FDBytesAvailable == 0) { + [self resumeReceive6Source]; + } + } + else if (socketError) + { + [self closeWithError:socketError]; + } + else + { + if (flags & kReceiveContinuous) + { + // Continuous receive mode + [self doReceive]; + } + else + { + // One-at-a-time receive mode + if (notifiedDelegate) + { + // The delegate has been notified (no set filter). + // So our receive once operation has completed. + flags &= ~kReceiveOnce; + } + else if (ignored) + { + [self doReceive]; + } + else + { + // Waiting on asynchronous receive filter... + } + } + } +} + +- (void)doReceiveEOF +{ + LogTrace(); + + [self closeWithError:[self socketClosedError]]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Closing +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +- (void)closeWithError:(NSError *)error +{ + LogVerbose(@"closeWithError: %@", error); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + if (currentSend) [self endCurrentSend]; + + [sendQueue removeAllObjects]; + + // If a socket has been created, we should notify the delegate. + BOOL shouldCallDelegate = (flags & kDidCreateSockets) ? YES : NO; + + // Close all sockets, send/receive sources, cfstreams, etc +#if TARGET_OS_IPHONE + [self removeStreamsFromRunLoop]; + [self closeReadAndWriteStreams]; +#endif + [self closeSockets]; + + // Clear all flags (config remains as is) + flags = 0; + + if (shouldCallDelegate) + { + [self notifyDidCloseWithError:error]; + } +} + +- (void)close +{ + LogTrace(); + + dispatch_block_t block = ^{ @autoreleasepool { + + [self closeWithError:nil]; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); +} + +- (void)closeAfterSending +{ + LogTrace(); + + dispatch_block_t block = ^{ @autoreleasepool { + + self->flags |= kCloseAfterSends; + + if (self->currentSend == nil && [self->sendQueue count] == 0) + { + [self closeWithError:nil]; + } + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark CFStream +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +#if TARGET_OS_IPHONE + +static NSThread *listenerThread; + ++ (void)ignore:(id)_ +{} + ++ (void)startListenerThreadIfNeeded +{ + static dispatch_once_t predicate; + dispatch_once(&predicate, ^{ + + listenerThread = [[NSThread alloc] initWithTarget:self + selector:@selector(listenerThread:) + object:nil]; + [listenerThread start]; + }); +} + ++ (void)listenerThread:(id)unused +{ + @autoreleasepool { + + [[NSThread currentThread] setName:MGCDAsyncUdpSocketThreadName]; + + LogInfo(@"ListenerThread: Started"); + + // We can't run the run loop unless it has an associated input source or a timer. + // So we'll just create a timer that will never fire - unless the server runs for a decades. + [NSTimer scheduledTimerWithTimeInterval:[[NSDate distantFuture] timeIntervalSinceNow] + target:self + selector:@selector(ignore:) + userInfo:nil + repeats:YES]; + + [[NSRunLoop currentRunLoop] run]; + + LogInfo(@"ListenerThread: Stopped"); + } +} + ++ (void)addStreamListener:(MGCDAsyncUdpSocket *)asyncUdpSocket +{ + LogTrace(); + NSAssert([NSThread currentThread] == listenerThread, @"Invoked on wrong thread"); + + CFRunLoopRef runLoop = CFRunLoopGetCurrent(); + + if (asyncUdpSocket->readStream4) + CFReadStreamScheduleWithRunLoop(asyncUdpSocket->readStream4, runLoop, kCFRunLoopDefaultMode); + + if (asyncUdpSocket->readStream6) + CFReadStreamScheduleWithRunLoop(asyncUdpSocket->readStream6, runLoop, kCFRunLoopDefaultMode); + + if (asyncUdpSocket->writeStream4) + CFWriteStreamScheduleWithRunLoop(asyncUdpSocket->writeStream4, runLoop, kCFRunLoopDefaultMode); + + if (asyncUdpSocket->writeStream6) + CFWriteStreamScheduleWithRunLoop(asyncUdpSocket->writeStream6, runLoop, kCFRunLoopDefaultMode); +} + ++ (void)removeStreamListener:(MGCDAsyncUdpSocket *)asyncUdpSocket +{ + LogTrace(); + NSAssert([NSThread currentThread] == listenerThread, @"Invoked on wrong thread"); + + CFRunLoopRef runLoop = CFRunLoopGetCurrent(); + + if (asyncUdpSocket->readStream4) + CFReadStreamUnscheduleFromRunLoop(asyncUdpSocket->readStream4, runLoop, kCFRunLoopDefaultMode); + + if (asyncUdpSocket->readStream6) + CFReadStreamUnscheduleFromRunLoop(asyncUdpSocket->readStream6, runLoop, kCFRunLoopDefaultMode); + + if (asyncUdpSocket->writeStream4) + CFWriteStreamUnscheduleFromRunLoop(asyncUdpSocket->writeStream4, runLoop, kCFRunLoopDefaultMode); + + if (asyncUdpSocket->writeStream6) + CFWriteStreamUnscheduleFromRunLoop(asyncUdpSocket->writeStream6, runLoop, kCFRunLoopDefaultMode); +} + +static void CFReadStreamCallback(CFReadStreamRef stream, CFStreamEventType type, void *pInfo) +{ + @autoreleasepool { + MGCDAsyncUdpSocket *asyncUdpSocket = (__bridge MGCDAsyncUdpSocket *)pInfo; + + switch(type) + { + case kCFStreamEventOpenCompleted: + { + LogCVerbose(@"CFReadStreamCallback - Open"); + break; + } + case kCFStreamEventHasBytesAvailable: + { + LogCVerbose(@"CFReadStreamCallback - HasBytesAvailable"); + break; + } + case kCFStreamEventErrorOccurred: + case kCFStreamEventEndEncountered: + { + NSError *error = (__bridge_transfer NSError *)CFReadStreamCopyError(stream); + if (error == nil && type == kCFStreamEventEndEncountered) + { + error = [asyncUdpSocket socketClosedError]; + } + + dispatch_async(asyncUdpSocket->socketQueue, ^{ @autoreleasepool { + + LogCVerbose(@"CFReadStreamCallback - %@", + (type == kCFStreamEventErrorOccurred) ? @"Error" : @"EndEncountered"); + + if (stream != asyncUdpSocket->readStream4 && + stream != asyncUdpSocket->readStream6 ) + { + LogCVerbose(@"CFReadStreamCallback - Ignored"); + return_from_block; + } + + [asyncUdpSocket closeWithError:error]; + + }}); + + break; + } + default: + { + LogCError(@"CFReadStreamCallback - UnknownType: %i", (int)type); + } + } + } +} + +static void CFWriteStreamCallback(CFWriteStreamRef stream, CFStreamEventType type, void *pInfo) +{ + @autoreleasepool { + MGCDAsyncUdpSocket *asyncUdpSocket = (__bridge MGCDAsyncUdpSocket *)pInfo; + + switch(type) + { + case kCFStreamEventOpenCompleted: + { + LogCVerbose(@"CFWriteStreamCallback - Open"); + break; + } + case kCFStreamEventCanAcceptBytes: + { + LogCVerbose(@"CFWriteStreamCallback - CanAcceptBytes"); + break; + } + case kCFStreamEventErrorOccurred: + case kCFStreamEventEndEncountered: + { + NSError *error = (__bridge_transfer NSError *)CFWriteStreamCopyError(stream); + if (error == nil && type == kCFStreamEventEndEncountered) + { + error = [asyncUdpSocket socketClosedError]; + } + + dispatch_async(asyncUdpSocket->socketQueue, ^{ @autoreleasepool { + + LogCVerbose(@"CFWriteStreamCallback - %@", + (type == kCFStreamEventErrorOccurred) ? @"Error" : @"EndEncountered"); + + if (stream != asyncUdpSocket->writeStream4 && + stream != asyncUdpSocket->writeStream6 ) + { + LogCVerbose(@"CFWriteStreamCallback - Ignored"); + return_from_block; + } + + [asyncUdpSocket closeWithError:error]; + + }}); + + break; + } + default: + { + LogCError(@"CFWriteStreamCallback - UnknownType: %i", (int)type); + } + } + } +} + +- (BOOL)createReadAndWriteStreams:(NSError **)errPtr +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + NSError *err = nil; + + if (readStream4 || writeStream4 || readStream6 || writeStream6) + { + // Streams already created + return YES; + } + + if (socket4FD == SOCKET_NULL && socket6FD == SOCKET_NULL) + { + err = [self otherError:@"Cannot create streams without a file descriptor"]; + goto Failed; + } + + // Create streams + + LogVerbose(@"Creating read and write stream(s)..."); + + if (socket4FD != SOCKET_NULL) + { + CFStreamCreatePairWithSocket(NULL, (CFSocketNativeHandle)socket4FD, &readStream4, &writeStream4); + if (!readStream4 || !writeStream4) + { + err = [self otherError:@"Error in CFStreamCreatePairWithSocket() [IPv4]"]; + goto Failed; + } + } + + if (socket6FD != SOCKET_NULL) + { + CFStreamCreatePairWithSocket(NULL, (CFSocketNativeHandle)socket6FD, &readStream6, &writeStream6); + if (!readStream6 || !writeStream6) + { + err = [self otherError:@"Error in CFStreamCreatePairWithSocket() [IPv6]"]; + goto Failed; + } + } + + // Ensure the CFStream's don't close our underlying socket + + CFReadStreamSetProperty(readStream4, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse); + CFWriteStreamSetProperty(writeStream4, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse); + + CFReadStreamSetProperty(readStream6, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse); + CFWriteStreamSetProperty(writeStream6, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanFalse); + + return YES; + +Failed: + if (readStream4) + { + CFReadStreamClose(readStream4); + CFRelease(readStream4); + readStream4 = NULL; + } + if (writeStream4) + { + CFWriteStreamClose(writeStream4); + CFRelease(writeStream4); + writeStream4 = NULL; + } + if (readStream6) + { + CFReadStreamClose(readStream6); + CFRelease(readStream6); + readStream6 = NULL; + } + if (writeStream6) + { + CFWriteStreamClose(writeStream6); + CFRelease(writeStream6); + writeStream6 = NULL; + } + + if (errPtr) + *errPtr = err; + + return NO; +} + +- (BOOL)registerForStreamCallbacks:(NSError **)errPtr +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert(readStream4 || writeStream4 || readStream6 || writeStream6, @"Read/Write streams are null"); + + NSError *err = nil; + + streamContext.version = 0; + streamContext.info = (__bridge void *)self; + streamContext.retain = nil; + streamContext.release = nil; + streamContext.copyDescription = nil; + + CFOptionFlags readStreamEvents = kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered; + CFOptionFlags writeStreamEvents = kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered; + +// readStreamEvents |= (kCFStreamEventOpenCompleted | kCFStreamEventHasBytesAvailable); +// writeStreamEvents |= (kCFStreamEventOpenCompleted | kCFStreamEventCanAcceptBytes); + + if (socket4FD != SOCKET_NULL) + { + if (readStream4 == NULL || writeStream4 == NULL) + { + err = [self otherError:@"Read/Write stream4 is null"]; + goto Failed; + } + + BOOL r1 = CFReadStreamSetClient(readStream4, readStreamEvents, &CFReadStreamCallback, &streamContext); + BOOL r2 = CFWriteStreamSetClient(writeStream4, writeStreamEvents, &CFWriteStreamCallback, &streamContext); + + if (!r1 || !r2) + { + err = [self otherError:@"Error in CFStreamSetClient(), [IPv4]"]; + goto Failed; + } + } + + if (socket6FD != SOCKET_NULL) + { + if (readStream6 == NULL || writeStream6 == NULL) + { + err = [self otherError:@"Read/Write stream6 is null"]; + goto Failed; + } + + BOOL r1 = CFReadStreamSetClient(readStream6, readStreamEvents, &CFReadStreamCallback, &streamContext); + BOOL r2 = CFWriteStreamSetClient(writeStream6, writeStreamEvents, &CFWriteStreamCallback, &streamContext); + + if (!r1 || !r2) + { + err = [self otherError:@"Error in CFStreamSetClient() [IPv6]"]; + goto Failed; + } + } + + return YES; + +Failed: + if (readStream4) { + CFReadStreamSetClient(readStream4, kCFStreamEventNone, NULL, NULL); + } + if (writeStream4) { + CFWriteStreamSetClient(writeStream4, kCFStreamEventNone, NULL, NULL); + } + if (readStream6) { + CFReadStreamSetClient(readStream6, kCFStreamEventNone, NULL, NULL); + } + if (writeStream6) { + CFWriteStreamSetClient(writeStream6, kCFStreamEventNone, NULL, NULL); + } + + if (errPtr) *errPtr = err; + return NO; +} + +- (BOOL)addStreamsToRunLoop:(NSError **)errPtr +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert(readStream4 || writeStream4 || readStream6 || writeStream6, @"Read/Write streams are null"); + + if (!(flags & kAddedStreamListener)) + { + [[self class] startListenerThreadIfNeeded]; + [[self class] performSelector:@selector(addStreamListener:) + onThread:listenerThread + withObject:self + waitUntilDone:YES]; + + flags |= kAddedStreamListener; + } + + return YES; +} + +- (BOOL)openStreams:(NSError **)errPtr +{ + LogTrace(); + + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + NSAssert(readStream4 || writeStream4 || readStream6 || writeStream6, @"Read/Write streams are null"); + + NSError *err = nil; + + if (socket4FD != SOCKET_NULL) + { + BOOL r1 = CFReadStreamOpen(readStream4); + BOOL r2 = CFWriteStreamOpen(writeStream4); + + if (!r1 || !r2) + { + err = [self otherError:@"Error in CFStreamOpen() [IPv4]"]; + goto Failed; + } + } + + if (socket6FD != SOCKET_NULL) + { + BOOL r1 = CFReadStreamOpen(readStream6); + BOOL r2 = CFWriteStreamOpen(writeStream6); + + if (!r1 || !r2) + { + err = [self otherError:@"Error in CFStreamOpen() [IPv6]"]; + goto Failed; + } + } + + return YES; + +Failed: + if (errPtr) *errPtr = err; + return NO; +} + +- (void)removeStreamsFromRunLoop +{ + LogTrace(); + NSAssert(dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey), @"Must be dispatched on socketQueue"); + + if (flags & kAddedStreamListener) + { + [[self class] performSelector:@selector(removeStreamListener:) + onThread:listenerThread + withObject:self + waitUntilDone:YES]; + + flags &= ~kAddedStreamListener; + } +} + +- (void)closeReadAndWriteStreams +{ + LogTrace(); + + if (readStream4) + { + CFReadStreamSetClient(readStream4, kCFStreamEventNone, NULL, NULL); + CFReadStreamClose(readStream4); + CFRelease(readStream4); + readStream4 = NULL; + } + if (writeStream4) + { + CFWriteStreamSetClient(writeStream4, kCFStreamEventNone, NULL, NULL); + CFWriteStreamClose(writeStream4); + CFRelease(writeStream4); + writeStream4 = NULL; + } + if (readStream6) + { + CFReadStreamSetClient(readStream6, kCFStreamEventNone, NULL, NULL); + CFReadStreamClose(readStream6); + CFRelease(readStream6); + readStream6 = NULL; + } + if (writeStream6) + { + CFWriteStreamSetClient(writeStream6, kCFStreamEventNone, NULL, NULL); + CFWriteStreamClose(writeStream6); + CFRelease(writeStream6); + writeStream6 = NULL; + } +} + +#endif + +#if TARGET_OS_IPHONE +- (void)applicationWillEnterForeground:(NSNotification *)notification +{ + LogTrace(); + + // If the application was backgrounded, then iOS may have shut down our sockets. + // So we take a quick look to see if any of them received an EOF. + + dispatch_block_t block = ^{ @autoreleasepool { + + [self resumeReceive4Source]; + [self resumeReceive6Source]; + }}; + + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_async(socketQueue, block); +} +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Advanced +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * See header file for big discussion of this method. + **/ +- (void)markSocketQueueTargetQueue:(dispatch_queue_t)socketNewTargetQueue +{ + void *nonNullUnusedPointer = (__bridge void *)self; + dispatch_queue_set_specific(socketNewTargetQueue, IsOnSocketQueueOrTargetQueueKey, nonNullUnusedPointer, NULL); +} + +/** + * See header file for big discussion of this method. + **/ +- (void)unmarkSocketQueueTargetQueue:(dispatch_queue_t)socketOldTargetQueue +{ + dispatch_queue_set_specific(socketOldTargetQueue, IsOnSocketQueueOrTargetQueueKey, NULL, NULL); +} + +- (void)performBlock:(dispatch_block_t)block +{ + if (dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + block(); + else + dispatch_sync(socketQueue, block); +} + +- (int)socketFD +{ + if (! dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@: %@ - Method only available from within the context of a performBlock: invocation", + THIS_FILE, THIS_METHOD); + return SOCKET_NULL; + } + + if (socket4FD != SOCKET_NULL) + return socket4FD; + else + return socket6FD; +} + +- (int)socket4FD +{ + if (! dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@: %@ - Method only available from within the context of a performBlock: invocation", + THIS_FILE, THIS_METHOD); + return SOCKET_NULL; + } + + return socket4FD; +} + +- (int)socket6FD +{ + if (! dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@: %@ - Method only available from within the context of a performBlock: invocation", + THIS_FILE, THIS_METHOD); + return SOCKET_NULL; + } + + return socket6FD; +} + +#if TARGET_OS_IPHONE + +- (CFReadStreamRef)readStream +{ + if (! dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@: %@ - Method only available from within the context of a performBlock: invocation", + THIS_FILE, THIS_METHOD); + return NULL; + } + + NSError *err = nil; + if (![self createReadAndWriteStreams:&err]) + { + LogError(@"Error creating CFStream(s): %@", err); + return NULL; + } + + // Todo... + + if (readStream4) + return readStream4; + else + return readStream6; +} + +- (CFWriteStreamRef)writeStream +{ + if (! dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@: %@ - Method only available from within the context of a performBlock: invocation", + THIS_FILE, THIS_METHOD); + return NULL; + } + + NSError *err = nil; + if (![self createReadAndWriteStreams:&err]) + { + LogError(@"Error creating CFStream(s): %@", err); + return NULL; + } + + if (writeStream4) + return writeStream4; + else + return writeStream6; +} + +- (BOOL)enableBackgroundingOnSockets +{ + if (! dispatch_get_specific(IsOnSocketQueueOrTargetQueueKey)) + { + LogWarn(@"%@: %@ - Method only available from within the context of a performBlock: invocation", + THIS_FILE, THIS_METHOD); + return NO; + } + + // Why is this commented out? + // See comments below. + +// NSError *err = nil; +// if (![self createReadAndWriteStreams:&err]) +// { +// LogError(@"Error creating CFStream(s): %@", err); +// return NO; +// } +// +// LogVerbose(@"Enabling backgrouding on socket"); +// +// BOOL r1, r2; +// +// if (readStream4 && writeStream4) +// { +// r1 = CFReadStreamSetProperty(readStream4, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); +// r2 = CFWriteStreamSetProperty(writeStream4, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); +// +// if (!r1 || !r2) +// { +// LogError(@"Error setting voip type (IPv4)"); +// return NO; +// } +// } +// +// if (readStream6 && writeStream6) +// { +// r1 = CFReadStreamSetProperty(readStream6, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); +// r2 = CFWriteStreamSetProperty(writeStream6, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeBackground); +// +// if (!r1 || !r2) +// { +// LogError(@"Error setting voip type (IPv6)"); +// return NO; +// } +// } +// +// return YES; + + // The above code will actually appear to work. + // The methods will return YES, and everything will appear fine. + // + // One tiny problem: the sockets will still get closed when the app gets backgrounded. + // + // Apple does not officially support backgrounding UDP sockets. + + return NO; +} + +#endif + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#pragma mark Class Methods +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + ++ (NSString *)hostFromSockaddr4:(const struct sockaddr_in *)pSockaddr4 +{ + char addrBuf[INET_ADDRSTRLEN]; + + if (inet_ntop(AF_INET, &pSockaddr4->sin_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL) + { + addrBuf[0] = '\0'; + } + + return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding]; +} + ++ (NSString *)hostFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6 +{ + char addrBuf[INET6_ADDRSTRLEN]; + + if (inet_ntop(AF_INET6, &pSockaddr6->sin6_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL) + { + addrBuf[0] = '\0'; + } + + return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding]; +} + ++ (uint16_t)portFromSockaddr4:(const struct sockaddr_in *)pSockaddr4 +{ + return ntohs(pSockaddr4->sin_port); +} + ++ (uint16_t)portFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6 +{ + return ntohs(pSockaddr6->sin6_port); +} + ++ (NSString *)hostFromAddress:(NSData *)address +{ + NSString *host = nil; + [self getHost:&host port:NULL family:NULL fromAddress:address]; + + return host; +} + ++ (uint16_t)portFromAddress:(NSData *)address +{ + uint16_t port = 0; + [self getHost:NULL port:&port family:NULL fromAddress:address]; + + return port; +} + ++ (int)familyFromAddress:(NSData *)address +{ + int af = AF_UNSPEC; + [self getHost:NULL port:NULL family:&af fromAddress:address]; + + return af; +} + ++ (BOOL)isIPv4Address:(NSData *)address +{ + int af = AF_UNSPEC; + [self getHost:NULL port:NULL family:&af fromAddress:address]; + + return (af == AF_INET); +} + ++ (BOOL)isIPv6Address:(NSData *)address +{ + int af = AF_UNSPEC; + [self getHost:NULL port:NULL family:&af fromAddress:address]; + + return (af == AF_INET6); +} + ++ (BOOL)getHost:(NSString **)hostPtr port:(uint16_t *)portPtr fromAddress:(NSData *)address +{ + return [self getHost:hostPtr port:portPtr family:NULL fromAddress:address]; +} + ++ (BOOL)getHost:(NSString **)hostPtr port:(uint16_t *)portPtr family:(int *)afPtr fromAddress:(NSData *)address +{ + if ([address length] >= sizeof(struct sockaddr)) + { + const struct sockaddr *addrX = (const struct sockaddr *)[address bytes]; + + if (addrX->sa_family == AF_INET) + { + if ([address length] >= sizeof(struct sockaddr_in)) + { + const struct sockaddr_in *addr4 = (const struct sockaddr_in *)(const void *)addrX; + + if (hostPtr) *hostPtr = [self hostFromSockaddr4:addr4]; + if (portPtr) *portPtr = [self portFromSockaddr4:addr4]; + if (afPtr) *afPtr = AF_INET; + + return YES; + } + } + else if (addrX->sa_family == AF_INET6) + { + if ([address length] >= sizeof(struct sockaddr_in6)) + { + const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)(const void *)addrX; + + if (hostPtr) *hostPtr = [self hostFromSockaddr6:addr6]; + if (portPtr) *portPtr = [self portFromSockaddr6:addr6]; + if (afPtr) *afPtr = AF_INET6; + + return YES; + } + } + } + + if (hostPtr) *hostPtr = nil; + if (portPtr) *portPtr = 0; + if (afPtr) *afPtr = AF_UNSPEC; + + return NO; +} + +@end diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj index 0998e61..cb63cea 100644 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ b/Pods/Pods.xcodeproj/project.pbxproj @@ -9,9 +9,9 @@ /* Begin PBXAggregateTarget section */ 0E87F100EFC3B44F5BB5AF12375D07F1 /* OpenIMSDKCore */ = { isa = PBXAggregateTarget; - buildConfigurationList = 8B01AA7742F11A0216B05AA927E0058A /* Build configuration list for PBXAggregateTarget "OpenIMSDKCore" */; + buildConfigurationList = 68A32CA569D382E0EF6F64823689DB89 /* Build configuration list for PBXAggregateTarget "OpenIMSDKCore" */; buildPhases = ( - 9C3AD94056D908812BA5E12CFF63EDC3 /* [CP] Copy XCFrameworks */, + 326D11B4BB33F302B3E3C1BBC9BB42AD /* [CP] Copy XCFrameworks */, ); dependencies = ( ); @@ -24,13 +24,13 @@ 7076D8346C63B23AFEB99C337B4FB476 /* [CP] Copy XCFrameworks */, ); dependencies = ( - DAB0B58F0B3BED768A9B0F0BB1868BB9 /* PBXTargetDependency */, + 44DDEE64FB3449B2B3E6F53316008432 /* PBXTargetDependency */, ); name = GYSDK; }; 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */ = { isa = PBXAggregateTarget; - buildConfigurationList = 89AA749B6C52668A1526F12E92C23B8D /* Build configuration list for PBXAggregateTarget "AMapFoundation" */; + buildConfigurationList = 36223DB09DB3CF57C120450B0C942271 /* Build configuration list for PBXAggregateTarget "AMapFoundation" */; buildPhases = ( ); dependencies = ( @@ -43,7 +43,7 @@ buildPhases = ( ); dependencies = ( - CF114D96576327C59773C0EC9865FFF2 /* PBXTargetDependency */, + A08C5B30F2EC99B5093898EB8BA4F890 /* PBXTargetDependency */, ); name = AMap3DMap; }; @@ -63,7 +63,7 @@ buildPhases = ( ); dependencies = ( - 84497B27C720F031D3E7C120FA160FB6 /* PBXTargetDependency */, + 41F47FE08C927557348C692B5934F3A4 /* PBXTargetDependency */, ); name = AMapSearch; }; @@ -79,7 +79,7 @@ }; 8194323886ECAF7E912EFDAFC84017AA /* ZXSDK */ = { isa = PBXAggregateTarget; - buildConfigurationList = 702C70FAB15C1256D5CDB0E1AE949E8D /* Build configuration list for PBXAggregateTarget "ZXSDK" */; + buildConfigurationList = 2D332E71D2EB81E9402144981B454116 /* Build configuration list for PBXAggregateTarget "ZXSDK" */; buildPhases = ( ); dependencies = ( @@ -92,7 +92,7 @@ buildPhases = ( ); dependencies = ( - C2B537A7B0121571C7968255381B9EAC /* PBXTargetDependency */, + DBC24143E98243D4AF1EA5BC398DF911 /* PBXTargetDependency */, ); name = AMapLocation; }; @@ -103,5127 +103,5288 @@ D984A768DD4A1ECAD484A89C6159909E /* [CP] Copy XCFrameworks */, ); dependencies = ( - F12D1B019C7180F20A92D3C2AAF995CD /* PBXTargetDependency */, + DB107D7CB98F06D8F8316BDF80F19D13 /* PBXTargetDependency */, ); name = GTCommonSDK; }; /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 00163F4101C75E466D374529D3F742B7 /* AnimationConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D6DC81BAFA296758CF20F117E7A283A /* AnimationConfiguration.swift */; }; - 009F3E30D7FA73B953B542D6CE0478F4 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42E84DD790B283F0D5185499E7E6716 /* Utilities.swift */; }; - 00D69AD872EF460A7A9715B345A1C31B /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = D08BE8E0FEE054D26245C2FF226177A0 /* Protected.swift */; }; - 010225CF66F664A19FA67E883D0A5BA6 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E1546130068EEAD3189EC41869D6F14 /* UIImage+Transform.m */; }; - 01216C042B056FFF0FC7EE32A002C38A /* IQKeyboardCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 525CD205D27F9863472F14703FE96F86 /* IQKeyboardCore-dummy.m */; }; - 01251B0F77150F7AB43D9384DF6307B5 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 769581DC9784BD5739E44A9BD1FEE12D /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 013D0B0A8786F5B34F039FB3704E12AB /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC5247F475E31AF3FCDD129E145E5EA2 /* Indicator.swift */; }; - 017B571D84F5F8CE98B17E0221D123EC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = DC9DF62EF43848BE1C5F234D65BCBC98 /* PrivacyInfo.xcprivacy */; }; - 019E2E60370D97793F78BFA5B82E7F70 /* ImageProgressive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7375C57236DEA3235E0F2EEB61FA4BC5 /* ImageProgressive.swift */; }; - 01A2F980FF2D6910240FF18E32D42F01 /* URLPathComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2FF16D1D087D591C2B162AEF8018694 /* URLPathComponent.swift */; }; - 01A8F02D2B45B1A7995955F2FA96BE80 /* lossless.h in Headers */ = {isa = PBXBuildFile; fileRef = BB3FD8C20C18627E7DFACF967A196E8D /* lossless.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01DB231356AA70412D3F0CFD9DDD5536 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = CDB3370B2D9A7B4B4FEE5BBFAC62D485 /* utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01FCBA3480BF4F485F07F1C7B25B88D6 /* NSObject+YBImageBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = DDB45231F1F5EB920B95C347ADDA37E0 /* NSObject+YBImageBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 021063C8698125D953F5706AABD452C2 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F217B8362CC3E3556A8BBDC8F0693C /* SDWebImageDownloaderConfig.m */; }; - 02137A1D7F2DA49192522B3CF40ACB6F /* random_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A5BFBD150FA1FFD5F8206A024E6D8015 /* random_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 00163F4101C75E466D374529D3F742B7 /* AnimationConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5B12012F6233B5D8F331C901A7869C /* AnimationConfiguration.swift */; }; + 0064701BFCF9493C543F9EA81131D857 /* bit_writer_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A509ACD41593F9645F64E6E501A170B4 /* bit_writer_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0069ED224FBE6CB9E7C00EFE24D18CE8 /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = 77108217CD9670D65A815C85CAD4BC74 /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 009F3E30D7FA73B953B542D6CE0478F4 /* Utilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDCBE1A39A53B0074D2F5EB3E791CCF /* Utilities.swift */; }; + 00A2D7844984BB5F3786A89A8583B088 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 712994A3D2CF6756C96528319EEF6AA9 /* utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 00D69AD872EF460A7A9715B345A1C31B /* Protected.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC26C4F91EEB4297476C8D0F8B4D97BA /* Protected.swift */; }; + 01216C042B056FFF0FC7EE32A002C38A /* IQKeyboardCore-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B20E54E915DD05D6DC0A202B6A746A5 /* IQKeyboardCore-dummy.m */; }; + 0128B45833224DCB79FCE4EDBD501E43 /* IQTextInputViewNotification-IQTextInputViewNotification in Resources */ = {isa = PBXBuildFile; fileRef = F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */; }; + 013D0B0A8786F5B34F039FB3704E12AB /* Indicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C427136B27DC559447F9182284C8042 /* Indicator.swift */; }; + 01461285DFE546C71E99B49A3BF32601 /* CocoaMQTT5.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6153E9D8FB50D6577852480096F689B /* CocoaMQTT5.swift */; }; + 018484B9FC55FBB212B6A2A24558C516 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EF18E46D35DFA8EA15926BDEF825725 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 019E2E60370D97793F78BFA5B82E7F70 /* ImageProgressive.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2CD2E3BBF844A6612B4784DF5C04CFA /* ImageProgressive.swift */; }; + 01A2F980FF2D6910240FF18E32D42F01 /* URLPathComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E25ED01381098B01A662D40ED3B1C5E /* URLPathComponent.swift */; }; + 01FCBA3480BF4F485F07F1C7B25B88D6 /* NSObject+YBImageBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = D3D69DB59BA23808B9FC7CA5290FE648 /* NSObject+YBImageBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; 0217BD2D535BBE17D651A40D117783C5 /* Kingfisher-Kingfisher in Resources */ = {isa = PBXBuildFile; fileRef = C298ABB78D9B05529B89D8322DB2E7B0 /* Kingfisher-Kingfisher */; }; - 02661A0934BC99375198D41EA84CDD7D /* YBIBImageCell+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 26E7CB556326C9077DF63BEEB7B2E40E /* YBIBImageCell+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02683E28CDD2177B4C9357DE2703DDEA /* ControlEvent+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65D71891D845159664180BE4751EE547 /* ControlEvent+Driver.swift */; }; - 02D2DB67E038F3DAD4147733C3DAC7FC /* DDASLLogCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = DC26BBCF312733BE82EE83250C2C92A3 /* DDASLLogCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02E3116300863BD1C354A8D903D7565B /* OIMMessageInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C10ED747514E81C114AB0F3CA16FEE2 /* OIMMessageInfo.m */; }; - 02ED202445E582ACB19CAAEFAC809CA3 /* PhotoManager+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = A41EF41F02941532EE13C414E23DEEDD /* PhotoManager+Download.swift */; }; - 02EF3A9D8DDA3246BD301B1102089A2A /* Core+PHAssetCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89D6F4F353F9668ECBCBFBCFF03BAB81 /* Core+PHAssetCollection.swift */; }; - 02F77CF19A41C0AB44D560F038B17E47 /* IQKeyboardReturnManager-IQKeyboardReturnManager in Resources */ = {isa = PBXBuildFile; fileRef = 110BD425B6CAD6801539E2C6AB6E0662 /* IQKeyboardReturnManager-IQKeyboardReturnManager */; }; - 02F91E3C48D92BE962A7748A6788CD6D /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = 584B397D010BE3052C3967E87A313165 /* SDAnimatedImageRep.m */; }; - 032A08256DCE07E9C62F690AA69B4D27 /* UI+SectionedViewType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 130BE4B7F904DF2C8DB08317F844B561 /* UI+SectionedViewType.swift */; }; - 03760AC656BC11C388DB4824EAF3EFF8 /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CECC955C1BC5B80B4C9603E67AF9B13 /* MainScheduler.swift */; }; - 03ABABC12DB32941CACA6E84B73A6E4A /* String+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91916B07C37A209D25B7D910842E604 /* String+IdentifiableType.swift */; }; - 03DDE32C9E982AE87E8AA3D926BCEB35 /* enc_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 7A08D4E2AC3083940E2DD5AB50F42519 /* enc_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 03DF4BF1D027604EBA81A2B71EFB9080 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B9B2BED448FF6B8E278E87D6D430A3 /* QuartzCore.framework */; }; - 0416889045464020D660A5621EB34E34 /* AssetManager+AVAssetExportSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = E42FFE14BC42749A348DCFC03CFCB2BF /* AssetManager+AVAssetExportSession.swift */; }; - 042116C407630C22F93E1349008E29F8 /* OIMMergeElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5199447D815E8771DC0B057BD811E2AE /* OIMMergeElem.m */; }; - 045A49902242E7B3D70B9F988CA78AF5 /* alpha_processing_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 82E339D953808BCD8DE3A8DE42F2039B /* alpha_processing_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 046C8CF4F5BC1F8F7AEB535E1FB5CFF9 /* TADotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 17FF6580767902B4011A015F2B07A578 /* TADotView.m */; }; - 047B4D6CD41F000AA47649010F82993F /* PreviewVideoControlViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5F61B293B8A4C483CC96C8328E45C9D /* PreviewVideoControlViewCell.swift */; }; - 047B5E7719C01E0B8F74EFF450844D54 /* MoyaProvider+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 753831899F12C2CB084FFE69415AB0DD /* MoyaProvider+Internal.swift */; }; - 04AC99F44BE90EF4C3AA1C4E650524A2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 04BE13B7BE601D68D258C5C2141CE32D /* VisibilityAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11557BC158C05BFB9E2F996F3EEF9C99 /* VisibilityAnimation.swift */; }; - 04D2FBEDB09B8FC903912AC7993FF237 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29F796D6472EA6FC82B038C97ECF4785 /* CoreGraphics.framework */; }; - 04EB3FD7471864461899D550CEE10E67 /* SGTorch.h in Headers */ = {isa = PBXBuildFile; fileRef = 89178DBDEDAE6B75FB7DB74297B2681C /* SGTorch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 04FBCBF56FCF4C5D0720AC79C655568C /* EditorCropConfirmView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15D5EFF4E9FEA0C1A35B46E0B26B96DD /* EditorCropConfirmView.swift */; }; - 05258BE5ECB12221959C3063D7FC2D65 /* ShapeLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A5645C607400D64B7E1AB629322A90E /* ShapeLayerModel.swift */; }; - 052A668537A68ED7885540E5C57DBFED /* DateComponents+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D36685DBD069796D57F250F298F4E12 /* DateComponents+Extras.swift */; }; - 053D5ECAC6AB411239EADAC1C5F02451 /* CompatibilityTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7D400804C9D63E6FC3EC09C0CDDD6D2 /* CompatibilityTracker.swift */; }; - 053E17D6D68FEA74FD5AE22B6802A997 /* SetContentProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3ED3DE1B23ED24A4AD3B102497F472B /* SetContentProviding.swift */; }; - 0543AA6007B40C505F972E8DFD40D358 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = B99344DA0C98D4C009A4E1AECCDF9459 /* RecursiveLock.swift */; }; - 054A91521A2745391CE2146B6F155213 /* ItemPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BDA68A4AB4B1C7ACD7A370540F816C1 /* ItemPath.swift */; }; - 0560CF0FAED380A38E9AC7B99E4DAA91 /* SGPermissionCamera.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E084374ABF7B54C419FC9A80C6AA656 /* SGPermissionCamera.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 05900739BCE69610C92CB0C95F876B91 /* AnimatedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90ABBE9D63AD78104E5DACFD423F724C /* AnimatedControl.swift */; }; - 05A4658C91684151AF00A23640687114 /* EpoxyableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA1147DBAED55DD02A850E00497B92DB /* EpoxyableView.swift */; }; - 05B425A1503F1F39BC47560E422BA861 /* EpoxyModelArrayBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 291F235F7EF38C4F833B4A14B6C4236F /* EpoxyModelArrayBuilder.swift */; }; - 05C2F1443184466A943591154955D0D1 /* SendMessageCallbackProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = CD009445A239BEED49369C3E6069079A /* SendMessageCallbackProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 05E2B7C1DB7528A0BBEA1521BE0DBAF1 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 780859E89AEFB4AE5934635E23DD9F9E /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 05E73561BC60D31AC165FAE1231C6478 /* PhotosUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1296678825E509F2A6EBEA9A83A60147 /* PhotosUI.framework */; }; - 05F4664FC4EF89925161A064AA6481BB /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFAFFED0F09E8D30612FFC64F749D3BA /* IQKeyboardManager+Position.swift */; }; - 061133BB6337EE5A3410B5128CFC2CE4 /* GradientAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC3BD5DF5C448ECFA97F2D14FD13D728 /* GradientAnimations.swift */; }; - 0633DE475D1D557CF95B89721060EA76 /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 944D14CC3340E5906FB0AE787C227F8A /* SDImageAssetManager.m */; }; - 06365D4673388FDCBC959A28CAA66A2C /* KingfisherWebP-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F68BD6425465F18A23B292AC6D7B869 /* KingfisherWebP-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 064D909CD827405E8DCC309DB1B7775A /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E03558060FDD52E3C586D6C52AE3EEB /* ConstraintLayoutSupportDSL.swift */; }; - 0689573C4CB915F596ACA7E8D0FA2FA2 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21AA7EE52A3DAD218EF3EAB7703979AB /* RecursiveLock.swift */; }; - 06A37E1EACF17C6B94837E61D623B2DB /* sharpyuv.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B493390BFB085C207195D0FFD8C73B3 /* sharpyuv.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 06BF9E1DE98B5299648D75DE99246159 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8DA1971C85095100A5EE182440E27A2 /* Platform.Darwin.swift */; }; - 06CF4848159EBE88FF4132522F525057 /* enc_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = BDE3C415D49D9DBEE2D6B0B692F711A8 /* enc_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 0742024C403D33DAE1A61F92BBFB5E77 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFA30AF832CB05775709E542E804898A /* Shape.swift */; }; - 074387D1012BC0F5C90B358F27A1331F /* RequestCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55EA2E5B9949ED4975A64ED4EF5C4522 /* RequestCompression.swift */; }; - 07B21EEE77A36892011309491EB2EC0D /* Infallible+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = AFCDE5AF3EB4961DEC846A4D7B35E777 /* Infallible+Operators.swift */; }; - 07CA17824EC0D3FEE27CD298B01DF318 /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = A9A5A6309F39C14ADCA5F233F829C0AB /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 07F13C3B7C638A4698BC8027BE97F41A /* InvertedMatteLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC837C19FBB78BFC74ECCA16877EF7B6 /* InvertedMatteLayer.swift */; }; - 080FBC62B74BF059220234CB58B07DF7 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7FE6109F51AB7D33301A8EC635FFAA0 /* Image.swift */; }; - 08245D4B470F47E0B48E2FAF0AC143A3 /* MarqueeLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3046218CAE71E06503DEE56FE37F2119 /* MarqueeLabel-dummy.m */; }; - 083B0B494C5F6B69924BB36E3850D23E /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2E935C69715E7BEAA6E8BB816DE0032 /* RequestTaskMap.swift */; }; - 084C46802D14C32B995FE54FB53ACD0D /* Core+UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5E097351E3CA0442F19440EBE19E5E6 /* Core+UIImage.swift */; }; - 084E92CB08662FC57F439221B88153F5 /* _RXObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = 4606C2115D48BBA83BE7F9CC386AB737 /* _RXObjCRuntime.m */; }; - 08719ABCE689ED74FE7486B1E49DAA6C /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 62F44A98B2397C9F6E5B8CFED65CE453 /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0873B6769DCEF912824DEFEC89E814B5 /* PhotoManager+Language.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8223C1F95FE293B35A7BBCB5B6B8125 /* PhotoManager+Language.swift */; }; - 08805C91EE5E8F3B036C8A2944A1FEC0 /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = B47068467C61A7C35C481F7855A87237 /* Map.swift */; }; - 08808820A664FF8A05D05673DFC2F0D9 /* Defaults+StringToBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = D835F5767328148D3747835C4E0D09CD /* Defaults+StringToBool.swift */; }; - 08A74961FEEC9A18DF39B2D15B0FCA03 /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2F7D06A790CB3DE1726D6C0C304807A /* ObservableConvertibleType.swift */; }; - 08BAC516D9FC9F41B4BD38C7D32EEB00 /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E9446A922C299F4C733B3E3B64FC4DF /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 08CEC0498D8A036E9B1C73E75EA97DA7 /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 803551D524EB59D9A654D4CB1D25BE8F /* Archive+WritingDeprecated.swift */; }; - 08D760F7FD56D081A8EC93E79E2AF58C /* Date+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC806792CC71E85249287A955EF3507D /* Date+Compare.swift */; }; - 08DE41CEAAE46D4F36B5A49C0215C73F /* YYAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = F92FC47C21AB70D50DE321EF7CDC1FEF /* YYAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 090DA6F59EF2FFD1D4CCF09575EB78EF /* ProgressImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4559C34E42D4D2C64A174AA002B8056D /* ProgressImageView.swift */; }; - 091C8409581AE1022225E05E5416E01E /* OIMUpdateFriendsReq.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D589F9274BAFDCFA26362A2DA2F9EB0 /* OIMUpdateFriendsReq.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 092C1D4CE48DA5E626971772CA2B63FA /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFE14717EDAB4A6C917DC1DC5F037922 /* Error.swift */; }; - 095210E5E9EA5A07D9E27224A6306B39 /* RxPickerViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6E0BBACCC2ABD7E1753510C4D994B7 /* RxPickerViewDelegateProxy.swift */; }; - 0975A08237E7A3B1A89703DF4F95D2CE /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C30CD98BDFEAFA1281C881CB316CD95 /* NSTextStorage+Rx.swift */; }; - 09B1E7904CF237490E6EA35DAB2AFD76 /* Marker.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEB9AB80392ECE7248709873DCA13FCC /* Marker.swift */; }; - 09D303C994021652DF841C463DBD1DC5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 09E1F569A93FAD4B9149E30B9301F44A /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB018CCCA925531421DF2AABFAE43A25 /* ConstraintPriority.swift */; }; - 0A064677F67C9C59B3EC08EA2C6882C0 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 43E68058B169D1FBD605BEB82E2A7B8F /* PrivacyInfo.xcprivacy */; }; - 0A3AA3796404AE5372CD8BF82DB292CA /* SGQRCodeLog.h in Headers */ = {isa = PBXBuildFile; fileRef = C5E3669AB59288D37DDEF78C1D1789C8 /* SGQRCodeLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A5209C46796D51E1A1887AD438B2B68 /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A4D97DA05C3A8E92FE31917D35A2473 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A543346E663B7BA3CC071AA92390EB4 /* TADotView.h in Headers */ = {isa = PBXBuildFile; fileRef = DBB07160DFB218EECCC7DBA7F12212BD /* TADotView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A58664142EA2685FD6FE2DF0AA0FBC6 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 05E906325386DD455125AD4ED4D148D2 /* UIImageView+WebCache.m */; }; - 0A6AAD2D2BA4C7238396D11707EAEA18 /* Calendars.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D1B0A1709FD35727940D11722F80FA /* Calendars.swift */; }; - 0A7047F9F316230DC3D91A5506FCC0CA /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FC9167B623F82556D7A2A397717795 /* PrimitiveSequence+Zip+arity.swift */; }; - 0A8D9AC2B8F9313FA1E0766D228E2633 /* YBIBDefaultWebImageMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EA880E07DFDD100C561A72CF77D3DB3 /* YBIBDefaultWebImageMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0AB7466CAD9AFA68F7D623D26216DD29 /* PolygonNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D48287B30F0088EC0C5310945CA4B7A1 /* PolygonNode.swift */; }; - 0ACE791308083423E3C7527EF3A9D5F8 /* unwrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC43992A1CEA954A9FF7EAFBFE2123A5 /* unwrap.swift */; }; - 0AD12222CC550A22E04D0C4CD300EEAA /* AssetManager+ImageData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2F63F0B03B6BFA25E6C141689BD633 /* AssetManager+ImageData.swift */; }; - 0ADC968298C0D9A1089DF880985DBBAD /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9D4067406FA8209E984A168CBD3D6A7 /* SDImageLoader.m */; }; - 0AE6E0A416E18503E36FBDB73A7EB31F /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = 16355D6BA368A1364975051A8532358E /* UIImage+ExtendedCacheData.m */; }; - 0AF16F084FDB6E84677C4692CD931EE6 /* TAAbstractDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B2B2FCF8F9A4061EFB2C1C80198FBF1 /* TAAbstractDotView.m */; }; - 0B3286E093C11F29E2781EB2C89E9145 /* upsampling_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 1F7005538E0ADBFEE28935345444E9BE /* upsampling_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 0B6EDB15A5AFF1C293C87685F2AFDED4 /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60749802573F5E98F0C09AA9D2F3812 /* HexColorTransform.swift */; }; - 0B72E2D6759DA3AD821EFD74DDD47A52 /* YYImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 32262A01385AA280BD0BCCC5C70A0237 /* YYImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BC1D7B347B7BBFD5D95BBDA306E859A /* ImageAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2436D99B65B6A8D428A0B859116B860 /* ImageAsset.swift */; }; - 0BCB47E9D038A812EEBA83A8B9E5E7E8 /* PhotoEditorDrawView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94E6EE5AEC188C24CA3F770D37E635EC /* PhotoEditorDrawView.swift */; }; - 0BD03DDEEB3CBDB7C2D899140420AB5D /* YBIBVideoCell+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 59FF3CB194901CFCF1A50573DE01113E /* YBIBVideoCell+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BD1E52C6A20A1E2F9B6044C2CF41DAC /* SDCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 57E2B9941F8CBF419C46C68C9AF8CE62 /* SDCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BFC16EDC3C5B27C356AE6874D501A4F /* GradientValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 380BDB77A870AFA5A57428CCF35356E9 /* GradientValueProvider.swift */; }; - 0C9333022A04758AE828D9F279411DBD /* RxTableViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A5AE75EBDE8DA870927704CD94AC0E1 /* RxTableViewSectionedReloadDataSource.swift */; }; - 0CA7A132ABE7018DE9295456732F38BB /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD4AA3C5C4BE5AF110BEF84C2B425AA0 /* ConstraintAttributes.swift */; }; - 0CC2D56EACB32070DB435FD288A1CD4E /* DidEndDisplayingProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5D3C4F3B57323AEE14C3961892E5BBB /* DidEndDisplayingProviding.swift */; }; - 0CEC3ACCB21A1514075A65CA04ED003D /* CALayer+setupLayerHierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0063BE2DFA2C0152F5DDEEF7CA4531B7 /* CALayer+setupLayerHierarchy.swift */; }; - 0CF8BA66E12078120DB863307972EEB4 /* MultiTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 961625FA203A229009E5377F960B59F0 /* MultiTarget.swift */; }; - 0CFF7D4D0E7F1D23CE8D0B8059428B78 /* yuv_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = DEE0EF0F26FC8E76181FFE777C562CBA /* yuv_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 0D24F81A53BBD7B165BF5CB77A3C79E7 /* AnimatedSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = BED7A2A6B98402F4898A2ED5031C9DD6 /* AnimatedSwitch.swift */; }; - 0D2AE7D9CDDDBC4664A8A74CA2824FCA /* filter_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = C18AEDBF31CB2572AB07F8722E0870F3 /* filter_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 0D416C0305A0EC46EA7B9D44984DD1C1 /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 421FF5F39905655DDCE1A5F2FF2176D9 /* BooleanDisposable.swift */; }; - 0D56D4EF41351DAE13C3E467D4168FDC /* ObservableConvertibleType+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = E535975A1E831BDA5977960E97506533 /* ObservableConvertibleType+Driver.swift */; }; - 0D7A87A56DA3B690ECAE9690D7D86E89 /* YYFrameImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 5369DE443FA67414E25C47C16C19CDD2 /* YYFrameImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0D938196DFD18FB78E92B65939ED3DF0 /* CurrentFileNameHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27759D268EA3293ACE7824423B8230A2 /* CurrentFileNameHelper.swift */; }; - 0D97A8A4AC6C7B5ECBC2120ADDF396E3 /* OIMFullUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 565598230E6135EF0029F6DFA99179EE /* OIMFullUserInfo.m */; }; - 0DB7EBD9B5E8EDE55DC6565BEFB2501C /* ssim.c in Sources */ = {isa = PBXBuildFile; fileRef = 2FB634BBC441E1A91C3B4D8D27BFF7BD /* ssim.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 0DBAE07ED5D8EFF25BD2F6B66EE97A50 /* YBIBAuxiliaryViewHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BEF055B7F4F83D3D0FEE7E0F24A888D /* YBIBAuxiliaryViewHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0DC813E62FCEF6C6C3009180D7790BFE /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 907CC3064F74B222E3E0073D5AD8B602 /* Result+Alamofire.swift */; }; - 0DE397C98C939B745F424A87A2B0F4C2 /* color_cache_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 6FA64DC127F889004374FBFEC2973DD1 /* color_cache_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 0DE5DB9C6227B3416778D8417DD95EA9 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24EB183736E04F3300474C4908E03098 /* ConstraintView+Extensions.swift */; }; - 0E13270B2F909467965F667C340E2179 /* CallbackContextEpoxyModeled.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6C5691B4B9FEB2303C898F704D97B3F /* CallbackContextEpoxyModeled.swift */; }; - 0E30A2856E438861946ECEE79ADC366A /* Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E088D11842C15829D25C41127693532 /* Font.swift */; }; - 0E61B65A6B4B7D35361B09DD9328F462 /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2082CF6101F2C1D95E6AA64DA48FA9C6 /* IQPlaceholderable.swift */; }; - 0E658960F47D4CF87A47AA250064BA14 /* ignore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C734560368C98DD1126AAEE26285B2F /* ignore.swift */; }; - 0E69D7FEC523A96BAD55D2F023719866 /* partition+RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4DE10A108C2BBBDF4265A2B0E9396B5 /* partition+RxCocoa.swift */; }; - 0E7F7BDD99F835B83F946ED6E6C5E69E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 0ECDDB52DFF2A8C21B6FEF7889ED3D7D /* DDOSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 12EE9646A1EE8B5F4F5EABA208A9045D /* DDOSLogger.m */; }; - 0EF10747EF2A02413E84BD5EF7C87A4B /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = E335BCACA8215B4F832B6972CE0B45A4 /* MJRefreshNormalHeader.m */; }; - 0F00F218544256F621E912A1B2D31E14 /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = A8167F7A91C1C9DD4217753A632852CD /* SDmetamacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0F3F1ABE78283E64572B46B6F2128961 /* IQTextInputViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = C727B0032405B20871145670E76F6A35 /* IQTextInputViewInfo.swift */; }; - 0F4377E02EB437F7B9E8057DD477F38D /* PhotoAssetCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D773DCDA3327CB85C313A8E3F689E532 /* PhotoAssetCollection.swift */; }; - 0FAE540AF1B286B3DB2B1A692C9CFA9C /* URLSession+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9813C135DE125969EAF42F73CC20580 /* URLSession+Rx.swift */; }; - 0FD18359A58F66248D18498A8252A505 /* AssetManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7736D9652CE71234ABED55D62ADBD35F /* AssetManager.swift */; }; - 10176A35E59957F7BEF5D7CC5C75D6BF /* vp8i_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 7ACD8B678F457F12617E8F02C445A9F0 /* vp8i_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 103337BF8ACBBD1355A09C1805816F01 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40B3777A774404758AB6FCB677DE0654 /* Platform.Linux.swift */; }; - 10358166A89DEA3283C1A996CD8DC55E /* GroupOutputNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 675B12B7CAD812ECF38A4EBD29B11E06 /* GroupOutputNode.swift */; }; - 106F4BFFBE4F028458C0C4A5BAFD3B41 /* YBIBVideoTopBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 86A3B7CF5EAD9973DAF3C6FFBAEE5AFE /* YBIBVideoTopBar.m */; }; - 1080C4E4B6FB8B1BD23CB4AE3A2C31C5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 108D25E96A8834F93D0DAD5C26D654C0 /* RxTableViewReactiveArrayDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB06F3844E78B224186730DD60CA0865 /* RxTableViewReactiveArrayDataSource.swift */; }; - 10A4345F4313A493E14D63E1D3898591 /* CGColor+RGB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 635BD03226AC5A8DC2C0FCBBE2A1A271 /* CGColor+RGB.swift */; }; - 10BF11AC5501D529FC0AC9C0EAB13BF9 /* ProgressHUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A87581B2556DBA6F40B051DD8E340A1 /* ProgressHUD.swift */; }; - 10ED26F8959949C6A935D09FA076BDA7 /* YYImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C9A10F0B9F0023A1C363E7C4517DDDBD /* YYImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1105B4A023D2B23A2003AF236E9376E0 /* BaseCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EA54F0BF8E86197CCAC3BD763221B5F /* BaseCompositionLayer.swift */; }; - 114069EBE34C9108E81D3884C4112C08 /* DotLottieAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0406D4904704EB518E43EE52B4F1D1AA /* DotLottieAnimation.swift */; }; - 1140FCB1BDC1B86277347BB1A1325370 /* LottieConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC62F1FD8293CE55DC16776968CD8EFA /* LottieConfiguration.swift */; }; - 11538956E6B6D748323391EB865CBFFE /* UISegmentedControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A86E5B1317FA3F4A9D3EC10B4842235 /* UISegmentedControl+Rx.swift */; }; - 115E6A3F461DC8C1E92EFEE3058E0291 /* YBIBOperateBrowserProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C90D4DF6532EC599263E6EAF62E3B481 /* YBIBOperateBrowserProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1194E62AA3F6F506799B1A43B16942B5 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DC7F488D40CE43018AB21B6B897E2FC /* ConstraintDirectionalInsets.swift */; }; - 11C45A1CC537C7E9935BA352E85D1FED /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D47897E34F522D3CF1F0C22AB710E89 /* NSImage+Compatibility.m */; }; - 11C929E6BFB46F981685446F26DCE605 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = C62129F292FE4AAAD3B0854D292C8412 /* MJRefreshAutoFooter.m */; }; - 11FC9573D3140E8580EE8B826043B4D4 /* YBIBSentinel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B158E503EAACD9D43DEF7BA2586498A /* YBIBSentinel.m */; }; - 126496714AD564062A8C10787CC01B8B /* MJFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = B9E550B72777FDD735DA970FB0A93766 /* MJFoundation.m */; }; - 126D18E956154F413FA6C9945824F505 /* IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52DFC3D116D363CE880108238BB7C1B9 /* IQKeyboardToolbar.swift */; }; - 12747F86266940B02E2B373CFB2EE754 /* OIMSoundElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 65A15F4C96CAED1C108C40708EE87EF4 /* OIMSoundElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 128276DC4BA59E2853877B13A2F4AEC1 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 1296188B598424BFCB3A8F6EAC649A86 /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = A8F92E2A7462A6E9C1EBE6F316F7E10B /* SDAnimatedImage.m */; }; - 12B0F9412DA72E5C518155799154EFCA /* NSObject+YBImageBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CA16EE1A89EBCA3540FF1842B65A1F0 /* NSObject+YBImageBrowser.m */; }; - 12EACF1F31743BA54D16E93D18AA3922 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65CFE3481B5AC8650B206B3A373CA75D /* ImageIO.framework */; }; - 12FD280D22C0437C026AE1532F1C1E9C /* IQKeyboardToolbarManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2E05EB2A16264EE344D5C57B626E0E7 /* IQKeyboardToolbarManager+Toolbar.swift */; }; - 1313426F64905A867293DAA192DDAB28 /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = E620B11AE2F7F2E8AE1F8A1757329947 /* URLEncodedFormEncoder.swift */; }; - 13416A8B642871CADD954FD04797CC67 /* DataExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6F586A5D8FE098F83C58AFB7B88C5B9 /* DataExtension.swift */; }; - 138D67F6083B792390FB49401FC6B96C /* LayerEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54869EC81C5539A8AD92881BFD342D18 /* LayerEffect.swift */; }; - 13B0512A565AFF7DD1AF210965AB35FA /* DDLog+Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACFDC59C4D51BAC7D448516B4133A38B /* DDLog+Combine.swift */; }; - 13DBF1513F653277014B703362F3DFE3 /* Int+DateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE992B84532B2F0319D59578C0E1B8A /* Int+DateComponents.swift */; }; - 13FA81FF80477E468F9F24ED719D367D /* UIView+WebCacheState.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C9DAE1505A940BA7AE87B8FD412527B /* UIView+WebCacheState.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1407DDEFD5573025A5DCF3952A155A14 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EEA47533FC8C4392A59226694906812 /* Filter.swift */; }; - 141E78E1381DBCAF7D310FCC1C8BA54E /* YBImageBrowser+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CB9679AFC8A1A93C637AD8DA4B2A103C /* YBImageBrowser+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1463FCD0976200B9E656F31FC5803F5C /* OIMFaceElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BCC4F82D2FB23B74FAFB19A6D5D21C1 /* OIMFaceElem.m */; }; - 146980AB2006B0CD80481D0F8B4E254C /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C4A299CFB1CC50C15D414460381F776 /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 146D792687FCC9B4459731BFB80EF030 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E04FBA11E10D9D33996D230B6C10B978 /* CoreFoundation.framework */; }; - 14943D0EE97A4966510A86F5C3FC66A5 /* MJExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F40F3FE6E6E74FE180EC6601023DBA74 /* MJExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14A37558E0138C9C3201C28578DA6EED /* CocoaLumberjack.h in Headers */ = {isa = PBXBuildFile; fileRef = E70DEF2275BA1DE435D81CA32E5E7FB6 /* CocoaLumberjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 14E7FA491D8E0ADD6C6E74B1772E73CB /* ViewEpoxyModeled.swift in Sources */ = {isa = PBXBuildFile; fileRef = F559BB90CE3167F1DC71176358384C83 /* ViewEpoxyModeled.swift */; }; - 1509D9892B9A6D6BE7DE77053F26DDBA /* OIMGroupApplicationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 560ABA646A2022BD1E5E93D0A9E39B26 /* OIMGroupApplicationInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 150AE9D9823A639C27DC66D0421797FD /* UIView+WebCacheState.m in Sources */ = {isa = PBXBuildFile; fileRef = 51F6B5ECB20B05B4A5117043241B8C90 /* UIView+WebCacheState.m */; }; - 150C4577BF48F57FB9C9117625A2C538 /* CombinedShapeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BD6B4F346C99BD856693783A8C59593 /* CombinedShapeAnimation.swift */; }; - 154230695B4E3D61B8D2BD02DAA2CE91 /* IQKeyboardManager+Appearance_Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE98B38843AE0C4E89B36CF77B5387B /* IQKeyboardManager+Appearance_Deprecated.swift */; }; - 15B86EDE2F58A6BFDC8A2FA898F256D4 /* UIColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0BB7AB446A12933B77D4C0AE7B8AA8 /* UIColorExtension.swift */; }; - 16193C8B78D3C682E0C526D1DB17AD35 /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50D8313D8270CA25B860F255BE28A21D /* TakeLast.swift */; }; - 1625D017B0A759A680FCB0C5C797A1A3 /* SGPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = ABAA6161220738159EA6407CD6D75B1C /* SGPermission.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16746E111A8A707073043335AEC0A654 /* SGQRCode-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 450ACC10D4C6E5EF773D09E25222F0C0 /* SGQRCode-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16CC427093CE09F879561F11238C085A /* OpenIMSDK-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 20659E5169F93017F52987EB322E311C /* OpenIMSDK-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 16CF11A7B684AFF2F7B389CF10EF0EDD /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 850D41C7AEEAD377501D1391EFF8CD50 /* SDWebImageManager.m */; }; - 174953FEBCEE7B162A5EDB2290126D12 /* ImmutableMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5001850E080A2D52833E20CF7C699547 /* ImmutableMappable.swift */; }; - 178C56922BA738F67A565CA8681F0F05 /* OIMFriendApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 039025967C251ADD69ACE1553B51DDF0 /* OIMFriendApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 179439396BE32AAC0EBD8AF986573053 /* DDAssertMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E04BB4D8359BD5A95AAD8B56BFE57B6 /* DDAssertMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17950D311BAF4B98B5BDB1D63C25457D /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA0874C875EC9052754A0E09B82B4E6 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17ABD1A935188470A532AF5630EAE19A /* CGImage+WebP.h in Headers */ = {isa = PBXBuildFile; fileRef = D477BCCAE115C780D1F45A92E5F3BE15 /* CGImage+WebP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17BDA99227A012CF9CEA639D56A748A2 /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2AAA811CAAF000CD5110DE8E1FF8B85 /* RxPickerViewAdapter.swift */; }; - 17D774DAF5C4C286CCED8F85F4B36271 /* CodableTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DDD42375DF8D0404926440BA144451 /* CodableTransform.swift */; }; - 1809335C833BF5E3FE86CB05C7075723 /* SizeValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFE805D984AAEF8498138BA0166F120 /* SizeValueProvider.swift */; }; - 18280EBD305C8AA2B854584F685C75F7 /* UITabBarController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B4B93F368A61449309541689291E7CE /* UITabBarController+Rx.swift */; }; - 186A2DC5B476A02DCCFD4808E3325486 /* ColorValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0242CA8AEDD877040E56C254660FC43 /* ColorValueProvider.swift */; }; - 186B573F1BEB8A23419A02814A7741DB /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = C6F4420A9FB2F691DC1A5C98FBAD4EB4 /* MJRefreshFooter.m */; }; - 18B278264A1FE87940BBC5A97028513D /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76F771CC8FF3EE94CAD251B016704D2B /* Rx.swift */; }; - 18F2FD69EBCB5B9F1941D0C1FABA4684 /* VideoEditorMusicAnimationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8212076E19A3552BC329E458689B1B1 /* VideoEditorMusicAnimationView.swift */; }; - 19164B08BA217FB9A3A7F6E1AFF24AEC /* EffectValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48F6E0EA41E40ECC2E2F6DD4D0B38CB1 /* EffectValue.swift */; }; - 192D402166F9E726D8BFFDAB9F7A1686 /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = C71982C9D407CCE05012DF8D73A62516 /* Just.swift */; }; - 19449EF5B493DC41104B6ED4B6DBB907 /* IQTextView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E3D6A062A7548B784F291EECB08E8550 /* IQTextView-dummy.m */; }; - 19455C60A2177C13A8725D642AC1D990 /* CompatibleAnimationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFEAA4C469AAC85BB62868EA0E706D5F /* CompatibleAnimationView.swift */; }; - 194AF5868782BB0839C3D4A3C1122B48 /* Core+UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCA5382951AE75A98792835CE4E99624 /* Core+UIView.swift */; }; - 19C0FD2FFAF58F668A3FDC8386699728 /* StarNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57760EBDF3FB84060CA612EBDDE56C1C /* StarNode.swift */; }; - 19DCC268C6178B9F89DD7ADDFDB5F5FA /* PhotoPreviewSelectedViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA80AAE9A8F4745194A22138D50BAC46 /* PhotoPreviewSelectedViewCell.swift */; }; - 19E9F9236F77468892AE69B7F5ED27E8 /* DateRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F5DBC544730FD8223729C38F6CB1F5B /* DateRepresentable.swift */; }; - 19ECC094BE1E1C01F0BEFEEDC266A38E /* IQKeyboardToolbarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66FE82E0510BC72FAD7C76AD60B9E90D /* IQKeyboardToolbarManager.swift */; }; - 1A10909BFF2392D9F946A6487405E164 /* RxTabBarDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C88A87AA6AF553A2EB67FF48CC974717 /* RxTabBarDelegateProxy.swift */; }; - 1A47F6B6428CC393D000C663CFBFF3F5 /* UIBarButtonItem+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08B73798103120C7A3AF0D936520F1C0 /* UIBarButtonItem+Rx.swift */; }; - 1A4BC84B0C50F51F8FFE8A37227EE46B /* RxCollectionViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E5634D8FC150EAF451F26D4D2ACDD62 /* RxCollectionViewDelegateProxy.swift */; }; - 1A7B9ED5CA59C67DD04CAC926E695425 /* cost_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 41C0F4847E0F170E3F59D0BC7F2811ED /* cost_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A7E28AA5B547FD2C03AB849E47A73CF /* not+RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = B256BABEEDB82B55BD4DFCE193D4745E /* not+RxCocoa.swift */; }; - 1A8C915663836B11DC3524DAAE284FF7 /* OIMVideoElem.h in Headers */ = {isa = PBXBuildFile; fileRef = BD860D73C4D35821C2B060BD58768183 /* OIMVideoElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A9393A1B5F70A3BFCB9967DFFA7980E /* PassThroughOutputNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2377187B31347A650A1587E782382FA /* PassThroughOutputNode.swift */; }; - 1A98401B81923265F3F2F1533C629044 /* PrimitiveSequence+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1455F488C0E919D87D16AC66AD04C9B /* PrimitiveSequence+Concurrency.swift */; }; - 1AD63F875F45797E7C1D46E7C898CFE9 /* AssetManager+VideoURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A2B506E2416B5C91B799DFE0B69F278 /* AssetManager+VideoURL.swift */; }; - 1AEB50393C88A3A8E94E1C7F17881747 /* LayerModel+makeAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 745E49067846460E0A71AE45B322158C /* LayerModel+makeAnimationLayer.swift */; }; - 1AEBA7397BE356EB62FBA07D451124BD /* YBIBImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = 797D2CF8D70578E3BCF39EF8F5D828CE /* YBIBImageData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1B54B5D6BBE60B992AD6E0B0C38B54D8 /* DDFileLogger+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FC105F4B4286E65A9A821818A51A5FB /* DDFileLogger+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1B5B440676B88E51CC477BE0C3EB7BD4 /* YBIBDataMediator.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F040177292504B70D8F778A5E3CD95B /* YBIBDataMediator.m */; }; - 1B6904F021949ED4F17DE3BFFE7C55E2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 1B87A741E524BA00E3CFD3A38E24F71A /* OIMUpdateFriendsReq.m in Sources */ = {isa = PBXBuildFile; fileRef = BB4CCEF4612B6E93B18A7AB979A7B8E6 /* OIMUpdateFriendsReq.m */; }; - 1BA63FA9A4AB11699E3B8636B3F7A504 /* huffman_encode_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B830DCD4FD06C452454EBFFF301A61 /* huffman_encode_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1BA75F56E78A454136945A7C6F67BEE4 /* StrokeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DABBD081B5C4DA063F4DB121147E586 /* StrokeAnimation.swift */; }; - 1BAC69260156BD0B7C09BAE5D070F0D0 /* YBIBDataMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = 51DC42C2419121C34A1A37FAEF5CADCD /* YBIBDataMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BDE2FFB1EFA43AD2D8EADD6BD3D851C /* repeatWithBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22AAC60424375432315859887EDB95E9 /* repeatWithBehavior.swift */; }; - 1BEF0570918130CB9C4E7EE398035F17 /* ColorEffectValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8AC2C8937DC5474F53AD860FC089B9 /* ColorEffectValue.swift */; }; - 1C016469B5AA70C08BDFECAA27EAB051 /* OIMLocationElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B31BD1C43D0EDD718C40AF38280324 /* OIMLocationElem.m */; }; - 1C2F9A89151532ECE06B20206EEACCE5 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager in Resources */ = {isa = PBXBuildFile; fileRef = 80A40EDA3AF0499BDBCFF09467BB49AD /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */; }; - 1C4341D3342F37B1C47EE7F2B75E2CB8 /* SharedSequence+Operators+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E76BF6D7E4423019EBAB88941DBFA91 /* SharedSequence+Operators+arity.swift */; }; - 1C4D430B867251402232CD36BA776B17 /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716510DE893831EBA6423B0D86C62DDB /* ImageView+Kingfisher.swift */; }; - 1C5A7BFB8D2A5906F22C3F37C11CC18C /* CompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B702621E70E249E80F3885815B6D43E0 /* CompositionLayer.swift */; }; - 1C5DCB1C09DFE05047C4F73EA34A065D /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 16CB11B23A5ACD2B188960D308AFB6DF /* cpu.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 1C830DDC3D4ED10535E1D569D66A6CEC /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22391A5817E334075345521FE1174BED /* ConnectableObservableType.swift */; }; - 1CBC86CE3D92034C0EFCB7E717132C29 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40AA1A10068FA06843F9B866D1548021 /* Queue.swift */; }; - 1CD64DB96914999F5DB0A8E5156C82EB /* UIView+IQKeyboardExtensionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABDDA2F98E6FF243C9EAAF78BE220BA3 /* UIView+IQKeyboardExtensionDeprecated.swift */; }; - 1CFA0634F7CCBDDC1985E4C56876EA3C /* Asset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80FC60B5A2EE8A0941AF06CB71BD4601 /* Asset.swift */; }; - 1CFAEF271291CF9E61AB9A05C13CE091 /* ObservableType+Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B95BC3382D56B69F02F01E003F03796 /* ObservableType+Weak.swift */; }; - 1D1144A29931237DA172952B098FA026 /* huffman_encode_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 6C64131280A69B51A01F471E184A6303 /* huffman_encode_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 1D147502E163B4AA9D2C66CB26A2C14F /* StrokeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E3C9772593EC36053DCE3AD21CDA16D /* StrokeNode.swift */; }; - 1D2CB89B3DBBC0EBB613F753F58FAD32 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC74A3DD06D0A473754208FC64517B43 /* Date.swift */; }; - 1D2D66E3331F77A55BB82C3920F7C40C /* OIMManager+Group.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E5EAE84819EF1BA77DF74FCED0F3399 /* OIMManager+Group.m */; }; - 1D74158DCC81C4E83C0A8945EDE69C86 /* SizeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 203E00991678D02363AB9B6B65D253A5 /* SizeExtensions.swift */; }; - 1DAD16111DCF0BFEDDF9BD4D09008454 /* DotLottieManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10BDD4803F2D3B0D30C89BAB4D03D216 /* DotLottieManifest.swift */; }; - 1DB413B01CC591F2EADBBE0923F02E8E /* mapTo+RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2131626EC27604913E004ACB3CBC060A /* mapTo+RxCocoa.swift */; }; - 1DCE04A9FCE27FC61473B81D02AEAC8E /* IQBarButtonItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB38A21B400317176AA9BC8FFBF61A5E /* IQBarButtonItemConfiguration.swift */; }; - 1DE5A65531D35FBB1E317481CD316342 /* ImageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E6A17940D1B64025EF4866E44EB716 /* ImageModifier.swift */; }; - 1E38D43C5BCA95E8CC8DF9A5DAE7A4D5 /* UITextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DB8DC9169D71A0D31807029AF82F168 /* UITextView+Rx.swift */; }; - 1E5AAE8872B0EA30EF8795F9ADD121CC /* thread_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A226DD5B5DE35D44F9321FEA69D7502 /* thread_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1EA011B45EC780B434507AFB3D9647ED /* NSObject+MJCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = DA665FB1BA93A17FF0554D6D7B30AD0B /* NSObject+MJCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1ECC5F320AEFB120081358B4FFB7442F /* NSString+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FFE248620888CCBBC57FC0D85239779 /* NSString+MJExtension.m */; }; - 1F14E7B047EF0704D6AEC1C2DCF78B1C /* SDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1C37483F1765480EA3F2E60B78344D /* SDCallbackQueue.m */; }; - 1F2DEB722138E3D7CCC4A02F01414AEC /* OIMUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FE753BC375C0C5909BCC6A256CBBD0C /* OIMUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F39EA6FC15C297E962E3F767D38B951 /* IQTextInputViewNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 080BA283B9623B19CAC631DFF76437E6 /* IQTextInputViewNotification-dummy.m */; }; - 1F78DE9E7ACC9AC18383BDA3886A4320 /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = 164C4FECB95EA7C55B2E7FD4257F2960 /* Range.swift */; }; - 1F843A0B4CC4D94F6DD9D266567AE6DB /* BaseConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3189E630103A74A0218C59894B1E16A8 /* BaseConfiguration.swift */; }; - 1F95E373A37C5625CC6CD68D1F433556 /* PreCompLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F774BD72D02B75021A7214A32F49A43 /* PreCompLayer.swift */; }; - 1F99468BBFBE7CE266CF259EA2A0B50A /* lossless_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 2F1EE42D6061CE2501B5E1A22B55D08D /* lossless_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 1FAC5166DD3165E52DAACE50A194AE9E /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B4EA8A05D522735104DD7E10130C37B /* Producer.swift */; }; - 1FBB47887AF2968FBFB65187522F2BFB /* neon.h in Headers */ = {isa = PBXBuildFile; fileRef = 60468C1CDF1862AB603DFA2962774120 /* neon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1FBC61AD6C848603C1B3AE2B8CE82C0F /* YBIBImageCache+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A35504DC759D1D6D581B34A9591AB9F4 /* YBIBImageCache+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FBE17889C1976DC4022F1202E19E5EC /* OptionalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BE0270AFD495A209831013F68A46EAA /* OptionalType.swift */; }; - 1FE523A57E1F050C9462927D72E6453E /* PhotoEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0718A024C52D04F10056B23069A34F1 /* PhotoEditorViewController.swift */; }; - 2014B01D7621E7DDAA1C4784FF7EF0D3 /* DotLottieCacheProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E8AF1331E01EDB4F004F4129550A574 /* DotLottieCacheProvider.swift */; }; - 202812410FF22B588DF523787B54E176 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 20342C3491090D9F1DB91C5CE745291E /* ItemsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7351CB3EB502D83F5D34EE4B38D7D8 /* ItemsExtension.swift */; }; - 2055774CD703B52DABFB1CC588394A94 /* MJExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C816BC11F808237533A304258E6B9519 /* MJExtension-dummy.m */; }; - 205EB01AED14BB574DD54EAFE26E4786 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 208BA7E9A4055B273B4BA785F0A0E6E5 /* SectionedChangeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = E27470085DEB31191E56C66DFE1A64EF /* SectionedChangeset.swift */; }; - 209449480FF69F2FB4146CDA1765BAAB /* io_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C8B492C658E83648F36B13B1502DD29 /* io_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 20988E7C942B437989E7A7BF1F8E9136 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1C6598101489A7E7111805E5CF77949 /* DispatchQueue+Alamofire.swift */; }; - 20FDBBA13FADC258306290D61E078B30 /* UIView+SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5C78551AE5DF3F869970B180F880896 /* UIView+SwiftUIView.swift */; }; - 210F7EA56537707CB22ED35A96752D3C /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D5D3CD64711395EDE1E0558AA48CB7F /* types.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 213346E0F366A1B688A63C84AC78E925 /* rescaler_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = D712C754D0B3BEFA8D9854077BC94893 /* rescaler_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 215254D820230480A086DCC6E323D256 /* RxDataSources-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4163D447B518D4BC6E0EE0EAC80736EC /* RxDataSources-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21ADD9908F7B0003FCC8E1D221548068 /* MainThreadAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36CF504BACFF929BC4D8BACB9C800E9F /* MainThreadAnimationLayer.swift */; }; - 21B415E684E478369BB5D2C63382C613 /* VideoEditResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8FC5D8D4CAD082AFDF06500203F157F /* VideoEditResult.swift */; }; - 21F6EE314B4240BC580A3DC7A29F23DB /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8E122838BA266BA2FC542DB6D6CA7FC /* SerialDisposable.swift */; }; - 21FF1ECA305411EED75B074549EDCECF /* vp8_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 4DC53E0ABF02CD9BBAB8D62559EA0E36 /* vp8_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 2217E80655E7B80BAAF4306735E008A0 /* lossless_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = DD3998C13E9D092608AC6F455C49F819 /* lossless_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 22516EA77E7120000632C30BD9A03927 /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = D27C029A21462E439909BC6A1460A0D3 /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 225B339BBBB5BADC1BCA9E6E050486C2 /* HXPHPicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E262E45D9D025FC0B1E6F5F63C96BAC /* HXPHPicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2260352B17E9CBFB9A5E5306851A2649 /* DDContextFilterLogFormatter+Deprecated.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EE4B63201F50240A5E467DFB9D59047 /* DDContextFilterLogFormatter+Deprecated.m */; }; - 227638CEE6F92D3BD0F9B0D45B49C833 /* RxTextViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93EB8108EBFD809D4BA7DD0D01AC8F2F /* RxTextViewDelegateProxy.swift */; }; - 22ABB2CB25ECF7224B583221B4C97CBB /* ReducedMotionOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD5E810B692FBB786B2032A23F252AFE /* ReducedMotionOption.swift */; }; - 22EF1D1B405331F794F1D42A447A1E9C /* FromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4E622365146682D7E08A6242B2B73CB /* FromJSON.swift */; }; - 234F0B1EC64D7CDEB732BDA103C452DE /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E975FB8AAE5124E00FDEC64DB28529 /* Deferred.swift */; }; - 23E0E5B329060D9643B8C247723D203F /* PhotoEditResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3DD3163F3F69703D57F0C5EE33BFEE0 /* PhotoEditResult.swift */; }; - 242F4F563272D34C38C98D5D4F9F92F8 /* IQKeyboardNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 17C56352D67E8BCA827335C748E6BF1E /* IQKeyboardNotification-dummy.m */; }; - 243FC08968D968284B21109B4C52F5A1 /* CompoundBezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C2FBB7FA150DD8D8F445CC781BF20D /* CompoundBezierPath.swift */; }; - 244C78EA225D2E2BD955913E5D38DBA5 /* Infallible+CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3D8BAD44D231ABE9E2CF363728BB827 /* Infallible+CombineLatest+arity.swift */; }; - 24637C51989929A62E5E75585544A14D /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE2806152713FE09C2CB6AA76C33BD73 /* IQKeyboardManager+Debug.swift */; }; - 2484ADD920601725235FE16E245C687C /* IQDeepResponderContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADE1736DF811673FB2909732A3F3BF40 /* IQDeepResponderContainerView.swift */; }; - 248FE8D6745BB73161E3D1118BB9CDF8 /* lossless_enc_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = C13189BB9C5B978BC239E0FC3A946821 /* lossless_enc_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 24A4CC474AE353733E5372A03F61BF2B /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 64DA66D7FA4D6D1DFF8EB0A3D5A1B537 /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 24E72CBC4A4DB70615D5F552218E906D /* CoreTextRenderLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4B19EAC26B64E59FF162E36726E6092 /* CoreTextRenderLayer.swift */; }; - 24E963C1D6245F98BAC8A0ACCB7DE987 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = D3DF20CFF93070089A3F83A2130C4121 /* NSBundle+MJRefresh.m */; }; - 24F05AE767C4BA4A3D46405B285C1917 /* LayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3EEB3D929F12DA17005E1F37882A2F8 /* LayerModel.swift */; }; - 24FBD47B712E095533043716EC91A2A6 /* IQKeyboardToolbarManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 963E16D80DDA6E3F39317FBEEF4A019F /* IQKeyboardToolbarManager+Internal.swift */; }; - 250DB522E2B88BC538C5B468436228DC /* SwiftLogLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = B053BB799704A9F6F6384BBAF294DA09 /* SwiftLogLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 254CE2A3C57933C285803C1241806765 /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC3EFE6841863A2FC0E1F280D5E0C18 /* WithLatestFrom.swift */; }; - 2558B9A09FEC5710F7D00DD5E3E053C5 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB0C8AFD4E85D17435F4F56F8794C41 /* Request.swift */; }; - 2567FE276DB76481DEFC7DDFE7D775CC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 25691C42AF5ADC1B7AABB62199030F4E /* URLNavigator-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 457470DF1C51CF053BB4ED593859965A /* URLNavigator-dummy.m */; }; - 2592486071DE6F98A5C55F487F7FA386 /* histogram_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = F91BB611743387130526B221F2AD7EC3 /* histogram_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25CE41F0442E533D2AB0256D4527FFCA /* Binding+Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE5939CE0FDBDC6B3C62814EA03E1F30 /* Binding+Map.swift */; }; - 25DC15011A46811CCD6ED7C3F8C0D96B /* DDAssert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F981F58E1DB9D729CF4481BFD2287F /* DDAssert.swift */; }; - 261EF92C048F313E01114B86B08D0E73 /* YBIBVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F49EC34BA25445FFAFDB75752FD9EFFE /* YBIBVideoCell.m */; }; - 263DC1F3C2EF5F1B9D867061F1E91853 /* SGScanViewConfigure.m in Sources */ = {isa = PBXBuildFile; fileRef = A10D88129CFDA405482F878874F048F1 /* SGScanViewConfigure.m */; }; - 2688DF9C89CE58D50C174F1E1BB89DE4 /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 344CE732EC91350D560B03E4C413A059 /* SwiftUIView.swift */; }; - 268C2C9BBF4967CE0B06DAE477030173 /* Interpolatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF15FC481CCD2B54A0EF2DC21F04F419 /* Interpolatable.swift */; }; - 269A492E07AD9684E6B11AAA03B97264 /* filters_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 7E33D64E680019C177618308CB75EF6A /* filters_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 269D5BD5031AE2E93B3ECD48F9FAFBFA /* YBIBAuxiliaryViewHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D97C1931912760D88F8AEDC0081E77 /* YBIBAuxiliaryViewHandler.m */; }; - 26A74998FF747B99E618103E7902EDC3 /* KeyframeInterpolator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F7A8987B24B2D899CBD7F38349871F /* KeyframeInterpolator.swift */; }; - 2703C0DC58FB460C01ADE8E8D22C9F62 /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4829363F4F1E0B4952D62D858E19E4AD /* SessionDataTask.swift */; }; - 270B3843CF38BFC4CC014912C65372BD /* UIRefreshControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 356B08F72A46EBDA220703321CE1814C /* UIRefreshControl+Rx.swift */; }; - 27485CB5DD472CBEDABEF78CF9DD36E3 /* Date+Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 036352F214EB5A26251C99D81D7BF15C /* Date+Dispatch.swift */; }; - 2776432A35C89643DCFD114EEC2DE838 /* DDDispatchQueueLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D7C53CFA21D0B65B5810275F9B1B2F4 /* DDDispatchQueueLogFormatter.m */; }; - 277E92350B422767A7A8C06B450D05E0 /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 726A570EB3A764BD9182B257D8A9B086 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 279197F2D4222FB813C09D15F93F0051 /* Observable+Alias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79397AC7344C5EAFB7C39EC8AC865589 /* Observable+Alias.swift */; }; - 27A5B531FBB9758A4C8EBD45F7D46B34 /* UIView+RespondersObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E3A4D823011F833B4CE1C1AB3DC381E /* UIView+RespondersObjc.swift */; }; - 280159C811343669BD8CA8A23A24DF75 /* OIMConversationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 75E5014C5A20DE4797B4451A675607F3 /* OIMConversationInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 283D02109109BBD9F05A22C4EBA4E3B5 /* vp8li_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 6BE2132552A633B5B0604562F34FC8D0 /* vp8li_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2849A018772515A2A420A69B13954E8F /* PreviewVideoViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21DB69F87DC93861A4FEB14C6B788C7E /* PreviewVideoViewCell.swift */; }; - 2856121070FEFC1B4D77693641551510 /* YBIBPhotoAlbumManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 98D78C9FF90C7172E103F3D42D122546 /* YBIBPhotoAlbumManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2865DC1A7B133D7BE1C40975DFFA1D9D /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C92449F72A6498CADEADD96E8DC26B9 /* ObservableType+Extensions.swift */; }; - 288CD3416B265CAC1300D7938167AE66 /* MJPropertyKey.h in Headers */ = {isa = PBXBuildFile; fileRef = DC9F85B076220EC545A9E0817FAA7561 /* MJPropertyKey.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 28BA9702905AA2B4C1E9E4878032D4E4 /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = 71DF2431E6CA3D1CAA83A2C349EEFD5D /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 28DDF775177170CEF65E550AD4EF6111 /* OIMSimpleResultInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CF707A0420C20F296F4B5A4D3D2534DD /* OIMSimpleResultInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2962C56DA00F10C519469C70EB1087B3 /* CocoaLumberjack-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C90B489DE950DD12FC8930AC3EAFE6AB /* CocoaLumberjack-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2966C57815E8A7DFC25ED23AFAD66C31 /* BundleImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E29063E89830E3D7872C21835ACA7C8E /* BundleImageProvider.swift */; }; - 296BF59A80969CF54CFCD4908064CF87 /* NetworkActivityPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C66EEFD236908E007E71E3DEB9A2C1 /* NetworkActivityPlugin.swift */; }; - 299BC9F3FD6FDB13F90CAADA0E85E625 /* OIMSimpleRequstInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 27C4EB466DCF1D0C56B87A1492131A17 /* OIMSimpleRequstInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29BBECE17A90C0CE055D94D4C7DC96A1 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F5EC1C754116115B07C3500772FE8C /* Optional.swift */; }; - 29C0DBA2B06EB4A2A273B356AEDD27B5 /* Vector1DEffectValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 489AB4A9B338E825DFFB1745D2B1E16E /* Vector1DEffectValue.swift */; }; - 29C433665FA967606C6CD5B8A265D1B6 /* Moya-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 26C805396EBE9A3676570EE86EDD4E85 /* Moya-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29D4B4F01F898A67E67DCC582FD06AAF /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DC1922990EE3C6470B7E270DD74209C /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A00AD64351718EA40475CCF924B0870 /* EpoxySwiftUIIntrinsicContentSizeInvalidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB4DCA05AF0C1A1C21B89A7468E041BE /* EpoxySwiftUIIntrinsicContentSizeInvalidator.swift */; }; - 2A5D5D23BBA9E041D733CA56472C1F4C /* BezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9469079C705E0ACD65CE0D499E85ADB /* BezierPath.swift */; }; - 2A61C66DF98A7F7FC183B67F5B9F97F8 /* CallbackProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 69F0240DF73AE0C77CD3F808BF400356 /* CallbackProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A8F210A67132914E0613F1C99193F7C /* PhotoPickerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F1950A2EA3EAEE2DB8542A2B3D3F33 /* PhotoPickerViewCell.swift */; }; - 2AA4D8A29372E9703E65E22948131B63 /* ClassReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43CBA87A6062D67B43C728A78CDD889F /* ClassReference.swift */; }; - 2AB34339C98BF370283B2679E890BF9A /* MakeViewProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57CDD5F0D5ADF12E245977A57296A75F /* MakeViewProviding.swift */; }; - 2AD120375AFF9ADE8702C3BFD80BDB5B /* ssim_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B63629946BAA0F141F5000D45DF5B53 /* ssim_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 2AD40AFC4BB803B3EF3C41BDE61118E5 /* YBIBVideoData.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A43AEB8060E50780CE46E8FFB7F94D /* YBIBVideoData.m */; }; - 2B067825708D13E7E455426389397D1A /* UIView+IQKeyboardManagerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6938529B4FFE728CE76E763A02DB60F /* UIView+IQKeyboardManagerExtension.swift */; }; - 2B20067EAA2480AF957719D9D01C2CD7 /* YBIBScreenRotationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = A7E16049507CC03B9090F2AF6AA72E29 /* YBIBScreenRotationHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B2EB369550CE92CEEFCBFD3D32B8A3F /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01F8EA59DEAAA738ECEF7D68FCD45C7E /* ConstraintInsetTarget.swift */; }; - 2B319E44D7ADECC5928D4059D35090FA /* upsampling_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = E64CECF2B277E1740E8F08CA7B8F77A5 /* upsampling_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 2B956A20DE80B42EA2C4D55BE6DBDB67 /* TagListView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D663E2E1139410A15C558A6896C8C7 /* TagListView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2BA2440F9918444C393690BFC7D9212F /* FilepathImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF9D3F780F9307B2A4956B12C94603D9 /* FilepathImageProvider.swift */; }; - 2BAD02719D969EC5C6E65323E04A505F /* RxCocoa-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 309006C332A939D8335F54EDC23F48A6 /* RxCocoa-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2BC30E20EF04FAC4C6C5675473E6B29C /* not.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BB619052F7DA53A970B433F53AAEA9E /* not.swift */; }; - 2BDC9B4412E51F70435144EC2F215184 /* ErasedContentProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477382C0F53729E89AD8720A95AB42A7 /* ErasedContentProviding.swift */; }; - 2C0F8A44FFB8F67FDAB18E7E90950EC1 /* YYImage.m in Sources */ = {isa = PBXBuildFile; fileRef = ADB41122F7EEAC1BC2E8C6BA3079508C /* YYImage.m */; }; - 2C763A73ECF7621B40360E6929ED2A27 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 2CC446772DC028C095278529D924D35D /* ShapeRenderLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5592B24A3177FEA4ABEED9D0B3A6F84B /* ShapeRenderLayer.swift */; }; - 2D105BF9B700D92896BF06F340275B83 /* NotAuthorizedConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97DE3A82457FECCDA36D235A9A527121 /* NotAuthorizedConfiguration.swift */; }; - 2D3ADCFAF670D6C9816369F7ED3B7696 /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FE0AF0A4A942C9B375AB754DEE35103 /* SDImageCacheDefine.m */; }; - 2D3FA71FDBFCF6BDD341426D86C54F82 /* config_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = A9EB2433B6E7A927FB90C619CB9BAF2F /* config_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 2D56C6EFDC9DF036822FA06D50ADE2C1 /* CAAnimation+TimingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 975ECCBDDA389719AEC4E54DB0112147 /* CAAnimation+TimingConfiguration.swift */; }; - 2D58EA07BF9420CB519FB4C5C1C64E54 /* lossless_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 109ACDAA5C60690C3C29F4D995BFF459 /* lossless_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 2D62BA53B0142D84D921DB41ABDC5434 /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 078588641DE48A9F8B942FE651C967F5 /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D8245FE7A22ED672D3DF95E77A96E46 /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5033298D1CA93A7865AE65144ECEDB7 /* UIButton+Kingfisher.swift */; }; - 2DC44A09A6C9D6DC7D1BDA2DFCF99EE3 /* MJRefreshConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F523AE274FF96B23B5AE0188D46239B /* MJRefreshConfig.m */; }; - 2DD1C0AC76A3D56A0B95C39413C9C5A7 /* vp8_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 247A39E873C37C701BDF648B2D50C5EC /* vp8_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2DE638E2260CE1DB06F76ECA93C24E0E /* dec_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 39DCD7EF97C0B500D13C50F86E116058 /* dec_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 2DEE9D67E280C52847E66A1B4431FED7 /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A4FC0DEB2145AEA826609AB69FE096B /* Skip.swift */; }; - 2E13E22E2981ABD137854CB0BF3D8F01 /* Keyframes+combined.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41E7C809EA33C0393A6AE27000AB14AA /* Keyframes+combined.swift */; }; - 2E2DC0C6F0E4A994820F917CC88B1168 /* Core+Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00666232685340897FBF612CDC76B348 /* Core+Dictionary.swift */; }; - 2E9C5A7894CD69E92C70E00B0510C1A8 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 1227C89CE60E2237AF4BD0EB74800DFD /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2EA3AFEE09D681E491F24C9B1A85FF44 /* ObservableConvertibleType+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3898027613E6C50E0078414D3DF1BE7 /* ObservableConvertibleType+Signal.swift */; }; - 2EABAE5AB809F505775B13EF046431F1 /* SelectBoxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F45B5F359E982E067E2109249A8B0784 /* SelectBoxView.swift */; }; - 2EB965F2E798586AE033A73467469967 /* StrokeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDB98AB321A5B30B05F0F320384699D3 /* StrokeRenderer.swift */; }; - 2F1757EAD479C3E8C7C75561BADB0F1A /* LottieLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD253B873F2B67521833408BB82D843B /* LottieLogger.swift */; }; - 2F594E0CEF6E7B8BDDA677C93ADE5970 /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96763E0F72C4F15536986714E73823B /* Entry+ZIP64.swift */; }; - 2F6774015407B5B4841C9A34BC009900 /* PathElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33DAC44C2ADAB17A1E18E59C3363BA98 /* PathElement.swift */; }; - 2FDA0F9A0DBB98A99500F2E0B5B7753C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 300106D253D6B0A83D0FA41EDA408B77 /* PhotoPreviewVideoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25A588051320603C531C4D4D035FD277 /* PhotoPreviewVideoView.swift */; }; - 301ED3D73C23F6A80BA38E30E05BAE44 /* bit_reader_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 45AD7FAD1E5345477CDADB368908F59E /* bit_reader_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 3046A808080A7F90F3D3629B3CDCDA32 /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8DAD8511E44DA440DA3B2E026B7BB11 /* Take.swift */; }; - 308AC672301C6E7DB6824993D255E0DA /* OIMMergeElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 58D937DEC9A6DADC4020FC73AD7DB7DD /* OIMMergeElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30B4C66BD3BF1A31240A34D540BB1362 /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AFF3A2C20A0878A9F0BD547D0C6006C /* GroupBy.swift */; }; - 30BE83ACB80227A5F67D6A1347B1293A /* YBIBIconManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EE250BA3582E9617496529A94B3D2AD0 /* YBIBIconManager.m */; }; - 30D6F928FC08B13B5BFEEB154A2089C1 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 655F16E86C5BE41F3D3568111B89F78B /* IQKeyboardManager.swift */; }; - 30F32C55A2BDA22D805A0B0C0AEBB50F /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = A70FED667384419D528193F57E48A8F1 /* Mapper.swift */; }; - 31000B277CE79D21BA8C1ABA26659D9C /* frame_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = CC24CDDC3C41D4E90FB7A47FD047D37A /* frame_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 3104E8F987B0D3FDB1106E49ED803A03 /* IQKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A610F8E5A523D74EB02337C66D2442C /* IQKeyboardNotification.swift */; }; - 311B7A37EF82A4625087384B10A169D2 /* RxRelay-RxRelay_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = 0B06FE4EB869890001614655A886414E /* RxRelay-RxRelay_Privacy */; }; - 314194E9E0C7A9EDAF93EA83122B3C1C /* SGQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = B09F2B014F2F335A6DD1960BA5E604AF /* SGQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 31477C3CCE2D60FF4F7BC2C8013669D7 /* Keyframes+timeRemapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8DEBF09645160014D2988AC5BC499ED /* Keyframes+timeRemapping.swift */; }; - 3164BCCBA9C6BDA00D4E46E1DA4AD5ED /* PhotoAsset+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAD52A080AAEE8A81783F36FB0CFFCE0 /* PhotoAsset+Codable.swift */; }; - 31B55ABBC6F62FCE46A58D54F2298062 /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50577F76F9EACE83C1F8DB7EEEED065B /* SubscribeOn.swift */; }; - 31C92344565509BFA8F64CCAF193C78F /* alpha_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = E76CF312E733637C8775BF05416542E0 /* alpha_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 31FB1355B0B598BCE30B2FF61A6B3792 /* CompositionLayersInitializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD03CCC56A646093FE8F14113693E9AE /* CompositionLayersInitializer.swift */; }; - 3206FC7A03AAE9D7995E1C20BAC2A741 /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = CEB0F03F7DE9B75763FEE50F19F9CFE7 /* dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 321F87DA34863DC5C977323BAEDB2B55 /* NSObject+MJCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = B77B6CE440BB9382708B4A69C5FD7B41 /* NSObject+MJCoding.m */; }; - 325514A9E0AC13E73854C6257EE434A6 /* RxSwiftExt-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 558D712381B568AD9457624A9865B29B /* RxSwiftExt-dummy.m */; }; - 325CA20B9271F3E008234E1518B79061 /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CFC2CA99DCB07C318665A8C26096B21E /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3261AA0480C168A6529576CDA9642ABE /* FloatingPointType+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC30276B8929B72D79A2C9660B6AAD1 /* FloatingPointType+IdentifiableType.swift */; }; + 02661A0934BC99375198D41EA84CDD7D /* YBIBImageCell+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 765D3D4E7343A74C9DAAC6872CCA30D6 /* YBIBImageCell+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02683E28CDD2177B4C9357DE2703DDEA /* ControlEvent+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8360D5277A3EBD251BE1D7B8B657CBB2 /* ControlEvent+Driver.swift */; }; + 02B594763EB091EDFBEBB557DC9389E2 /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 467D1F0F2F8DC4407D4DE1A116DA6822 /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02C66795522176B28B835F653FC4A868 /* vp8l_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 7197893149C4441D96B6DD968118BD8C /* vp8l_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 02D2DB67E038F3DAD4147733C3DAC7FC /* DDASLLogCapture.h in Headers */ = {isa = PBXBuildFile; fileRef = 289FCFE3D6DDD65B8122E6130BA5048A /* DDASLLogCapture.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 02E3116300863BD1C354A8D903D7565B /* OIMMessageInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 65A438944C929D5F4B8B213A41EE08D7 /* OIMMessageInfo.m */; }; + 02ED202445E582ACB19CAAEFAC809CA3 /* PhotoManager+Download.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FA74D2870A019BA4740B7F676D3BE43 /* PhotoManager+Download.swift */; }; + 02EF3A9D8DDA3246BD301B1102089A2A /* Core+PHAssetCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64FB7527955C366D9B03609179CA6CD /* Core+PHAssetCollection.swift */; }; + 032A08256DCE07E9C62F690AA69B4D27 /* UI+SectionedViewType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 581BE4EB6C70F24C0FEE8559206D377C /* UI+SectionedViewType.swift */; }; + 03ABABC12DB32941CACA6E84B73A6E4A /* String+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F69A46DACB8CF34C53C60CC2D027E792 /* String+IdentifiableType.swift */; }; + 03C5BCAD51533102DFD2357DBE9A9A1C /* cost_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = E2604177A3E85192F036556469BE54E5 /* cost_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 03C5C53DBB1C0342175A24247C8718FB /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = 1410AE1CD716A6B76D8C34B2C0718A1E /* SDWebImageError.m */; }; + 03DF4BF1D027604EBA81A2B71EFB9080 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2C997ED187FDEF21DB00D42F13F8ECC /* QuartzCore.framework */; }; + 03E4969A888B2C0C264DE71ADAB66527 /* token_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = A00EA2624DD142E40DE0ADF47D2A0AB3 /* token_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 0416889045464020D660A5621EB34E34 /* AssetManager+AVAssetExportSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9927B03C2D0F7E7F9022B6EFF4C646 /* AssetManager+AVAssetExportSession.swift */; }; + 042116C407630C22F93E1349008E29F8 /* OIMMergeElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 0AA728D87B7F91C945463B669D4EAE5C /* OIMMergeElem.m */; }; + 046C8CF4F5BC1F8F7AEB535E1FB5CFF9 /* TADotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 38D2052BC73AF3D0CEB469FDC3D6C867 /* TADotView.m */; }; + 047B4D6CD41F000AA47649010F82993F /* PreviewVideoControlViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE3AC6EFED534E56B45FDD982333FDED /* PreviewVideoControlViewCell.swift */; }; + 047B5E7719C01E0B8F74EFF450844D54 /* MoyaProvider+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 154A80EEAD6466B904FDDB7938F4AB13 /* MoyaProvider+Internal.swift */; }; + 04B759CD5C2C5F25319F9C5E8C2482F6 /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FA9E6EBAB2A16F4CB0E52505E665B07 /* Create.swift */; }; + 04BE13B7BE601D68D258C5C2141CE32D /* VisibilityAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 173E5A5AC9E0556461707258329978E9 /* VisibilityAnimation.swift */; }; + 04D2FBEDB09B8FC903912AC7993FF237 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFA273262C05031D86CC3431CFFA95B7 /* CoreGraphics.framework */; }; + 04EB3FD7471864461899D550CEE10E67 /* SGTorch.h in Headers */ = {isa = PBXBuildFile; fileRef = 240416C6EF8122892481AB95ECC4CDC3 /* SGTorch.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 04FBCBF56FCF4C5D0720AC79C655568C /* EditorCropConfirmView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C112C980D7117A563F32576ED0A5757 /* EditorCropConfirmView.swift */; }; + 05258BE5ECB12221959C3063D7FC2D65 /* ShapeLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 614C8C7093D354C0AC700DB212837602 /* ShapeLayerModel.swift */; }; + 052A668537A68ED7885540E5C57DBFED /* DateComponents+Extras.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7C46C3987E417EC909753A8454CF13B /* DateComponents+Extras.swift */; }; + 053D5ECAC6AB411239EADAC1C5F02451 /* CompatibilityTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0488FD76DB5F611BF73447B6E0CF0E /* CompatibilityTracker.swift */; }; + 053E17D6D68FEA74FD5AE22B6802A997 /* SetContentProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35E53EB427E531962F3F3AAD0D6BE4FD /* SetContentProviding.swift */; }; + 054A91521A2745391CE2146B6F155213 /* ItemPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DFB101CA626227DCFB08754A265952E /* ItemPath.swift */; }; + 0560CF0FAED380A38E9AC7B99E4DAA91 /* SGPermissionCamera.h in Headers */ = {isa = PBXBuildFile; fileRef = 254F53AF9EDB6FBC8B5E1899B6E3CFB4 /* SGPermissionCamera.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05900739BCE69610C92CB0C95F876B91 /* AnimatedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8EAC22AF845ED2317153E3913ACB6B1 /* AnimatedControl.swift */; }; + 05A4658C91684151AF00A23640687114 /* EpoxyableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FB94AE8C5C0B522D4E322D48D4429C0 /* EpoxyableView.swift */; }; + 05B425A1503F1F39BC47560E422BA861 /* EpoxyModelArrayBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C6A878365FAE3831D101B7448192821 /* EpoxyModelArrayBuilder.swift */; }; + 05C2F1443184466A943591154955D0D1 /* SendMessageCallbackProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 397F90741022772F19158E4EB60AC6C5 /* SendMessageCallbackProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05E2B7C1DB7528A0BBEA1521BE0DBAF1 /* MASViewAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 36DB87A7158E945BAE661177931BBB5B /* MASViewAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 05E73561BC60D31AC165FAE1231C6478 /* PhotosUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73FB8216CF2F66343E68F8498EADB79F /* PhotosUI.framework */; }; + 05F4664FC4EF89925161A064AA6481BB /* IQKeyboardManager+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 661B11CB82859F4F63BB986EEA203D75 /* IQKeyboardManager+Position.swift */; }; + 061133BB6337EE5A3410B5128CFC2CE4 /* GradientAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CFB128BAD33D109C98CF3A44600DE0B /* GradientAnimations.swift */; }; + 06365D4673388FDCBC959A28CAA66A2C /* KingfisherWebP-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B300794F61F87BC9AE775592D972BEE3 /* KingfisherWebP-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 064D909CD827405E8DCC309DB1B7775A /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B116CF6C24DE8991292084F188FE48C /* ConstraintLayoutSupportDSL.swift */; }; + 0689573C4CB915F596ACA7E8D0FA2FA2 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1565C58CB6645EE5908226C8FA71D0F8 /* RecursiveLock.swift */; }; + 0698F5A9D63CA4D0197FA0E1AC614229 /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D623539744C92AC2DF81C3ABEF834DA /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 06B7908CB9299B647356E5A19711B03C /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2953C440B57675D5159D5D8B8AA7E00 /* Never.swift */; }; + 07052A43F310EE6CDC0302D69EA29A28 /* filters_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = A2A3A2F1F37FF6F5C217BD219BA3DCFA /* filters_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 0742024C403D33DAE1A61F92BBFB5E77 /* Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BDC74945EC8BC04AD74B2B1BE2EB72B /* Shape.swift */; }; + 074387D1012BC0F5C90B358F27A1331F /* RequestCompression.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2DA3850B293BF553D6E776C8DE0A579 /* RequestCompression.swift */; }; + 0760006FCC7B25877D2946A874A40FCF /* huffman_encode_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8493E3C56E90747096AE38907297A71A /* huffman_encode_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0763E96624CE87A93B0FEAE0087698C2 /* lossless_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 07D0C4E9495B63B74FEB580EE16DBEC2 /* lossless_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 0769FBA2E0CC84A1B08F7B9F716361F9 /* lossless_enc_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 57C8B09E9B907A910FA2CA113D4EE94C /* lossless_enc_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 07F13C3B7C638A4698BC8027BE97F41A /* InvertedMatteLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4EB46D249CB60D0D7A24DFBCDEC31B7 /* InvertedMatteLayer.swift */; }; + 080FBC62B74BF059220234CB58B07DF7 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18E56EA95B0B63455E9FD121268B2EAB /* Image.swift */; }; + 08245D4B470F47E0B48E2FAF0AC143A3 /* MarqueeLabel-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CA7328C77B8873228D8F9F083DD76E06 /* MarqueeLabel-dummy.m */; }; + 083568CB5595DD405BCF2728104FB06F /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1840F6778BA7A0E6406875B5666EA43 /* Window.swift */; }; + 083B0B494C5F6B69924BB36E3850D23E /* RequestTaskMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41ADAA54FC8D80364D38BC19F8E41595 /* RequestTaskMap.swift */; }; + 084C46802D14C32B995FE54FB53ACD0D /* Core+UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 797F1309BF0507E755025835173DA3E3 /* Core+UIImage.swift */; }; + 084E92CB08662FC57F439221B88153F5 /* _RXObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = E66D165B0BE2563D5DADFEB252DF1608 /* _RXObjCRuntime.m */; }; + 08719ABCE689ED74FE7486B1E49DAA6C /* MJRefreshBackStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 72CE3573CD388705660B27A2AF26D4C5 /* MJRefreshBackStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0873B6769DCEF912824DEFEC89E814B5 /* PhotoManager+Language.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47B17333D0907CCF5AF2E8678FD6D83A /* PhotoManager+Language.swift */; }; + 08805C91EE5E8F3B036C8A2944A1FEC0 /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C88283412781FE32730568EB4E8A4BF /* Map.swift */; }; + 08808820A664FF8A05D05673DFC2F0D9 /* Defaults+StringToBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 504C9200A2BCDBCE5D1038BE5C36DC92 /* Defaults+StringToBool.swift */; }; + 08CA4F3040AC07A6F6E25FBF13A06EAD /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 147C5981170C19FD63555EC085839A12 /* SynchronizedUnsubscribeType.swift */; }; + 08CEC0498D8A036E9B1C73E75EA97DA7 /* Archive+WritingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98FE132ACD16AAAFCB4C2207A360977B /* Archive+WritingDeprecated.swift */; }; + 08D760F7FD56D081A8EC93E79E2AF58C /* Date+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2994D8B96A2BDBA3F7FDC7E3829339CC /* Date+Compare.swift */; }; + 090DA6F59EF2FFD1D4CCF09575EB78EF /* ProgressImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 906D0A72EE028674565F0303DE1D205A /* ProgressImageView.swift */; }; + 091C8409581AE1022225E05E5416E01E /* OIMUpdateFriendsReq.h in Headers */ = {isa = PBXBuildFile; fileRef = E6D908919FE42CF57972EE6C0A340195 /* OIMUpdateFriendsReq.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 095210E5E9EA5A07D9E27224A6306B39 /* RxPickerViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C19B02A149A3CE437F509ED0B3F6D6 /* RxPickerViewDelegateProxy.swift */; }; + 0975A08237E7A3B1A89703DF4F95D2CE /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBDE0A3AD89058345ADDE79961120897 /* NSTextStorage+Rx.swift */; }; + 09896F9A54FE4E986FC9D2E62865266E /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 601E4E3E77557AF9F95EFC7AA4B4CB27 /* PublishSubject.swift */; }; + 09B1E7904CF237490E6EA35DAB2AFD76 /* Marker.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB7E0915414C93967B126EDE0A3EAE9C /* Marker.swift */; }; + 09D303C994021652DF841C463DBD1DC5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 09E1F569A93FAD4B9149E30B9301F44A /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAD5FA39926E92F28F3AB831E3E144F6 /* ConstraintPriority.swift */; }; + 0A233373E480EC041044A3D3308E7203 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 719C9CE13C261293D1AE894B5DA81EB7 /* Throttle.swift */; }; + 0A274738A00EB1D66898D470DDBFD136 /* upsampling.c in Sources */ = {isa = PBXBuildFile; fileRef = 9AD40EA1CF3BDED2A363F76D9B6911F2 /* upsampling.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 0A2B07F68FFDEFF49FA6F165DF5B4123 /* Infallible+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0796F5670CD11B847772FE42520CD128 /* Infallible+Debug.swift */; }; + 0A3AA3796404AE5372CD8BF82DB292CA /* SGQRCodeLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 8095762029B20322EA90B44A9EC7A0B2 /* SGQRCodeLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0A543346E663B7BA3CC071AA92390EB4 /* TADotView.h in Headers */ = {isa = PBXBuildFile; fileRef = FA45A4A7B7866A3D8115C051623E3CF7 /* TADotView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0A6AAD2D2BA4C7238396D11707EAEA18 /* Calendars.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7E778E7BD5CE4AAFAD2713C620AF5E0 /* Calendars.swift */; }; + 0A8D9AC2B8F9313FA1E0766D228E2633 /* YBIBDefaultWebImageMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E215B4152D0A6DA7FBDD58BF58BA1A2 /* YBIBDefaultWebImageMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AB7466CAD9AFA68F7D623D26216DD29 /* PolygonNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EC8F3147D548524F2105F1B4D734059 /* PolygonNode.swift */; }; + 0ACE791308083423E3C7527EF3A9D5F8 /* unwrap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E321387479547D50CFE05D0B62300A0 /* unwrap.swift */; }; + 0AD12222CC550A22E04D0C4CD300EEAA /* AssetManager+ImageData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92825D18FFC3CBC0A7BD59C44FACD099 /* AssetManager+ImageData.swift */; }; + 0AF16F084FDB6E84677C4692CD931EE6 /* TAAbstractDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = F55A04BD28A92256172FFBE62A100A7B /* TAAbstractDotView.m */; }; + 0B0A3A1044D081A95821B26BF0C69B68 /* FramePubRec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57AFF0686BCCD3B8F8E64BF3694786B1 /* FramePubRec.swift */; }; + 0B6EDB15A5AFF1C293C87685F2AFDED4 /* HexColorTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = E09E6912A84AAB34450313597D8759AE /* HexColorTransform.swift */; }; + 0BA592B0168441965B0358B168955F32 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = C945AE6B7986CFDFCD103CCDC547424A /* Zip.swift */; }; + 0BC1D7B347B7BBFD5D95BBDA306E859A /* ImageAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4876B235EFC3F79E4FC7B2FAF3A32B1 /* ImageAsset.swift */; }; + 0BCB47E9D038A812EEBA83A8B9E5E7E8 /* PhotoEditorDrawView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78663799850368AB5C48ED1F8C841B69 /* PhotoEditorDrawView.swift */; }; + 0BD03DDEEB3CBDB7C2D899140420AB5D /* YBIBVideoCell+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8949E81B22A5BA6D918960149D5B3E4C /* YBIBVideoCell+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BD1E52C6A20A1E2F9B6044C2CF41DAC /* SDCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = B0AB04C5B7E187EB649C48990318B217 /* SDCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0BFC16EDC3C5B27C356AE6874D501A4F /* GradientValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 969C95064469988CF9DD2C0988D5721B /* GradientValueProvider.swift */; }; + 0C1FEB6DDA1E3DCA294E91970EF70979 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE548559FF88988E65F345D73AA762B0 /* Error.swift */; }; + 0C35E7376EC7CB317E82802F199A52C8 /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26D99830BD02D5E12946A9993FD9B433 /* Completable.swift */; }; + 0C5A1A53C0ED5FCC9083DF46369A0345 /* IQKeyboardToolbar-IQKeyboardToolbar in Resources */ = {isa = PBXBuildFile; fileRef = A16FD016E18EACCF6B23F219F2E236FE /* IQKeyboardToolbar-IQKeyboardToolbar */; }; + 0C9333022A04758AE828D9F279411DBD /* RxTableViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9427F04B99D87CA5595F70B09E854EDC /* RxTableViewSectionedReloadDataSource.swift */; }; + 0C9FA288554B0A0C3CDAAC8DA720B362 /* PrimitiveSequence+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F3BA19563A1CD125A820FAECF01DAD1 /* PrimitiveSequence+Zip+arity.swift */; }; + 0CA7A132ABE7018DE9295456732F38BB /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91F40D000DF542C6D6257B1B433BAA8B /* ConstraintAttributes.swift */; }; + 0CC2D56EACB32070DB435FD288A1CD4E /* DidEndDisplayingProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = D031895E50BDFD816B263068206932EA /* DidEndDisplayingProviding.swift */; }; + 0CEC3ACCB21A1514075A65CA04ED003D /* CALayer+setupLayerHierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5AFA1348A84302F6F2CBA39EB6F5AB7 /* CALayer+setupLayerHierarchy.swift */; }; + 0CF8BA66E12078120DB863307972EEB4 /* MultiTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1AF925CB18B9B0B703C6F5CA5025160 /* MultiTarget.swift */; }; + 0D24F81A53BBD7B165BF5CB77A3C79E7 /* AnimatedSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB2DA40F1188D559D2779EB5EC0331BC /* AnimatedSwitch.swift */; }; + 0D56D4EF41351DAE13C3E467D4168FDC /* ObservableConvertibleType+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F5BBFBC93786C1203D7B9FC6A5D8002 /* ObservableConvertibleType+Driver.swift */; }; + 0D938196DFD18FB78E92B65939ED3DF0 /* CurrentFileNameHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEA62DA3B37F8C57C82A14C0101890F3 /* CurrentFileNameHelper.swift */; }; + 0D97A8A4AC6C7B5ECBC2120ADDF396E3 /* OIMFullUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 70DF95CF1A956131DE522B1EC58F5D47 /* OIMFullUserInfo.m */; }; + 0DBAE07ED5D8EFF25BD2F6B66EE97A50 /* YBIBAuxiliaryViewHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 83921C9664E047ECE321FD559ED72F36 /* YBIBAuxiliaryViewHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0DC813E62FCEF6C6C3009180D7790BFE /* Result+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAE70D15CB0E723B27BCADCA5F142B7B /* Result+Alamofire.swift */; }; + 0DE5DB9C6227B3416778D8417DD95EA9 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1FC999A64120C01A02C6491C02500C3 /* ConstraintView+Extensions.swift */; }; + 0E13270B2F909467965F667C340E2179 /* CallbackContextEpoxyModeled.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F9DB03149250DF330B6D48C0E61D964 /* CallbackContextEpoxyModeled.swift */; }; + 0E30A2856E438861946ECEE79ADC366A /* Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57A5630091B1B1F7BEB362A6247CA11C /* Font.swift */; }; + 0E3CE3B0D20FE412F21CF712225E0259 /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D9E14EEDE501EE2045A8F5EF26EDD10 /* SynchronizedOnType.swift */; }; + 0E658960F47D4CF87A47AA250064BA14 /* ignore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 183ECF3CB3F9B9A28400DF0443F735D0 /* ignore.swift */; }; + 0E69D7FEC523A96BAD55D2F023719866 /* partition+RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C7F4582926271F92F237DDB69DF485 /* partition+RxCocoa.swift */; }; + 0EAEB1E9D38A99A316467CE6F913218D /* enc_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = D88DF71236E722809CDC054A7C195C5F /* enc_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 0ECDCFA9D12BBA0A59E8236199F7DC44 /* SDAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = D3D05FEE8ADDAB27B74995F22E6B4A65 /* SDAnimatedImage.m */; }; + 0ECDDB52DFF2A8C21B6FEF7889ED3D7D /* DDOSLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DCCA16221D7CCCCB0947FEC9E1C1F3A /* DDOSLogger.m */; }; + 0EF10747EF2A02413E84BD5EF7C87A4B /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 468FE65CB846EAB3F699F8E68CCDFC1E /* MJRefreshNormalHeader.m */; }; + 0F4377E02EB437F7B9E8057DD477F38D /* PhotoAssetCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 670E69BFA8B8E794E20278DDDFCCFC1B /* PhotoAssetCollection.swift */; }; + 0FAE540AF1B286B3DB2B1A692C9CFA9C /* URLSession+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7697809BBA99F7988F7FFD07178DF004 /* URLSession+Rx.swift */; }; + 0FD18359A58F66248D18498A8252A505 /* AssetManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3771450394E341C8109007FD4453F6EF /* AssetManager.swift */; }; + 101EE02DF118858FADA52364B1419E72 /* demux.c in Sources */ = {isa = PBXBuildFile; fileRef = 9A82381F95A0B1C9085F0DC4DCDEE26B /* demux.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 103337BF8ACBBD1355A09C1805816F01 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46F633D702261FD3818B8BC3F02C82DC /* Platform.Linux.swift */; }; + 10358166A89DEA3283C1A996CD8DC55E /* GroupOutputNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9E1FF60C3DFA18D3698A5B0976068D9 /* GroupOutputNode.swift */; }; + 106F4BFFBE4F028458C0C4A5BAFD3B41 /* YBIBVideoTopBar.m in Sources */ = {isa = PBXBuildFile; fileRef = C5CFBD20109F66699F30CEBC6AB89D14 /* YBIBVideoTopBar.m */; }; + 1080C4E4B6FB8B1BD23CB4AE3A2C31C5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 108D25E96A8834F93D0DAD5C26D654C0 /* RxTableViewReactiveArrayDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC4CC40B8B0D567BE5F577D1576BDBDC /* RxTableViewReactiveArrayDataSource.swift */; }; + 10A4345F4313A493E14D63E1D3898591 /* CGColor+RGB.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31C046C0CC4193B0A2A553D90BB92F7F /* CGColor+RGB.swift */; }; + 10BF11AC5501D529FC0AC9C0EAB13BF9 /* ProgressHUD.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956F909BA66A7652F595667B35B52BFF /* ProgressHUD.swift */; }; + 10CE029BDCCADE7B3EEDBA341638EC90 /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0A90D1C88AE636E67296B135530FC21 /* Combine.framework */; }; + 10D3D2FE2F2333DF1C45411E7620D35E /* upsampling_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = DC0328F98F4917C4905DA2AD95CC417A /* upsampling_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 11046E796D234137C1BE618CD93B2C85 /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FAFB9102A7821804A603A0AC1AE1A19 /* SynchronizedDisposeType.swift */; }; + 1105B4A023D2B23A2003AF236E9376E0 /* BaseCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24B4AEB38B8B095C56E839AEF1BCB6FB /* BaseCompositionLayer.swift */; }; + 114069EBE34C9108E81D3884C4112C08 /* DotLottieAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C3603E52BD81ED0DFEA15C65199D20C /* DotLottieAnimation.swift */; }; + 1140FCB1BDC1B86277347BB1A1325370 /* LottieConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8CF6B41020B1C18360CF68D29A37865 /* LottieConfiguration.swift */; }; + 114C81D88949616817C9CC12A151EAE6 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 67B45AD70807BBDF6B47FDAA4390A5C5 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 11538956E6B6D748323391EB865CBFFE /* UISegmentedControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E82BF932F82DDF213C52EC34483CFB3 /* UISegmentedControl+Rx.swift */; }; + 115E6A3F461DC8C1E92EFEE3058E0291 /* YBIBOperateBrowserProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A2CE0AF51BE27F12200078A93A6C66E /* YBIBOperateBrowserProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1171C66C417E998F0BDC4449B7938B82 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 1194E62AA3F6F506799B1A43B16942B5 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C7A61E9DB82D02FEA27B03B819C2C7A /* ConstraintDirectionalInsets.swift */; }; + 11C929E6BFB46F981685446F26DCE605 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B202162B632B08EE2812503526E54FC /* MJRefreshAutoFooter.m */; }; + 11FC9573D3140E8580EE8B826043B4D4 /* YBIBSentinel.m in Sources */ = {isa = PBXBuildFile; fileRef = 465B409F53432E81A5A256AE2E926B8C /* YBIBSentinel.m */; }; + 126496714AD564062A8C10787CC01B8B /* MJFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = 53594C8166DD9CECAC206989DD8F274D /* MJFoundation.m */; }; + 12747F86266940B02E2B373CFB2EE754 /* OIMSoundElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E05D9021DDD8DE479F93C6DA29461F4 /* OIMSoundElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 12B0F9412DA72E5C518155799154EFCA /* NSObject+YBImageBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4041C387548214F751404450BF39B769 /* NSObject+YBImageBrowser.m */; }; + 12BAC0D88E72578D863B0CCFE7D8DE98 /* picture_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = E23A82FD88F15BCED19B1985CF16548D /* picture_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 12BFAC7BBCEADD5934026623E8FB8B59 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A044FDCB634FCC2E2D4514A1D478D6E /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 12DF3001E99174FC92085BE6467517B8 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = F27BBCA6BA4C196D7AE3AFB1E1710DD0 /* SDWebImageDownloaderRequestModifier.m */; }; + 12FA9B81BDD131CCF1C8796918207858 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 12FEC145834F9E1CAEF646C4BCBCC378 /* YYFrameImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E27C6104885875C65D924ABDA4E3D40 /* YYFrameImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 130A51F65E41782E0D2C44FAD405C472 /* yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A95E8634ABD3401F658163DA5877CED /* yuv.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 1313426F64905A867293DAA192DDAB28 /* URLEncodedFormEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99A57B66940EB146F742E55C77359AA8 /* URLEncodedFormEncoder.swift */; }; + 13416A8B642871CADD954FD04797CC67 /* DataExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F899F189DB3B7D9DF35DDEA3110CF17B /* DataExtension.swift */; }; + 138D67F6083B792390FB49401FC6B96C /* LayerEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6883A58E11528E040F55C0325D7B37F /* LayerEffect.swift */; }; + 13B0512A565AFF7DD1AF210965AB35FA /* DDLog+Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = B81878181733515C615DB48F037DC03E /* DDLog+Combine.swift */; }; + 13DBF1513F653277014B703362F3DFE3 /* Int+DateComponents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 001CAC5B0387F752F807373679700C1A /* Int+DateComponents.swift */; }; + 141E78E1381DBCAF7D310FCC1C8BA54E /* YBImageBrowser+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = F1ABC498902A7C5F1A16E46F26227B68 /* YBImageBrowser+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14435C7937441FB8744FDD53F12A4711 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A53ED458B025D58C4FD11EC93FFAAA2 /* types.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1463FCD0976200B9E656F31FC5803F5C /* OIMFaceElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 294772D1AC56A8AFBAFF4406865E8529 /* OIMFaceElem.m */; }; + 1484DE903206BF8D6B6900A0F8A71692 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 91AED5A00B8A2452332D3796039AFA18 /* SDImageIOCoder.m */; }; + 14943D0EE97A4966510A86F5C3FC66A5 /* MJExtension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E1B0BBCA140DCBB401B2DB7E116FC93D /* MJExtension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14A37558E0138C9C3201C28578DA6EED /* CocoaLumberjack.h in Headers */ = {isa = PBXBuildFile; fileRef = E939347E78A0391184298A74581E8A4B /* CocoaLumberjack.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 14E7FA491D8E0ADD6C6E74B1772E73CB /* ViewEpoxyModeled.swift in Sources */ = {isa = PBXBuildFile; fileRef = 488940941E25EEC0F1419CDC1C942616 /* ViewEpoxyModeled.swift */; }; + 14FD166E09E03302D347CD373DB56DB1 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = BC58BA55D7533F2245DB9FE3327E7353 /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1509D9892B9A6D6BE7DE77053F26DDBA /* OIMGroupApplicationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 21EF815B6C34644A35D6B92C9DF3DCEF /* OIMGroupApplicationInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 150C4577BF48F57FB9C9117625A2C538 /* CombinedShapeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15DB7F8C2DB86CE0AAF598E6C439B423 /* CombinedShapeAnimation.swift */; }; + 154230695B4E3D61B8D2BD02DAA2CE91 /* IQKeyboardManager+Appearance_Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = AED21DA327E29BB41B917FB1E341C399 /* IQKeyboardManager+Appearance_Deprecated.swift */; }; + 15B86EDE2F58A6BFDC8A2FA898F256D4 /* UIColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF9DEF0B8FE64352C40FF7FADFC32A4E /* UIColorExtension.swift */; }; + 161AD6A1FD1567C9D48E62AB5A8BAB68 /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CE9DBE9C323FFDFD3869DAF5A13CFF9 /* StartWith.swift */; }; + 1625D017B0A759A680FCB0C5C797A1A3 /* SGPermission.h in Headers */ = {isa = PBXBuildFile; fileRef = 9291056517CD88E650D02DBF191884B9 /* SGPermission.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16746E111A8A707073043335AEC0A654 /* SGQRCode-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E1CA4230DC2DBBA4DE46A15D56461F6 /* SGQRCode-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16CC427093CE09F879561F11238C085A /* OpenIMSDK-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C9AEE725EBC8AF812D343242835B5448 /* OpenIMSDK-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 16E02FAE9A06528993720ACF5F7680A8 /* IQKeyboardNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F5FB553F91C4DAAD1EEBAB85DD87170 /* IQKeyboardNotification-dummy.m */; }; + 174953FEBCEE7B162A5EDB2290126D12 /* ImmutableMappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE1E8395E47D386B6490E17E8F67252 /* ImmutableMappable.swift */; }; + 174C03CECE0755237E65408465CACD10 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = BE2B71D301E15E6410F723894618F8B2 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 178566C64EBE62048DEC6A78AD16FA25 /* IQKeyboardToolbarManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA1464237676D38F4BF5A57D9F5A55D /* IQKeyboardToolbarManager+Debug.swift */; }; + 178C56922BA738F67A565CA8681F0F05 /* OIMFriendApplication.h in Headers */ = {isa = PBXBuildFile; fileRef = 21539E4C77DD56C4E08819C238A77241 /* OIMFriendApplication.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 179439396BE32AAC0EBD8AF986573053 /* DDAssertMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 44443D8FED362A663B7F86031F24FBC4 /* DDAssertMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17963E14ADC36534628E33A2E456A9FD /* alpha_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 507C90449A9C2A97E2871ACAC9B1A441 /* alpha_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 17ABD1A935188470A532AF5630EAE19A /* CGImage+WebP.h in Headers */ = {isa = PBXBuildFile; fileRef = 362C318AC23BC309320600A5C2B2254E /* CGImage+WebP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 17BDA99227A012CF9CEA639D56A748A2 /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74ED59197619BCC0BC378F7696D9CF23 /* RxPickerViewAdapter.swift */; }; + 17D774DAF5C4C286CCED8F85F4B36271 /* CodableTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1159483893C79D787E89D45D687672E6 /* CodableTransform.swift */; }; + 1809335C833BF5E3FE86CB05C7075723 /* SizeValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08BF7E05FE4526682EBDA0F71476A16D /* SizeValueProvider.swift */; }; + 18280EBD305C8AA2B854584F685C75F7 /* UITabBarController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3A498E078050E333B31F85315541AC /* UITabBarController+Rx.swift */; }; + 1844AC03F7E1C318AC87DC505B3BE062 /* MqttCocoaAsyncSocket-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E45E6AF7340B004DA48A8AE2F8B53F37 /* MqttCocoaAsyncSocket-dummy.m */; }; + 186A2DC5B476A02DCCFD4808E3325486 /* ColorValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D66E4A666F8AD6639F3BB8433543EBB /* ColorValueProvider.swift */; }; + 186B573F1BEB8A23419A02814A7741DB /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = E10CC87B0811F86105A32F88A4F75123 /* MJRefreshFooter.m */; }; + 189966E79B3BFB2BD1E49CC56F03DCC0 /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E0843B42A030B55090DA9565D93667E /* SDDeviceHelper.m */; }; + 18F2FD69EBCB5B9F1941D0C1FABA4684 /* VideoEditorMusicAnimationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8B35159705EBE2193CC79CA9B894E50 /* VideoEditorMusicAnimationView.swift */; }; + 19093EF705B706BEFB97DE1C2BD8E609 /* PublishRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3DE50759EFD988D04743C79471C7618 /* PublishRelay.swift */; }; + 19164B08BA217FB9A3A7F6E1AFF24AEC /* EffectValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57DAE67362F099548C9435D60264C18C /* EffectValue.swift */; }; + 19455C60A2177C13A8725D642AC1D990 /* CompatibleAnimationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7FAE59124813F9278DCFBAD69B7244C /* CompatibleAnimationView.swift */; }; + 194AF5868782BB0839C3D4A3C1122B48 /* Core+UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02840ACD5872409C5A15AF32A909BEC0 /* Core+UIView.swift */; }; + 19C0FD2FFAF58F668A3FDC8386699728 /* StarNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889A561130AB6E4C8C73F23593C54B4D /* StarNode.swift */; }; + 19D1AC27CED63C2BF64F14D47BA96A17 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 02B1232ED02FD0082124D9CDF6969512 /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 19DCC268C6178B9F89DD7ADDFDB5F5FA /* PhotoPreviewSelectedViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C881CC130CEB757F00BBCE825670589 /* PhotoPreviewSelectedViewCell.swift */; }; + 19E9F9236F77468892AE69B7F5ED27E8 /* DateRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9B0C75F024986060AABFDD7233FC611 /* DateRepresentable.swift */; }; + 19EB3D966E33BFCF2240BCB10D24A2E2 /* quant.h in Headers */ = {isa = PBXBuildFile; fileRef = 5163127D0CC7B14BDF70ED1E3ABB888C /* quant.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 19F02EEEEDC69DC212DE3BBE5B0FECA8 /* TakeWithPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C6318E30F642CCF4DCF9EB42BEBE4A9 /* TakeWithPredicate.swift */; }; + 1A10909BFF2392D9F946A6487405E164 /* RxTabBarDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 728E021DA9E63720A04C56E1FB52DA37 /* RxTabBarDelegateProxy.swift */; }; + 1A47F6B6428CC393D000C663CFBFF3F5 /* UIBarButtonItem+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 844DF282F910BCA1C2789FDB5A2CB231 /* UIBarButtonItem+Rx.swift */; }; + 1A4BC84B0C50F51F8FFE8A37227EE46B /* RxCollectionViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 328666E1FE05310AC0A5D3D31B1E08E1 /* RxCollectionViewDelegateProxy.swift */; }; + 1A7E28AA5B547FD2C03AB849E47A73CF /* not+RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BE64571CFA39F6E7F89C21A96D1D7FB /* not+RxCocoa.swift */; }; + 1A8C915663836B11DC3524DAAE284FF7 /* OIMVideoElem.h in Headers */ = {isa = PBXBuildFile; fileRef = E1FB0CE6CC1C2683C361076E7AB82D61 /* OIMVideoElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1A9393A1B5F70A3BFCB9967DFFA7980E /* PassThroughOutputNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F74E51E407C4A9311284CCF23D154B71 /* PassThroughOutputNode.swift */; }; + 1AB69E4AB50F68DA1FC1473E49F2A502 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DC8C41B7AB96DC700B00AEB39525F5C /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ACCB8C5C27C1444D4F45DBC081965F6 /* rescaler_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 1FB1AF2C85681828F45ABCA77CA811B2 /* rescaler_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 1AD63F875F45797E7C1D46E7C898CFE9 /* AssetManager+VideoURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE53DF77216A675C25EC903D738D2065 /* AssetManager+VideoURL.swift */; }; + 1AEB50393C88A3A8E94E1C7F17881747 /* LayerModel+makeAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EFDC55D9C77B32C3928B5308CA1A0C3 /* LayerModel+makeAnimationLayer.swift */; }; + 1AEBA7397BE356EB62FBA07D451124BD /* YBIBImageData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E667A962419E1AC1223896870D663EF /* YBIBImageData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1B1B3DD8D52AFFEF0497E8558A52209E /* vp8_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 6C98EBBA8FA597707BF0B50B83AE3CE9 /* vp8_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 1B289229F7E62A4EABA042918B85CEEA /* quant_levels_dec_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 76CC33947A6F23A709A9F9686648B932 /* quant_levels_dec_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1B54B5D6BBE60B992AD6E0B0C38B54D8 /* DDFileLogger+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = BB176CC8A097D4E742BA5C362AB0B997 /* DDFileLogger+Internal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 1B5B440676B88E51CC477BE0C3EB7BD4 /* YBIBDataMediator.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E4AC95D725AE9914E15B02C6040935 /* YBIBDataMediator.m */; }; + 1B87A741E524BA00E3CFD3A38E24F71A /* OIMUpdateFriendsReq.m in Sources */ = {isa = PBXBuildFile; fileRef = 48235EA9287F0138124F456EEB881070 /* OIMUpdateFriendsReq.m */; }; + 1BA75F56E78A454136945A7C6F67BEE4 /* StrokeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9909A72F16EE2DC3ABF5C0F04E9ACEC3 /* StrokeAnimation.swift */; }; + 1BAC69260156BD0B7C09BAE5D070F0D0 /* YBIBDataMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BDE57FD5D9733AD03237000523DFF20 /* YBIBDataMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1BDE2FFB1EFA43AD2D8EADD6BD3D851C /* repeatWithBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9020DDE726D79775743E62A9859FF53 /* repeatWithBehavior.swift */; }; + 1BEF0570918130CB9C4E7EE398035F17 /* ColorEffectValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AD6F8BAAAFF98186138E4A6113D787B /* ColorEffectValue.swift */; }; + 1C016469B5AA70C08BDFECAA27EAB051 /* OIMLocationElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 00CAC1B2D31769B3178F778D87E68816 /* OIMLocationElem.m */; }; + 1C3F07299171B82493D3696239A11BAF /* MGCDAsyncUdpSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = 850C6A13A8188DD67C782628C68BEC21 /* MGCDAsyncUdpSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1C4341D3342F37B1C47EE7F2B75E2CB8 /* SharedSequence+Operators+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 650CBF9346AD732290BB7ED692D6B5F7 /* SharedSequence+Operators+arity.swift */; }; + 1C4D430B867251402232CD36BA776B17 /* ImageView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E228DE53A7843A9B62E323CFFB04240 /* ImageView+Kingfisher.swift */; }; + 1C5A7BFB8D2A5906F22C3F37C11CC18C /* CompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E0182FEE828DC6578A7F76F77A59EB /* CompositionLayer.swift */; }; + 1C7FE625D2FEBBE2F565CB6459BDB0AB /* sharpyuv_csp.c in Sources */ = {isa = PBXBuildFile; fileRef = 735D6AE5E93EF5DB28F313B462B8620D /* sharpyuv_csp.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 1CC49A9BD8554882D499AFC657485A76 /* ObservableConvertibleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BC91B6AC1E57B084227D354F0152109 /* ObservableConvertibleType.swift */; }; + 1CFA0634F7CCBDDC1985E4C56876EA3C /* Asset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 901DB6006F9C44DE01F74CB94CF76648 /* Asset.swift */; }; + 1CFAEF271291CF9E61AB9A05C13CE091 /* ObservableType+Weak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65EB44BEDF8C30E6FF3250EEF9BC03B2 /* ObservableType+Weak.swift */; }; + 1D147502E163B4AA9D2C66CB26A2C14F /* StrokeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE035ECA7BD09E6EF69413B6CB12ACB /* StrokeNode.swift */; }; + 1D2CB89B3DBBC0EBB613F753F58FAD32 /* Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81EBE4E4D49DF7168E5925FA02B2916A /* Date.swift */; }; + 1D2D66E3331F77A55BB82C3920F7C40C /* OIMManager+Group.m in Sources */ = {isa = PBXBuildFile; fileRef = C45803DEA9BBD6D69D4D24C69F4DAFA1 /* OIMManager+Group.m */; }; + 1D4637E0811723E3A42D519DDFBC4ECE /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85FAC75B5F2BEA1511718CAA480E2ADC /* OperationQueueScheduler.swift */; }; + 1D74158DCC81C4E83C0A8945EDE69C86 /* SizeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9108431DE0EE65E182C641811F6F644A /* SizeExtensions.swift */; }; + 1DAD16111DCF0BFEDDF9BD4D09008454 /* DotLottieManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F57B91C4DA1E7A118360091C50ACB4D6 /* DotLottieManifest.swift */; }; + 1DB1ACD53F7A32A602A8883C88B141AE /* dec_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 1DBE5FAED8A096071298FA384ECCAB5D /* dec_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 1DB413B01CC591F2EADBBE0923F02E8E /* mapTo+RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D5B305DEE1ED75EE8C4354CC33DDCA /* mapTo+RxCocoa.swift */; }; + 1DE5A65531D35FBB1E317481CD316342 /* ImageModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74CA6CFA6A9272E68BB7A7285B05F588 /* ImageModifier.swift */; }; + 1E1DDB49C9A4045FB76C69930DBA2F1E /* alpha_processing_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 0D40A187A4C62181827B7D1C0CFFEFFD /* alpha_processing_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 1E38D43C5BCA95E8CC8DF9A5DAE7A4D5 /* UITextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE537AA8E8B46BAB0B6477FFC2C8F915 /* UITextView+Rx.swift */; }; + 1E9951B4A9662CD4C746E3EECF40E635 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = F6FB256EA07E33D5F394A9EA0450C896 /* SDWebImageCacheSerializer.m */; }; + 1EA011B45EC780B434507AFB3D9647ED /* NSObject+MJCoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AB1411EA19E9E5CCE78567975424B15 /* NSObject+MJCoding.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1ECC492499B186A4611E3D985575810D /* IQTextInputViewInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 836495F110F408D974AF64E8A7A6D754 /* IQTextInputViewInfo.swift */; }; + 1ECC5F320AEFB120081358B4FFB7442F /* NSString+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B335E945CD78406784CCA803F62F16F3 /* NSString+MJExtension.m */; }; + 1F2DEB722138E3D7CCC4A02F01414AEC /* OIMUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F9F954A9051F47DF3AA5D6404469F27 /* OIMUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1F3A35AA20200F882745D5FA8432730D /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5A618038C5542D4884F2ADAEB84259 /* SkipWhile.swift */; }; + 1F843A0B4CC4D94F6DD9D266567AE6DB /* BaseConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9C28583AE34DED7B6FCD1ACDB354EDC /* BaseConfiguration.swift */; }; + 1F95E373A37C5625CC6CD68D1F433556 /* PreCompLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F060B4B84D52BF88E54DC7C9B28D410D /* PreCompLayer.swift */; }; + 1FB7FE3D859627710638E47EAC61C2DD /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9FBF3319C645F6D97915F2E5794574E /* Buffer.swift */; }; + 1FBC61AD6C848603C1B3AE2B8CE82C0F /* YBIBImageCache+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = CF8B49FE54508962DCCAE48FF9C6BE2C /* YBIBImageCache+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1FBE17889C1976DC4022F1202E19E5EC /* OptionalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1900F12C0F59A2EE38FF64396E3A02DF /* OptionalType.swift */; }; + 1FE523A57E1F050C9462927D72E6453E /* PhotoEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB260D469E13128154D9E7ABE02CAFB8 /* PhotoEditorViewController.swift */; }; + 1FFFC2B6E599D4C2125E35182E161F2B /* sharpyuv_gamma.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FAE7BDC15B4ECF9C5F5FD05C6AFD281 /* sharpyuv_gamma.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 200355A1D6B2618C8BB30BFA6973FE01 /* SDWebImageDownloaderConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = C25E233CFC387CA4A006D4D00CDBB57A /* SDWebImageDownloaderConfig.m */; }; + 2014B01D7621E7DDAA1C4784FF7EF0D3 /* DotLottieCacheProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0547616BE46FF1E17F8F0D22C74EC2E2 /* DotLottieCacheProvider.swift */; }; + 202812410FF22B588DF523787B54E176 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 20342C3491090D9F1DB91C5CE745291E /* ItemsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB39954F2E0BFA206C3D194C20D02C2 /* ItemsExtension.swift */; }; + 20457FA9C1E51F32C3B2F8A5821B0ABB /* IQKeyboardNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ACE6098C6600F130B1FBE95DA09FCB5 /* IQKeyboardNotification.swift */; }; + 2055774CD703B52DABFB1CC588394A94 /* MJExtension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 727FFC6D0A7BEFB9E947E7D5FEB69455 /* MJExtension-dummy.m */; }; + 205C83B3629F462C40CBBFC1E1FCBC3C /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 45676A1039F53B7B44E96257EFC0755B /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 205EB01AED14BB574DD54EAFE26E4786 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 208BA7E9A4055B273B4BA785F0A0E6E5 /* SectionedChangeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED970E0B932A9A86C6B9B60E4F4A43DE /* SectionedChangeset.swift */; }; + 20988E7C942B437989E7A7BF1F8E9136 /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1023870AD95A079CF71B1619FF07463 /* DispatchQueue+Alamofire.swift */; }; + 20FDBBA13FADC258306290D61E078B30 /* UIView+SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4A9FE6A3F2ACD446C28FAE8E1F0E53 /* UIView+SwiftUIView.swift */; }; + 210D4C72506ACFDA3F5129966DA002BB /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B629D4BA0B10122B36F8D3078B38BA6 /* Event.swift */; }; + 215254D820230480A086DCC6E323D256 /* RxDataSources-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BCC3CCFED5B0E4592E403671601ACEF /* RxDataSources-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 21ADD9908F7B0003FCC8E1D221548068 /* MainThreadAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7537436472ABFEAD772B0BF688824449 /* MainThreadAnimationLayer.swift */; }; + 21B415E684E478369BB5D2C63382C613 /* VideoEditResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2487C96BE7C199B1C2B818C214ACE2A1 /* VideoEditResult.swift */; }; + 21E2F85CE870CA57AF08B557717E2588 /* IQKeyboardToolbarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1970F255FBB8A6704AB7CFD5716435DC /* IQKeyboardToolbarManager.swift */; }; + 221C2C5A677210D28C7092AB45DAFBAD /* alpha_processing_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 1CE5CC4648FB6DF842BA008DD474C9D0 /* alpha_processing_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 22516EA77E7120000632C30BD9A03927 /* UIScrollView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AF1F452F9623F8A1F1BC97F1971B9AB /* UIScrollView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 225B339BBBB5BADC1BCA9E6E050486C2 /* HXPHPicker-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 27E062A58C2152A34289C191C1908410 /* HXPHPicker-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2260352B17E9CBFB9A5E5306851A2649 /* DDContextFilterLogFormatter+Deprecated.m in Sources */ = {isa = PBXBuildFile; fileRef = 94441A97766437C85EA2053848569EA5 /* DDContextFilterLogFormatter+Deprecated.m */; }; + 227638CEE6F92D3BD0F9B0D45B49C833 /* RxTextViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13257E2CEB981F8DE0977FDCD119CA08 /* RxTextViewDelegateProxy.swift */; }; + 22ABB2CB25ECF7224B583221B4C97CBB /* ReducedMotionOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9827171C80049752294AD9E3E7618E0C /* ReducedMotionOption.swift */; }; + 22E8465DC034A34C40E02C7B3E38AF50 /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 8D4A842BE2E110919CE40363C5F007E2 /* utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 22EF1D1B405331F794F1D42A447A1E9C /* FromJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE4001EA3C74696CD653D4D456B33090 /* FromJSON.swift */; }; + 23B8C15ECD59DB68A10AEE5BC18A66FA /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 30BD85190BA6619C60F905C8C99773A9 /* SDImageFrame.m */; }; + 23E0E5B329060D9643B8C247723D203F /* PhotoEditResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 996E52A9F81C41390E20DE3A4592D278 /* PhotoEditResult.swift */; }; + 243FC08968D968284B21109B4C52F5A1 /* CompoundBezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480D5CF8CBC208B22CD517AAD0704692 /* CompoundBezierPath.swift */; }; + 24637C51989929A62E5E75585544A14D /* IQKeyboardManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A89EBE355145B0F7D0CE86923C8686 /* IQKeyboardManager+Debug.swift */; }; + 24E37A83108B1C7DCCCEEF273881A6A5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 87F5684EEAC16057EE7CFC5BACC763C4 /* PrivacyInfo.xcprivacy */; }; + 24E72CBC4A4DB70615D5F552218E906D /* CoreTextRenderLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA10D70D427E316E20ABE84F02DE485D /* CoreTextRenderLayer.swift */; }; + 24E963C1D6245F98BAC8A0ACCB7DE987 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 198CEFDEA8156A3D6EA872BE843B4316 /* NSBundle+MJRefresh.m */; }; + 24F05AE767C4BA4A3D46405B285C1917 /* LayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 862203B641B5E8B956897660DF943C86 /* LayerModel.swift */; }; + 24FA5CC8250E9A64219FA2F3201539A5 /* muxinternal.c in Sources */ = {isa = PBXBuildFile; fileRef = 432FA1B90521DCF2ABD467F6CB5BE0D8 /* muxinternal.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 250DB522E2B88BC538C5B468436228DC /* SwiftLogLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD8A328CB6EDF375064B5BEE7F65B87 /* SwiftLogLevel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2558B9A09FEC5710F7D00DD5E3E053C5 /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F8206ABFEFF019F1EA61DE7AADF9462 /* Request.swift */; }; + 2567FE276DB76481DEFC7DDFE7D775CC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 25691C42AF5ADC1B7AABB62199030F4E /* URLNavigator-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D0437BBB36BED63582B9839D1E20DCA8 /* URLNavigator-dummy.m */; }; + 25A38F09D2BE68763FEEFD4C71B99257 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = DBD5C92406FF93CF245F5E43F82BE580 /* UIImage+MultiFormat.m */; }; + 25CCA7DB92870A0E9B9DB81FE7CC635B /* IQKeyboardToolbarManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A0E60F83DE43BBBF924BEF72B94D7D88 /* IQKeyboardToolbarManager-dummy.m */; }; + 25CE41F0442E533D2AB0256D4527FFCA /* Binding+Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDE09D4F498218C6D85FACE5AF9F3203 /* Binding+Map.swift */; }; + 25DC15011A46811CCD6ED7C3F8C0D96B /* DDAssert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19B267246ED5549EBC604DE7947CDE89 /* DDAssert.swift */; }; + 25E001DB4C1AF58D359B83CB604EC927 /* random_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = BC82B7E9975E6980600CDB79F602BDD8 /* random_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 25EBA3F34C0061382B844D4A9E3B464D /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 233D806C4FEE853AA2DB63AC1F837D4D /* DispatchQueue+Extensions.swift */; }; + 261EF92C048F313E01114B86B08D0E73 /* YBIBVideoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 57A2457AF7E1D5EF7A21A2F3D540DA59 /* YBIBVideoCell.m */; }; + 263DC1F3C2EF5F1B9D867061F1E91853 /* SGScanViewConfigure.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A41343F97BF0D399ADC1E9711D86A22 /* SGScanViewConfigure.m */; }; + 268008A236ED740E643732F35E784099 /* RecursiveLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95C9B78922BE02FFF53369884C14F1FB /* RecursiveLock.swift */; }; + 26871F8BD6198C4D087B2EE2E8A20EBD /* webp_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = C05D0791B25960724D44549980AD74B1 /* webp_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 2688DF9C89CE58D50C174F1E1BB89DE4 /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6231FD2D37A52E5BFE0B866D8EB940C /* SwiftUIView.swift */; }; + 268C2C9BBF4967CE0B06DAE477030173 /* Interpolatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F8CAE6D15F1B3B7A425CDAC4B3BEB3A /* Interpolatable.swift */; }; + 269D5BD5031AE2E93B3ECD48F9FAFBFA /* YBIBAuxiliaryViewHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 37D11A371CBE51534B1035243FE652C8 /* YBIBAuxiliaryViewHandler.m */; }; + 26A74998FF747B99E618103E7902EDC3 /* KeyframeInterpolator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE15C20A74AE7258AF74FD1B506F1AA /* KeyframeInterpolator.swift */; }; + 26C23B7B2314ADFC8B910E21F066D80A /* SDWebImageManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A1DACC2DC8AD21EC30FE9C39863EC883 /* SDWebImageManager.m */; }; + 2703C0DC58FB460C01ADE8E8D22C9F62 /* SessionDataTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227239C8727C62367AF6079F3FDB9577 /* SessionDataTask.swift */; }; + 270B3843CF38BFC4CC014912C65372BD /* UIRefreshControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5FE50E2C3759529F39015ADF4515455 /* UIRefreshControl+Rx.swift */; }; + 271276372725504F72DF758F8FF03934 /* SDAnimatedImageRep.m in Sources */ = {isa = PBXBuildFile; fileRef = A0754BE3F77591C44FFAB586747F773C /* SDAnimatedImageRep.m */; }; + 2749B0C5BDC4FE8527CA5A1EEE444749 /* dec_clip_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 626BED7AFF918C2EB7C12F491DDB7BE7 /* dec_clip_tables.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 2776432A35C89643DCFD114EEC2DE838 /* DDDispatchQueueLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AC9E6CA74830BF0C4F0A5DEB598B368 /* DDDispatchQueueLogFormatter.m */; }; + 278DFD4F490310BC9B416EC7C28254AF /* quant_levels_dec_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 31391E8B55977047175BC0FA348319BA /* quant_levels_dec_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 278E08ECD06CE42D68C327B7ED07B31E /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 2393D8EC822992E154A2A546A2FA3CE3 /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 279197F2D4222FB813C09D15F93F0051 /* Observable+Alias.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C03FDAE6EE74E76EBA2288AEB50A1EA /* Observable+Alias.swift */; }; + 2799155AAA7AC8118EC37F5E30D89B6B /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = FDA3B029D6EB1945FC6FE325674E10FF /* SDWebImageOptionsProcessor.m */; }; + 27A478FEE0C7EF6A9FE97D7F76571E6F /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 937527F6AC0ACCCA2F3FE296E1CEAA54 /* SDWebImageDownloaderDecryptor.m */; }; + 280159C811343669BD8CA8A23A24DF75 /* OIMConversationInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B1881949C33489CEE44FB1A8CE92D7EA /* OIMConversationInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2849A018772515A2A420A69B13954E8F /* PreviewVideoViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B575818A4B7E646C5F142DB98D4CD278 /* PreviewVideoViewCell.swift */; }; + 2856121070FEFC1B4D77693641551510 /* YBIBPhotoAlbumManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D60BD316ED3AAEB173CD7E6D10C500B /* YBIBPhotoAlbumManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 288CD3416B265CAC1300D7938167AE66 /* MJPropertyKey.h in Headers */ = {isa = PBXBuildFile; fileRef = DFD1D7F5AE312A4CF621602C119A807D /* MJPropertyKey.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 28A85A89E4CC5CF4E4CE71FC660E4730 /* NSImage+Compatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = E9EFABA771877ADF9180E7DC0B95C72D /* NSImage+Compatibility.m */; }; + 28B54402C159A5D46AE0930CC115B860 /* backward_references_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 36867FE9CEB2E51AD35828908BE554DB /* backward_references_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 28BA9702905AA2B4C1E9E4878032D4E4 /* MJRefreshConst.h in Headers */ = {isa = PBXBuildFile; fileRef = EEBEE290B7F33E3A002E037EFADB8B2F /* MJRefreshConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 28DDF775177170CEF65E550AD4EF6111 /* OIMSimpleResultInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C6075D01B0C2D3160EF60C4BB2ED644 /* OIMSimpleResultInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 28E2D1FFBAEC6CFB57D72F44CBBA018C /* config_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 6BB7796CE00BCED66E4B2F23431A73F6 /* config_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 2943E6BAA581FB96B5D98F32706C231D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + 2962C56DA00F10C519469C70EB1087B3 /* CocoaLumberjack-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 316B60AE42434791E20A83CEC6A09383 /* CocoaLumberjack-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2966C57815E8A7DFC25ED23AFAD66C31 /* BundleImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6ECB7242FE69E5D1474792D4B6FBD21 /* BundleImageProvider.swift */; }; + 296BF59A80969CF54CFCD4908064CF87 /* NetworkActivityPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3CE22D40D563D3716D2B637C30D428 /* NetworkActivityPlugin.swift */; }; + 299BC9F3FD6FDB13F90CAADA0E85E625 /* OIMSimpleRequstInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 02D4D5D1D01BF0456AD4F21C830F01BD /* OIMSimpleRequstInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 29C0DBA2B06EB4A2A273B356AEDD27B5 /* Vector1DEffectValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC56FB29A4BDFF4CF1349AF6A43D9F9 /* Vector1DEffectValue.swift */; }; + 29C433665FA967606C6CD5B8A265D1B6 /* Moya-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 58E05B5C93BADAEFD58E919F0B6DB5D0 /* Moya-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A00AD64351718EA40475CCF924B0870 /* EpoxySwiftUIIntrinsicContentSizeInvalidator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF4F5D327A12E7ACE2DFF76883BD526E /* EpoxySwiftUIIntrinsicContentSizeInvalidator.swift */; }; + 2A3F75428348E6B2AB9828388AD4B9CD /* mux_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D73881111D0B6F5672FE5D8E90E98FA /* mux_types.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A5D5D23BBA9E041D733CA56472C1F4C /* BezierPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B37E5F666720987BD19B13495B1D2AEC /* BezierPath.swift */; }; + 2A61C66DF98A7F7FC183B67F5B9F97F8 /* CallbackProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = A99EBE5E9E3CAA905EC6539367F7792C /* CallbackProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2A8F210A67132914E0613F1C99193F7C /* PhotoPickerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33480720859FB80422F18693CD711143 /* PhotoPickerViewCell.swift */; }; + 2AA4D8A29372E9703E65E22948131B63 /* ClassReference.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC327E3E09A630F76C0A3C2C4014967D /* ClassReference.swift */; }; + 2AB34339C98BF370283B2679E890BF9A /* MakeViewProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA123271654EAC1C72B1A246499543F9 /* MakeViewProviding.swift */; }; + 2ACBCEA4A2C9BF7E1DE378F47A085951 /* IQTextInputViewNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BF32372FBC1D4CEB416B12E4E4D35483 /* IQTextInputViewNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2AD40AFC4BB803B3EF3C41BDE61118E5 /* YBIBVideoData.m in Sources */ = {isa = PBXBuildFile; fileRef = 193E7324AAD235E26ADFD7F5B3EEB6C7 /* YBIBVideoData.m */; }; + 2B067825708D13E7E455426389397D1A /* UIView+IQKeyboardManagerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D95D57DFF072259B98628A58665039F /* UIView+IQKeyboardManagerExtension.swift */; }; + 2B20067EAA2480AF957719D9D01C2CD7 /* YBIBScreenRotationHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D95A95805D665C143687E0AF8794CAC /* YBIBScreenRotationHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2B2EB369550CE92CEEFCBFD3D32B8A3F /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61831D41BCD7315F136D4DF2A5ADD114 /* ConstraintInsetTarget.swift */; }; + 2B956A20DE80B42EA2C4D55BE6DBDB67 /* TagListView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 59DDD979CBD6C9981F4FC9235EFC9381 /* TagListView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2BA2440F9918444C393690BFC7D9212F /* FilepathImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F6B9B8EEDDD183E1425AB22C7937309 /* FilepathImageProvider.swift */; }; + 2BAD02719D969EC5C6E65323E04A505F /* RxCocoa-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D1EC99C6BE34665E03162207933049DA /* RxCocoa-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2BC30E20EF04FAC4C6C5675473E6B29C /* not.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ECDE574BC8FD1E32B99075B12144063 /* not.swift */; }; + 2BDC9B4412E51F70435144EC2F215184 /* ErasedContentProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76FB8636DE8E4F96063F7028E44A0E04 /* ErasedContentProviding.swift */; }; + 2BE4EE63CF1855AE9F3E6F93F06119CF /* muxread.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D2C92E71F92957D93A3E7A0F3E1C393 /* muxread.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 2C763A73ECF7621B40360E6929ED2A27 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 2C96A318BE047B6E68309B615CB5B8FB /* lossless_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = D684D3C9D84C465A70ABF5B38AB813C7 /* lossless_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 2CC24AE55F29AEF0890A4258AE601A88 /* filters_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 728F4A0612FA1A63487666BF4A4B68DA /* filters_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 2CC446772DC028C095278529D924D35D /* ShapeRenderLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D8493AA193CAA6E09CB81F3D8A8C477 /* ShapeRenderLayer.swift */; }; + 2D105BF9B700D92896BF06F340275B83 /* NotAuthorizedConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FC1EE43154306096568FB039E407BD3 /* NotAuthorizedConfiguration.swift */; }; + 2D56C6EFDC9DF036822FA06D50ADE2C1 /* CAAnimation+TimingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F24D6C58E498E7B37DF8D75A1208F70 /* CAAnimation+TimingConfiguration.swift */; }; + 2D8245FE7A22ED672D3DF95E77A96E46 /* UIButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E7634E51DE590157C8F535EA1D247B4 /* UIButton+Kingfisher.swift */; }; + 2D9874572CEDB7AACBA158CB64EF379C /* cost_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = A2434F3EB6290F8CE20AB41821143D16 /* cost_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 2DB9E576AE22E204A74411EF598FD0D8 /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = A9770EBDF903A431CE5AB241FCFFA29B /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 2DC44A09A6C9D6DC7D1BDA2DFCF99EE3 /* MJRefreshConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E9633A6F0549DD0FA20124BD54A186F /* MJRefreshConfig.m */; }; + 2DD150D77A9745899543093C3896972D /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = B76508B90B02228B7DEA4C69F78B18D6 /* BehaviorSubject.swift */; }; + 2E13E22E2981ABD137854CB0BF3D8F01 /* Keyframes+combined.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99A13D9C8041EE3BD62071DAE3F0C6B2 /* Keyframes+combined.swift */; }; + 2E2DC0C6F0E4A994820F917CC88B1168 /* Core+Dictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9005A4BA6A695B43606F43DA74AF0ED0 /* Core+Dictionary.swift */; }; + 2EA3AFEE09D681E491F24C9B1A85FF44 /* ObservableConvertibleType+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BE318237005B61F9AF9628B6F039D09 /* ObservableConvertibleType+Signal.swift */; }; + 2EA5C7350AC28ECBF0BF9640F1AE0F96 /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = A2FB51B9742FF46DD5E6F6CC65B93B6B /* SDWebImageCompat.m */; }; + 2EABAE5AB809F505775B13EF046431F1 /* SelectBoxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FB12255CE9417581E8B581894EB9660 /* SelectBoxView.swift */; }; + 2EB965F2E798586AE033A73467469967 /* StrokeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98675E3A1A2936ED5AD80EDCA005B45A /* StrokeRenderer.swift */; }; + 2EE30EFD051670E0930EEC564D982911 /* Producer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F894448A1A6571D3135218466860C95F /* Producer.swift */; }; + 2EEA29F33BBE2927BD5730625105C993 /* histogram_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 68CCF82D67A8D5BF212E5D1E132B0103 /* histogram_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 2F1757EAD479C3E8C7C75561BADB0F1A /* LottieLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBBC4A106EB08D48922BFA7B703838F9 /* LottieLogger.swift */; }; + 2F23C06874D2AAB852A93809AB216A24 /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7CE0D06257484EC85831F397106980B /* BinaryDisposable.swift */; }; + 2F44F439C70D865DE857F8A71E11D548 /* MqttCocoaAsyncSocket-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 08750421AE2FCC141D4D1F8E3C6C6789 /* MqttCocoaAsyncSocket-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 2F594E0CEF6E7B8BDDA677C93ADE5970 /* Entry+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = A06D2EBC68A9A66C6DECE0BA1D733FA3 /* Entry+ZIP64.swift */; }; + 2F6774015407B5B4841C9A34BC009900 /* PathElement.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB42CF3C2FE27263094321A19D8E34CD /* PathElement.swift */; }; + 2FDA0F9A0DBB98A99500F2E0B5B7753C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 300106D253D6B0A83D0FA41EDA408B77 /* PhotoPreviewVideoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD8F7F80F12F551B6BDDBBD6981BC3E1 /* PhotoPreviewVideoView.swift */; }; + 300B7BFD749B06AE3B711426442E41A3 /* YYImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B8AA282E96B073F73D645D38CE1096E /* YYImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30617D7947DF3FBD9154F1CA87D3DBEE /* CocoaMQTTMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F078664F20916DBD98CD43B1695DBAD0 /* CocoaMQTTMessage.swift */; }; + 3072B174CD0EE983BFECE8586173F397 /* YYSpriteSheetImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 600B0109CAD95BF5917C28BF3281115C /* YYSpriteSheetImage.m */; }; + 308AC672301C6E7DB6824993D255E0DA /* OIMMergeElem.h in Headers */ = {isa = PBXBuildFile; fileRef = D43D3D49600F86D5154E1438DC7E9E53 /* OIMMergeElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 30BE83ACB80227A5F67D6A1347B1293A /* YBIBIconManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C04AF582F9D6D4B5C00FBDCDB0C3039 /* YBIBIconManager.m */; }; + 30C51CA989B9666063FE1095581E93DE /* YYImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 378A71B05B4B6E35FEFA06A102708B90 /* YYImage-dummy.m */; }; + 30D6F928FC08B13B5BFEEB154A2089C1 /* IQKeyboardManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBCBAB931CCEE194C1467906C7B7D94C /* IQKeyboardManager.swift */; }; + 30F32C55A2BDA22D805A0B0C0AEBB50F /* Mapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D35101D07B11F5698DC173C735AC6B7 /* Mapper.swift */; }; + 30FD62F4759445BDDE759B1102FEA7A2 /* enc.c in Sources */ = {isa = PBXBuildFile; fileRef = D1A524C5B6ECAE4BAC7424565E81C313 /* enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 3128BD706592ABF336A95E04E8262330 /* muxedit.c in Sources */ = {isa = PBXBuildFile; fileRef = 3419D2C8671536D5EF4FAFBBECE79EE0 /* muxedit.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 314194E9E0C7A9EDAF93EA83122B3C1C /* SGQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = CE2D181860A376B53B945D2F66652716 /* SGQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 31477C3CCE2D60FF4F7BC2C8013669D7 /* Keyframes+timeRemapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 042A695EB5A0C54C275F88586AB33EF3 /* Keyframes+timeRemapping.swift */; }; + 3160A07FF7E8C76646BBFF324589BF9A /* ObservableType+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC8DE6CE3CC887158E8DC8331DFDB39 /* ObservableType+Extensions.swift */; }; + 3164BCCBA9C6BDA00D4E46E1DA4AD5ED /* PhotoAsset+Codable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A180C55B9B74D99B78B2F0EDB46D1C8 /* PhotoAsset+Codable.swift */; }; + 3184604BA228388F115333291336137C /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93D9B635C959143CB4FFDC5AFF2342A0 /* AsSingle.swift */; }; + 31F42206CBE3923A5758B97AD729A7DB /* alphai_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F41F37C01FE78AF3EB2EBE2C0063C55 /* alphai_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 31FB1355B0B598BCE30B2FF61A6B3792 /* CompositionLayersInitializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58FFDDCF04DB129070555E67F7D62F4B /* CompositionLayersInitializer.swift */; }; + 321F87DA34863DC5C977323BAEDB2B55 /* NSObject+MJCoding.m in Sources */ = {isa = PBXBuildFile; fileRef = BD344724CF8CFF05B4EC629141908CFD /* NSObject+MJCoding.m */; }; + 325514A9E0AC13E73854C6257EE434A6 /* RxSwiftExt-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D85D65A785DD11618ACCAF108CFE339 /* RxSwiftExt-dummy.m */; }; + 325CA20B9271F3E008234E1518B79061 /* MJRefresh-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5848253A22D6396B7A068D7D2A0277C9 /* MJRefresh-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3261AA0480C168A6529576CDA9642ABE /* FloatingPointType+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3514A7FBBF4EB30D7EC248635A87A74 /* FloatingPointType+IdentifiableType.swift */; }; 327BA3DDA513422E632D3DA4A8FC60EC /* MJRefresh-MJRefresh.Privacy in Resources */ = {isa = PBXBuildFile; fileRef = 7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */; }; - 32A204B2A7BF8766BCB7E94E244CA6C2 /* MarqueeLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 49109E0282ED87E8EDD6FB47CB18C964 /* MarqueeLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32AC044F812E57DA9C85C6E83D60EA1C /* buffer_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = B84ED04EF6E738BEDF956904DC7E150E /* buffer_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 331451D311170A432A1FAA9AD81AFA19 /* EnumOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41FAE3704616441F385176547E15B85F /* EnumOperators.swift */; }; - 332EB3263B1002A5A0A146CCE70501AD /* IQRootControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1CBC6FE30779E662A20B0F6FB6BF989 /* IQRootControllerConfiguration.swift */; }; - 3345899CAB69BA4C8E09CEE3C7BD8270 /* OIMPictureElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C2073401AAF79A598AB6B0B912877B8 /* OIMPictureElem.m */; }; - 33476FD5E53BCDFDF5EC6882D951B06A /* OIMNotificationElem.h in Headers */ = {isa = PBXBuildFile; fileRef = C961DD0E63F5AF416C1B3514F9AEBF47 /* OIMNotificationElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3349665DDB553E9B414AC41BEA46BCA3 /* ShapeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BA20785663BFF2D9EB5DA399BF39DB2 /* ShapeNode.swift */; }; - 3358462564AA5B1FBBC955BDF8877DB7 /* SGGenerateQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = E1DD7D29BF1FE1A9B3EA3877C3D2A929 /* SGGenerateQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33798D67D14D1204B31A48503769D2E7 /* SDImageFramePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 564EC0EDD2FAFB0AF6925E211B89F1CD /* SDImageFramePool.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 33860EAD6F6E3FB15D909D37C9CC63FE /* Stroke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A237F8AFB1DD864B2E065B762851FB /* Stroke.swift */; }; - 33868191124C9202405A7A4B640C7372 /* libwebp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 49B0BA1B9007316089950248F030BD49 /* libwebp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33A18CB4C8841E664E14BDA0C24B5039 /* filterMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 871E714FD37A86D38B34456ADD948A3D /* filterMap.swift */; }; - 33D4E19DAC45622690570E3E4E106BAF /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B34C0675FA28CE45E9A9E5129638E48 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33D7D43D9779D06D5F55880A00A62E63 /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD65B01FFFE710531CEAB6814557AA61 /* DelaySubscription.swift */; }; - 33F68809FB1FE1590E2414602781160A /* dec_clip_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 72679461AA0F6BDFD187D5631DB82AEB /* dec_clip_tables.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 3418FE0819D95B803BA81F37DD1948FD /* LottieSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EC2C9B5255FD1BD8E427E9A7A199580 /* LottieSwitch.swift */; }; - 3468FD7E83C0A6607F7229DBAB70A135 /* YBIBCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 2724F7D5E46D3CB108BBF81954389D65 /* YBIBCollectionViewLayout.m */; }; - 3474B30C8723FEBC3736A59B7AB046FC /* toSortedArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31E78FA0D84F351E9823CE5E2062575E /* toSortedArray.swift */; }; - 349CA4516F8DCBE57054EF6E8F15D4C8 /* mapTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58EB1FF15EF91274F887D47E933DE7AF /* mapTo.swift */; }; - 34A90FA56CA4751EE718D8FC7B800C52 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B244600AA2104B57BCCCA5F23E2F4613 /* PrivacyInfo.xcprivacy */; }; - 34AC7EE85AECAF484EC811C138A82E6F /* CompatibleAnimationKeypath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C52DF26092158048682358F43565CB5 /* CompatibleAnimationKeypath.swift */; }; - 34C1E55916E3C238EC24EE3CDDC0025E /* SingleValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 630AE44EDCEF6C485BEB0D998AE18947 /* SingleValueProvider.swift */; }; - 34E1EFAD3DDA7672F89B228CB8067F85 /* DeniedAuthorizationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 026F29BAA77629475C91162F66FF4839 /* DeniedAuthorizationView.swift */; }; - 34E4F069384DB75E1AA09E52C0A61D7B /* SGScanCodeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 541168B5F63506CE532597108DD96983 /* SGScanCodeDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34E9D5F556C832BE78D1074553F78F91 /* bit_writer_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = EBC7D79FCFE59C1D4E2B2EEC9415C53B /* bit_writer_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 34EE43FA8D0849C39D6B7A68A7EEDB02 /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D01AEE6FEB31BADC6ABBB964F92BFA6 /* ToJSON.swift */; }; - 3513BC85F4699997C3DBB8A077D5DB12 /* Popover-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 67C09087FD721CE9595DAF45BC6B7889 /* Popover-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3540E178FA1028BA33C5308A5E70B24A /* OIMMessageElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 212097E109C37ABABE45EE6C1CB93074 /* OIMMessageElem.m */; }; - 35585F0F14FF02CC22B4724742344C98 /* Core+Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = D867D1C31B709009EFE974B0553F9D9D /* Core+Bundle.swift */; }; - 355A2A3962A82AE25D219DB774CB6AEE /* UIView+ResignObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78CB2111E31FA7D356C77E38AD4E7B19 /* UIView+ResignObjc.swift */; }; - 356B49A0C32559CCEE631C44CB2B0B40 /* AnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2FB81BBD6BCBE9C6D6A155576A27671 /* AnimationLayer.swift */; }; - 356F7D6C5EB3383BE2B8ECBC58810926 /* Core+UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F26CC0BC63B38EDBC22273E9C0D67DF2 /* Core+UIColor.swift */; }; - 3575A2E218096B1FD9A1B2B0C6DD40D6 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC59F0F7B131E5DEDB3606A093622755 /* Reduce.swift */; }; - 3577F172FA68CBAE47CFEE6FE25C5404 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = C803D3D90266F99C8F0394B468092649 /* ConstraintOffsetTarget.swift */; }; - 35AA2D02723EC5CB583C6CC4B077EDA8 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 5631AFA1B502DB722A84A7D8AEBC9608 /* PrivacyInfo.xcprivacy */; }; - 35E16B7BA80A25B2B4063CC2362EB8B6 /* RxTabBarControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D915E50F6FCDF1F827027D737E68CB8 /* RxTabBarControllerDelegateProxy.swift */; }; - 3610091956D90D4861D5E206BCF37FA2 /* DDAbstractDatabaseLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EF5D80D80065619CED3075AD992270A /* DDAbstractDatabaseLogger.m */; }; - 3636DAB7FF443D6A94EEFF759FD706C4 /* rescaler_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = BBBC010B85BCBA9FA6908DE4D9348839 /* rescaler_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 3667945C95696169C2F3E7EE37188664 /* PreCompLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFD2FEBE902487EB11E1F3B27258FDE6 /* PreCompLayerModel.swift */; }; - 366BD3046AE8E0558AF52F571AD039FA /* upsampling_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D0884D8E461C506BA1299415A08D8E6 /* upsampling_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 3676A648CEE267ABE6886CF97B0327D5 /* AnyEquatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89EF7D735951E4D80CDBC73A687206F8 /* AnyEquatable.swift */; }; - 3683E0632283EDB6B8B0F3E2506704E4 /* YBIBToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = BB3D3CAB8E5BB7D166549F00AB9C0C15 /* YBIBToastView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 369DF6199E86E719191E7B2D4F040B9F /* CALayer+addAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 285EA2B479EE8B45155F473C9D20EED7 /* CALayer+addAnimation.swift */; }; - 36DF23DE9EF12D0C9F3B4DA80D06AB42 /* alpha_processing_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = F05C90425892DDCDF4B66655B97AA849 /* alpha_processing_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 36EDE8F37831FDB474E621284702ED94 /* MoyaProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BC1184B394B0F1891FA39A297FFFEA0 /* MoyaProvider.swift */; }; - 36F5B11E0F51C1CAEC8E3BF3BD1397F7 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F4975EE0DFB3B2FF2DC34F0C3FAD60E /* NSBezierPath+SDRoundedCorners.m */; }; - 372B028224B230942D573C6071980027 /* idec_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 8D2F58F6D75CD6EAC8B4645270447959 /* idec_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 373D6A9E56AA0F29E9366CBF901182BD /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BED3A0B0A00EA2FA5675D1740AB8EBD /* InvocableType.swift */; }; - 373DE1A8B1676910BADF13B1A9CFE712 /* UINavigationController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41249D28A0A1532043F7069D1A9E3DEB /* UINavigationController+Rx.swift */; }; - 378BD5280F6C07B11CF30B253D824972 /* IQKeyboardExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = B86E1E6F43F67612B84DE9E72FB2157C /* IQKeyboardExtended.swift */; }; - 37B890ABDC7DD441E6AA662325D412E6 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = F00857D4A1176AE49F933BBAE966C775 /* MASConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37C01DDF19DA22727830A62998953BBB /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CE5A9E99CE471E9A158B19E7DA75F2C /* SchedulerServices+Emulation.swift */; }; - 37D637B577E1AEE9A86932C97CE11F7E /* YBIBAnimatedTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 02D106F8687416EA77319E7ADE562850 /* YBIBAnimatedTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3834F6B013F16886BE2866A29E65F22C /* YBIBSentinel.h in Headers */ = {isa = PBXBuildFile; fileRef = 73CD422A69C42F923FBDDB22D2266109 /* YBIBSentinel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 38755BDFD20CBF8C82F5380B3FFA9249 /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C029410FACF307A2410FE68E0C0FBB4 /* Sink.swift */; }; - 388BB4079F7D18CB3D7AF0848BC98F08 /* UIView+SDExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AB6CBC4746778086E329DD344D09063 /* UIView+SDExtension.m */; }; - 388E9AB445D19AAC2B88CA28406EE7A3 /* LRUAnimationCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A09E695B709DD7B53EE9791CFE0DA7E /* LRUAnimationCache.swift */; }; - 38C2517BC6611A88A77F119A3753513E /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6641FA3ACADA3576F1D309E21FC9447 /* ToArray.swift */; }; - 38C96772D989E3D1023A2D4FE66545FF /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1643B1405173B32A64A5AB78741EBA0B /* CustomDateFormatTransform.swift */; }; - 391B27BAE013804D48948F0985BA840F /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6737E046AAEEC1377A37635597AD9339 /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3956E7FC11B63EB5599333059EF1FBB5 /* DDLoggerNames.m in Sources */ = {isa = PBXBuildFile; fileRef = 8071246364071191EF7E463371025B98 /* DDLoggerNames.m */; }; - 396607D0F1FBB75736DD27CB92EB9999 /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = D3C3F3D9536425D441065A0DD49296FA /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 397FC8643361169A2EAD49BE467DCC4D /* EditorChartletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD9041B6DF19370EC5F993457993D52D /* EditorChartletView.swift */; }; - 39ADCCB0719C1404E44818F79F665F4F /* NSObject+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22ADD96CD00B989B7126ACA192406A98 /* NSObject+Rx.swift */; }; - 39B33D7873CD89C6A7E96ACD36A1EDFB /* UIScrollView+IQKeyboardManagerExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A728065D0A8D6804B2901F182770F32 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */; }; - 39CD61C38849FB1D75225ECB96384C43 /* IQKeyboardToolbar-IQKeyboardToolbar in Resources */ = {isa = PBXBuildFile; fileRef = A16FD016E18EACCF6B23F219F2E236FE /* IQKeyboardToolbar-IQKeyboardToolbar */; }; - 39D449220194AE1CD884069FBF6F735D /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F579E8E331132963070FBC936F1C2B /* URLSessionConfiguration+Alamofire.swift */; }; - 39FBB955C79378BA3C17AF80374A019F /* IQKeyboardReturnManager+UITextViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7E1ED39AAD946F41815380593F8080E /* IQKeyboardReturnManager+UITextViewDelegate.swift */; }; - 3A0FCD7E6EE386F0B20221A7079577D6 /* EditorStickerTrashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43E499C40D12F0BA44448C3A8FE1BA57 /* EditorStickerTrashView.swift */; }; - 3A13E0541707F58A17D927824A9A8B32 /* AnyValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD27972448441D5FB6107C986BEBBE74 /* AnyValueProvider.swift */; }; - 3A2FCB914F6EADED828FF05F7E9132AE /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 45AEBEE9E3F79E4CDD32A46B927067A9 /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A4AF8E172B30D070ABA2D212B67355A /* IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 989D623AF0CB634DB11052E3FC4DC617 /* IdentifiableType.swift */; }; - 3A4B897B65DE3FAAAC2C0AF9FBCE87E7 /* DateInRegion+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6097CD51385779D9DD1CD30E169A70 /* DateInRegion+Components.swift */; }; - 3A52295413184C31AEA430BE39BFC491 /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 587526430D6035E65DAF5B13CA90B45D /* HistoricalSchedulerTimeConverter.swift */; }; - 3A64F2D6B35DA2E5DF97F1C53B2FF446 /* TextLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86EE28E7DEABA7E24637E97FC9F503A5 /* TextLayerModel.swift */; }; - 3A6B20BEE4F7A5B5835DE5D1E509754E /* IQActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BF72E2AF2147FA1AAC4682FE8CD2024 /* IQActiveConfiguration.swift */; }; - 3A75B3C179F71755659842A0DA8C538B /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = EDB10F862D32D2EB8157A71B23F041C5 /* SDInternalMacros.m */; }; - 3A8BFBBB8C6B72DD0C33BF3589621D91 /* PrecompAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94F7F3E3105E990CC2499FF7816AE311 /* PrecompAsset.swift */; }; - 3A8E2E05E1836E45FFE3021DE5AEDF40 /* UIStepper+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = E66C33D1549606616E2570F9CA08627C /* UIStepper+Rx.swift */; }; - 3A90C72B0F8F9939213C668E668754DB /* UIPickerView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27137F8A01D16088D332E2DBCE90D361 /* UIPickerView+Rx.swift */; }; - 3A9DD9A71347A70E56007D5104BA32BB /* PhotoListCameraCellConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF440B48F12C86D500E4870C7336F8CE /* PhotoListCameraCellConfiguration.swift */; }; - 3AAF427F8890A73EF93A1B309201AF4F /* VideoEditorCropViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57693EF93CD5CEFDC6308D6BDAB5934B /* VideoEditorCropViewCell.swift */; }; - 3AF586464F2E155F19FA21CD13CE86E9 /* KeypathSearchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AC04D79457374349B95B0B732D07A31 /* KeypathSearchable.swift */; }; + 32A204B2A7BF8766BCB7E94E244CA6C2 /* MarqueeLabel-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D2A4FB1654D2C01A0BB8DF98D396CF8 /* MarqueeLabel-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32C22FD7A0748373999BFAC35C3AFC28 /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = A48AE4B983D1A1F6626A2B7F77DFA6B2 /* Switch.swift */; }; + 32E39C6EB2A04EC7B64B5E22567CD4B2 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 81A904CC270F40DAD1A3F3B872317F74 /* PrivacyInfo.xcprivacy */; }; + 32EBC704E71F378249AD902DDA6B9925 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = DA0366DC09C0344E545847265A75E5AF /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 32F42F432E1925E1EE9F1DF10E230B05 /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 24FC9168D387E6F56C45A5E422ED6057 /* cpu.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 331451D311170A432A1FAA9AD81AFA19 /* EnumOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12C03BC1B83CC86160BD1E3A61E1D046 /* EnumOperators.swift */; }; + 332EB3263B1002A5A0A146CCE70501AD /* IQRootControllerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9714A1AD9F2DF6D9204ED18A1C836E6 /* IQRootControllerConfiguration.swift */; }; + 3345899CAB69BA4C8E09CEE3C7BD8270 /* OIMPictureElem.m in Sources */ = {isa = PBXBuildFile; fileRef = BCBA512CDD9A14E3AE8881732D0ECCF6 /* OIMPictureElem.m */; }; + 33476FD5E53BCDFDF5EC6882D951B06A /* OIMNotificationElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B031927313E161861104668E21A8DE /* OIMNotificationElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3349665DDB553E9B414AC41BEA46BCA3 /* ShapeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C1A9571D4A22125DDC26AAC81C21512 /* ShapeNode.swift */; }; + 3358462564AA5B1FBBC955BDF8877DB7 /* SGGenerateQRCode.h in Headers */ = {isa = PBXBuildFile; fileRef = 54CE1D0923681693A97900F260F5D57A /* SGGenerateQRCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 33860EAD6F6E3FB15D909D37C9CC63FE /* Stroke.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB272087ABE824979CB58F3810B9CDB8 /* Stroke.swift */; }; + 33A18CB4C8841E664E14BDA0C24B5039 /* filterMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BBE0E370C0970A23FE497F665D3E7BB /* filterMap.swift */; }; + 33EDF0B768037D79D2D812243EAEB5C9 /* upsampling_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = CB226B090B92DCBB1D0C6EDDAC487C5D /* upsampling_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 33FF3CD3E08555DFBD99128351618032 /* common_sse41.h in Headers */ = {isa = PBXBuildFile; fileRef = E9267C55D20111C7DA6661FF692F1FCA /* common_sse41.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3418FE0819D95B803BA81F37DD1948FD /* LottieSwitch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F193B62510CE37DFCF289B85FBBE78F /* LottieSwitch.swift */; }; + 3468FD7E83C0A6607F7229DBAB70A135 /* YBIBCollectionViewLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A36550B8B2CBBB52150C46F5E083568 /* YBIBCollectionViewLayout.m */; }; + 3474B30C8723FEBC3736A59B7AB046FC /* toSortedArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38F764035CA9E883524E86CEB7BF6FF7 /* toSortedArray.swift */; }; + 349CA4516F8DCBE57054EF6E8F15D4C8 /* mapTo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 976B64416E3016008D42A1E155509FD3 /* mapTo.swift */; }; + 34AC7EE85AECAF484EC811C138A82E6F /* CompatibleAnimationKeypath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E811FDD3EDFA0440713C2597DF1941A /* CompatibleAnimationKeypath.swift */; }; + 34C1E55916E3C238EC24EE3CDDC0025E /* SingleValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 839BCE2FB3C9925AE8EBE4D4E23D267B /* SingleValueProvider.swift */; }; + 34E1EFAD3DDA7672F89B228CB8067F85 /* DeniedAuthorizationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB247929A37EFE26C6A805DEA433B91 /* DeniedAuthorizationView.swift */; }; + 34E4F069384DB75E1AA09E52C0A61D7B /* SGScanCodeDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 28BE02DA192D2F9168548C9F3E648036 /* SGScanCodeDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 34EE43FA8D0849C39D6B7A68A7EEDB02 /* ToJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = E36C51FA8863274AB0025855E64ACC3D /* ToJSON.swift */; }; + 3513BC85F4699997C3DBB8A077D5DB12 /* Popover-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 12043476FB1F109D8DD030BF0DAF525F /* Popover-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3540E178FA1028BA33C5308A5E70B24A /* OIMMessageElem.m in Sources */ = {isa = PBXBuildFile; fileRef = C0A885057A11B51887D16E84D82AF7A6 /* OIMMessageElem.m */; }; + 35585F0F14FF02CC22B4724742344C98 /* Core+Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC85375D7D20F08BF74644A806E2502A /* Core+Bundle.swift */; }; + 355A2A3962A82AE25D219DB774CB6AEE /* UIView+ResignObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 16B62285E67238FCDFC2EE5E85A20C18 /* UIView+ResignObjc.swift */; }; + 356B49A0C32559CCEE631C44CB2B0B40 /* AnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06400FEC0E7815877B9FFAD947B38F12 /* AnimationLayer.swift */; }; + 356F7D6C5EB3383BE2B8ECBC58810926 /* Core+UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E4D9D32F645C0F77FE2B2594942BD5A /* Core+UIColor.swift */; }; + 3577F172FA68CBAE47CFEE6FE25C5404 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A3AB5C61F217707706D0EE32CFEA319 /* ConstraintOffsetTarget.swift */; }; + 35A44C895BD9F20049CEA78E270DF27E /* Sink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846E1E84BB431FCF9858146EC42AB802 /* Sink.swift */; }; + 35D4EE5441CE7FFC75C0138C0E6B5E81 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28B010A2146BDC61697A76663AF9803C /* IQTitleBarButtonItem.swift */; }; + 35E16B7BA80A25B2B4063CC2362EB8B6 /* RxTabBarControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C258350AE25DA6A17D93C6E9D2CF991C /* RxTabBarControllerDelegateProxy.swift */; }; + 3610091956D90D4861D5E206BCF37FA2 /* DDAbstractDatabaseLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = F38473A0318DD5468977B8B5695A90DD /* DDAbstractDatabaseLogger.m */; }; + 3642914BB58CFD81FBBF88BDA48A0170 /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C70EC81EB5E7986D89207A07B93295B9 /* HistoricalScheduler.swift */; }; + 366784118C275CC1C4321EA25C25E756 /* lossless_enc_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = E62BB35812EB4C99463DE18C1B9EB0BD /* lossless_enc_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 3667945C95696169C2F3E7EE37188664 /* PreCompLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 840A962BED1D9BADAEDE3E7E183A317D /* PreCompLayerModel.swift */; }; + 3676A648CEE267ABE6886CF97B0327D5 /* AnyEquatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9945C30FA08BD9EC319748ED2D43517F /* AnyEquatable.swift */; }; + 36771549218157A81F13322EF18824E1 /* format_constants.h in Headers */ = {isa = PBXBuildFile; fileRef = 8AA70B6D54C3434DE9C65E169C333587 /* format_constants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3683E0632283EDB6B8B0F3E2506704E4 /* YBIBToastView.h in Headers */ = {isa = PBXBuildFile; fileRef = EDB059CE88379E4FEA3A790FFBAB04A8 /* YBIBToastView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 369320288CC80D26C93803B808FCB61C /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DF8F1CDC802D0250733D25924A17835 /* SDImageTransformer.m */; }; + 369DF6199E86E719191E7B2D4F040B9F /* CALayer+addAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C419E6E04DBFE2E3EFEB4AD94165FA9 /* CALayer+addAnimation.swift */; }; + 36CDE98915D684098B3B7013BAA91590 /* dec_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = DA3E6508700E6F2FE2BF9BEBCE2BE979 /* dec_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 36EDE8F37831FDB474E621284702ED94 /* MoyaProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3F8640A2B68814B6E3049FE1466EB3 /* MoyaProvider.swift */; }; + 36EE04E8AA35610C63F5EF4B37C78E82 /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3841269555E945A5F05B6B656275018E /* Amb.swift */; }; + 37204DA94E4713CB9F6C97D3C684BEB3 /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59E77574A6D6A8484D6E798D4473D69B /* DisposeBase.swift */; }; + 37208D2FEBA0C1A0A2CFF4918326F4F9 /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0592B4FDA541D739DA37618ECD3F548A /* SDImageAPNGCoder.m */; }; + 373DE1A8B1676910BADF13B1A9CFE712 /* UINavigationController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68DD308DBBCA95916FA607C00564308 /* UINavigationController+Rx.swift */; }; + 377C075A77ADE633702916D401435B7C /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A11B776E936D8D46C6A528A1CE11FAC3 /* Utils.swift */; }; + 377DED16F7843193371F3FAAC29D5346 /* IQKeyboardToolbarConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 865A4BFB2CB8DB37C3E1407B2C8BB4AC /* IQKeyboardToolbarConstants.swift */; }; + 378BD5280F6C07B11CF30B253D824972 /* IQKeyboardExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F1699EBCB271D06621D975F6663A0E /* IQKeyboardExtended.swift */; }; + 37B890ABDC7DD441E6AA662325D412E6 /* MASConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EA38E1760C227E8492F6B7419EBD670 /* MASConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 37D637B577E1AEE9A86932C97CE11F7E /* YBIBAnimatedTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = D50376BA225C0801D90EFEB172B1D6C4 /* YBIBAnimatedTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3812BEA7F8A1D931C4C8BA0B782A92A8 /* IQKeyboardToolbar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F3484843917C882FECBCCF7474F59F /* IQKeyboardToolbar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3834F6B013F16886BE2866A29E65F22C /* YBIBSentinel.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FCAFE810B996502DE8E815BB6C1AC95 /* YBIBSentinel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 388BB4079F7D18CB3D7AF0848BC98F08 /* UIView+SDExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = AD1D86B254CE47711A06BBB8609D5C1C /* UIView+SDExtension.m */; }; + 388E9AB445D19AAC2B88CA28406EE7A3 /* LRUAnimationCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = F71C401A793A925B16B2794B641577F0 /* LRUAnimationCache.swift */; }; + 38C96772D989E3D1023A2D4FE66545FF /* CustomDateFormatTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B8DD93F892EB3A76FC4B0CC65600DED /* CustomDateFormatTransform.swift */; }; + 3956E7FC11B63EB5599333059EF1FBB5 /* DDLoggerNames.m in Sources */ = {isa = PBXBuildFile; fileRef = DF0D59AB65BAC48A5EE451E2781AF508 /* DDLoggerNames.m */; }; + 397FC8643361169A2EAD49BE467DCC4D /* EditorChartletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C7C1820ED663FD4EDC639404C09D55 /* EditorChartletView.swift */; }; + 39ADCCB0719C1404E44818F79F665F4F /* NSObject+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB5E60ABB3231746217C7BE67D898E0 /* NSObject+Rx.swift */; }; + 39B33D7873CD89C6A7E96ACD36A1EDFB /* UIScrollView+IQKeyboardManagerExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 139EF672FB2BD571A5A740D822E68D86 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */; }; + 39B43DD4DA5782166B4E6273C183E55A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 11BA9E364F4512BB8B20BE4DE4BD9140 /* PrivacyInfo.xcprivacy */; }; + 39D449220194AE1CD884069FBF6F735D /* URLSessionConfiguration+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EFC0DEF7F6680D04A5987FBBF719161 /* URLSessionConfiguration+Alamofire.swift */; }; + 3A0FCD7E6EE386F0B20221A7079577D6 /* EditorStickerTrashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4BC4E9795B94391814F9D9D11446D5A /* EditorStickerTrashView.swift */; }; + 3A13E0541707F58A17D927824A9A8B32 /* AnyValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF151D352C3F940ACCE3650BDFC0D4D4 /* AnyValueProvider.swift */; }; + 3A2FCB914F6EADED828FF05F7E9132AE /* UIView+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = BD5A142B20B08F85DF4E255309581669 /* UIView+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A3F68777F9F40041E582D489B12AA57 /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 68D7AF3B74828F8C2BAC6CC02A1E9A83 /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3A4AF8E172B30D070ABA2D212B67355A /* IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48D3D3955FABE41F8DDF194B898A86F8 /* IdentifiableType.swift */; }; + 3A4B897B65DE3FAAAC2C0AF9FBCE87E7 /* DateInRegion+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = B773BB9FAC093187BA138848D154492E /* DateInRegion+Components.swift */; }; + 3A5CFD6DFC22343E29E2ABECFC1C3701 /* quant_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 0ED077EB75CE413B9DB3BDD2E67A5D33 /* quant_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 3A64F2D6B35DA2E5DF97F1C53B2FF446 /* TextLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C214635901487ED70CD287E8BC4AEC74 /* TextLayerModel.swift */; }; + 3A6B20BEE4F7A5B5835DE5D1E509754E /* IQActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5C3483F4E8C5E0015004EAF99566DAE /* IQActiveConfiguration.swift */; }; + 3A8BFBBB8C6B72DD0C33BF3589621D91 /* PrecompAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 213FF271A8C1EF4AFA83B16C94A7CD5E /* PrecompAsset.swift */; }; + 3A8E2E05E1836E45FFE3021DE5AEDF40 /* UIStepper+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83A7C22E3795619790A213E6D8DC23DB /* UIStepper+Rx.swift */; }; + 3A90C72B0F8F9939213C668E668754DB /* UIPickerView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6448C33FD616D663955373268AD9800D /* UIPickerView+Rx.swift */; }; + 3A9DD9A71347A70E56007D5104BA32BB /* PhotoListCameraCellConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F1B8BD2825588EB74675386BF2CB44 /* PhotoListCameraCellConfiguration.swift */; }; + 3AAF427F8890A73EF93A1B309201AF4F /* VideoEditorCropViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B97AE06C4122280D4E7697B526A08475 /* VideoEditorCropViewCell.swift */; }; + 3AB4C6AB558F8622F11B8D3F24909492 /* UIImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 78A70A14941070D7C9E513ECE7ECCF02 /* UIImageView+WebCache.m */; }; + 3ABD92A85AD10EF57D39FF5A6D2764B4 /* filters.c in Sources */ = {isa = PBXBuildFile; fileRef = DF8B4E43D6A80D3F3D3212D2C78AB121 /* filters.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 3AF22D14F94A221F4364191126E08D30 /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = E0018F3662070E563761A8EF917D19F4 /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3AF586464F2E155F19FA21CD13CE86E9 /* KeypathSearchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6972343F664C52CB3BBB9F28D004156A /* KeypathSearchable.swift */; }; 3B0FF40DF892BD293CB1F38A527279F4 /* CocoaLumberjack-CocoaLumberjackPrivacy in Resources */ = {isa = PBXBuildFile; fileRef = 519AF98C92B517DD023896CD077EBFD4 /* CocoaLumberjack-CocoaLumberjackPrivacy */; }; - 3B16CD40D6856ECADAE282BFED982595 /* PickerBottomViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62AA96A19742574F4A188E5B86334BA6 /* PickerBottomViewConfiguration.swift */; }; - 3B45281BBD9C7D268CE36BC6684CE690 /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DB2942177243632BB63FE27659B24D9 /* Disposables.swift */; }; - 3BA7EA7CD07F07FFA5792AF93A98B981 /* EpoxyModelStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C59EA8496E114A956C1B762EB73B8A /* EpoxyModelStorage.swift */; }; - 3BA911ABFACEB592815A720C60B48C53 /* PhotoAsset+URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5F3B932CFBC76ABF24A9176D190C4B5 /* PhotoAsset+URL.swift */; }; - 3BCAE7843A2516EBA64768CC0CD79988 /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45DECE1C164F713D09FCC8D39EE8815F /* ParameterEncoder.swift */; }; - 3BE0AF07013E897E60C05588D232AD74 /* Formatter+Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65EEC6191682ABA20B8A0411040B8329 /* Formatter+Protocols.swift */; }; - 3BFCE80D67EC884DB79E823496585DE6 /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E3D74F7DD766B0FCCC2830BEE031A12 /* Cancelable.swift */; }; - 3C0A41819F84BC2C7B8BB720B11299F7 /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F878A7EA007A0B25D711F68CEC2F467 /* NSButton+WebCache.m */; }; - 3C1D4FB9E504C5E37213A06D1A0E8554 /* UICollectionView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4C25CF77476705A8727ED57006FDCA2 /* UICollectionView+Rx.swift */; }; - 3C2058840E42D08B30D081187228E79B /* Date+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 393D78DFF9D51838A2054D5FB8A454BE /* Date+Create.swift */; }; - 3C8DAC2429DAACE7EF441415C7C7B717 /* VideoEditorMusic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 173B97065E201D29718EA0986BBECA8C /* VideoEditorMusic.swift */; }; - 3CA7EFA98EF3857A8C31A29776E6C55F /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = BBCDF59E6D69248934B4BC8F30930BBC /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CA948576898BEE941D30116D80D9395 /* MaskCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FCBBFB94C92AAF65512098808136293 /* MaskCompositionLayer.swift */; }; - 3CBACCA82BA8E1759650E3B16B528644 /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 580691100EB70A5ACF290F17FF4D84F6 /* PrimitiveSequence.swift */; }; - 3CCE07EC3D0DC9B618367ACA004958BC /* rescaler_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 63D7A5446C347A4B7702583B88BBD745 /* rescaler_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 3CE8DC253F3048595F30A3C64FA9543A /* Picker+PhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2CF79AC36312C82B7879494F47F301 /* Picker+PhotoManager.swift */; }; - 3CEE544E244F623CEA38EF75183BC93A /* NodeProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846B243885678469AE5CDB8168133AEA /* NodeProperty.swift */; }; - 3CEE5E31CF080561F8A0089BBEABB799 /* PublishSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DA7C83A39038CA118B3CB12DA8280B4 /* PublishSubject.swift */; }; - 3CF9247B7112973208E98C5B8A3EFD08 /* ImageDrawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB58640348852BF733D2F0BD5379DDE5 /* ImageDrawing.swift */; }; - 3D1DA6956A2BB1FAD53891B484575978 /* PathNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896165C77437B3E3CA729B4CF267209E /* PathNode.swift */; }; - 3D250F9BEE59C2068C1A82261A3F5BFD /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D21B5AC77BB1F5C1839961C7C149A4F /* SDImageCodersManager.m */; }; - 3D3B646B4988314275B40E97BEB16C7F /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ED33FEB3529F8C9B342C7C2A097E8A8 /* ConstraintLayoutGuideDSL.swift */; }; - 3D47BB7B12540180D7548830017B873D /* SharedSequence+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006D228E2E6F8BAA07DB7CE17AB8A953 /* SharedSequence+Concurrency.swift */; }; - 3D9E99F17F687A6BBAF6BCBC33C74213 /* YBImageBrowserDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A2CE242AF1F10BE3EF9A73779447424E /* YBImageBrowserDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3DD607D8EE7367C54BF5D9252D1F7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 3E283486A950267772D597343238DC75 /* IQKeyboardToolbarPlaceholderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC0B5B97AEDE09AD78D399CF70F6468F /* IQKeyboardToolbarPlaceholderConfiguration.swift */; }; - 3E3DE0C3F11D105F010D3903964B8DC0 /* picture_csp_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = D00CD7B0453036235F53A50214D4ED2D /* picture_csp_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 3E715D5BADDEACEEF30D6A4CA82CDA9B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 3E9B7829091DB08299A28473E42AAC60 /* YBIBImageLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 2324FAB2BCAFFED67E845E6DD9A96D61 /* YBIBImageLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3E9CB435642EBD721648B430DD0E5A51 /* UnitBezier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E5DBFAF8111481E00D7B8906879F31 /* UnitBezier.swift */; }; - 3EC7C17C01B39C6915B3939EDACEA8F8 /* token_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = D872B09828CDE9FED532089388FD1706 /* token_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 3EE9B9682282E58E0A840A84AB68748A /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 40FD25DC1921B871C7F788075D01E4BD /* RxSwift-dummy.m */; }; - 3EF94128EE7E7397C5967A23C565ABD6 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EA628EB8F76497538FA2290CB38448E /* UIImageView+HighlightedWebCache.m */; }; - 3F418D0580A3DCBB2387B300F3E441C0 /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = D68AE9C63479784FDA72DE0494BF25A9 /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F57DD6E2D66DC1CF834CB76F7FAB980 /* EditorStickerItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6FF27B4385AF3373CEC3201BDC261F2 /* EditorStickerItemView.swift */; }; - 3F749E95FFA3640649B8252D9B2CFC10 /* KFImageProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CA4413BD540BFE68830E04D0B5F80B6 /* KFImageProtocol.swift */; }; - 3FBA98216749EFB55B3D7FFEFE2681B2 /* OIMReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 6777B5B9C83F2B2289CF20ACC0542106 /* OIMReachability.m */; }; - 3FCA734C50CA0AE6B74173F07437A885 /* Changeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825A9E0CAE8058BD30562436EABB04A3 /* Changeset.swift */; }; - 400A9256A6CFE77C0378869D44825DAD /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = B790DFF0E902BF9AE4692A51D0DFC77D /* Single.swift */; }; - 40190BB6FD6FA51901C19C1BF4DBD5A6 /* UIViewControllerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FD0E6009B44B34D4CA91F002AD958 /* UIViewControllerType.swift */; }; - 402FA8B04D2CEFBD67DDDD7768AC4EB1 /* PublishRelay+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F6DF23FC61D59800559E8381531BC1 /* PublishRelay+Signal.swift */; }; - 407FEEB6A5DA7B4EF077DAE20DE114A9 /* PhotoPickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3272B858A42201B36637AFF8EAF9B45 /* PhotoPickerController.swift */; }; - 409D987DB67CFB48AA6311402BE0D30D /* IntegerType+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A9B8EECAC572CE3407A8026D6DA569 /* IntegerType+IdentifiableType.swift */; }; - 40AC034D9E5CD7A5BA0BFB394D59D47E /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 680A5B1FAD29D5052E4E207406B38187 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40BB4A23AD4A18E81678F58EAA90EB85 /* UIScrollView+IQKeyboardManagerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1D91FC1AD6D99D86E78F301E3C0948 /* UIScrollView+IQKeyboardManagerExtension.swift */; }; - 40C349CDD3EC5451B78A19F15951D94B /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = E66DA86ED33D4956EA0F327875149B12 /* Lock.swift */; }; - 414940B9A0191884E8BBCA71D0E738B0 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 10EE3A5EAF25A1133FE1366F3E35BD6F /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4168F11F01FBC79CAC2E7452E0E90BBC /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CC8BB6787C7BA9EA081B229A0B0AB07 /* Bag.swift */; }; - 4179AB2B4A01BF417368F2BBADAAB744 /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD1690BEAF90622CE6B9A176205DB662 /* VirtualTimeConverterType.swift */; }; - 417F20E4B575F95AA4B991D2149C898E /* lossless_enc_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 774303A6EF1A2EAA26EEB43E1E3F8342 /* lossless_enc_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 4184983EA0EC59DB2518B936E2CA3C10 /* ObservableConvertibleType+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 896804512E5A54D3F12A3A1AE837AD8B /* ObservableConvertibleType+SharedSequence.swift */; }; - 4196A92234E9891D925A38B979D302E2 /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE5ABD4016BF6AACDBB92D0B961EFB06 /* ScheduledDisposable.swift */; }; - 420ADE5F222F9DB15F15F59991EEFDC1 /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC0A20DD2D47C97E991C418B88BE2C5 /* CacheSerializer.swift */; }; - 420C49E6734283B87E7D206694344112 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 4213F90CA64B4BCAD1CFFB1466A6C2B0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 426C1CEDF3D8317CBC0353913E92BA2E /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82431D0B15FED817380B6ECAC0135BCC /* Archive+MemoryFile.swift */; }; - 426DF2A1F33269F713D3949662213765 /* SDAssociatedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6C858EAA13A54CA0AA44CC1CE1B01A /* SDAssociatedObject.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4294EE557F13FE2EF5957288BDDFE9C9 /* EditorImageResizerControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E377318D40E300ABE825A4367FCBD80 /* EditorImageResizerControlView.swift */; }; - 42C5AE0870E511B811C9B4DDE6899B66 /* dec_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = B379B52189FCFD6923CABBB988EE366F /* dec_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 42F5E58DA58FC66B2E6048976760F1B4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3C0C914066C13DD1C227163AE269AE08 /* PrivacyInfo.xcprivacy */; }; - 42F6A891188100B2EAC2DD5FC0CCBB50 /* Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = 812C339FF35298294B26DF3F2FC34F31 /* Group.swift */; }; - 43192D92EC7DA0AEE6330B1931314D59 /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E059300BBA1B1C6E282AABF76CB9A425 /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43585D0A88187F24335F2F72137C28A0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 43A27A7590AB8B341E0106298FF45CC6 /* KeychainWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF0025CF7C17D6A5F84D9489FE650FBA /* KeychainWrapper.swift */; }; - 43AC0C09E1209CBE32C28B827B21EB69 /* palette.c in Sources */ = {isa = PBXBuildFile; fileRef = B977BF3D227A0AC28B05CD102057BCC1 /* palette.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 43DE8C31D6AC6DF88E03EF5C2F9AB778 /* OIMSearchResultInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DD5014CBC7EBE462FEFF1A0895E2A0D /* OIMSearchResultInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 442F3EF780ACE70BAF124C9E3E5E8E15 /* ImageDataProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB7A47E1684EE076EE4D20C87EA82A15 /* ImageDataProcessor.swift */; }; - 442F468E261A1106C291BF52BDBF9DB7 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D2727537199FB03475AF85FAF421215 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 44E12060DC6F91B02411D6A00858CA35 /* LayerDebugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 659C2CC0C7E0DE1574B6730492D6AD01 /* LayerDebugging.swift */; }; - 44FA91ABEA149BDDF9A6FC5AE94774F3 /* TagListView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B4B1CC87B374C42556BACEDB70E5FEFA /* TagListView-dummy.m */; }; - 4518B315DD773DC7EBA8BD3EDE4E2B44 /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = D86878EE3183A9473ECB5A2110815050 /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 452C940762F65B125C216F73B369F583 /* MJRefreshStateTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 3AED09C9DE5A12779617977F55045734 /* MJRefreshStateTrailer.m */; }; - 4533898C4946124EA1F111F1835EC6BE /* OIMVideoElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1969DDA8CB584F16A88D1B0AB032B1 /* OIMVideoElem.m */; }; - 453437AE32236787CCBCDB84336E4A93 /* YBIBVideoActionBar.h in Headers */ = {isa = PBXBuildFile; fileRef = E1BCDBFBE4B6AE506F7500D541CCA4B8 /* YBIBVideoActionBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4552112D19F0C7551BF31425FC8D1EC7 /* ControlEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57ECE45D936904EF5023F94ACECA8520 /* ControlEvent.swift */; }; - 455F481C635ED958C685DD70C2E9AA86 /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37835981F866845A76C1CFB6F3D10614 /* Archive+Reading.swift */; }; - 4571A0EA37DC84F39E3830D38A1531AB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 457561605827D2143B4C09C6D6974542 /* BehaviorRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = A89C8E12857A90B1C389AB823B07BD56 /* BehaviorRelay.swift */; }; - 45A339515879815775B83A75319AB77B /* SDImageAPNGCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 639CF52A40302ABAD0394A3F45CD9342 /* SDImageAPNGCoder.m */; }; - 45AE3D9DCD60E97EFAACDC56F430C9A3 /* TimeInterval+Formatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52DBEA1CC4EF7DC089E199B3B942A583 /* TimeInterval+Formatter.swift */; }; - 45E1583D7EF53489B82C4CA2AD1AD0CF /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = DBD2F1627A06A8B9964D885414ACF5C5 /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4610A18A58F46FF1F7500A6BF7741023 /* SDImageCoderHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = DC1657AFEF441E5B1C0C549DEC563130 /* SDImageCoderHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 462FA8E8C7677BC1691013F1733E4DA1 /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = A852BD96FBC53D4DB881E0209211A72C /* NSDecimalNumberTransform.swift */; }; - 4638347B66B53464CBB12F41BE228CAD /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = FB1A866C2F8021DBDD12F2DE5D772DF4 /* PrivacyInfo.xcprivacy */; }; - 466F34329180AB2DF5EFF9BCB5B918FE /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B06A8830BD9CA33C77A2D4E10375DDC /* Errors.swift */; }; - 46C56C35747EB93ED186EB0A4614BB71 /* PhotoAsset+Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F65A5161CB9361350076FDB1F6C69D5 /* PhotoAsset+Request.swift */; }; - 46DD69BCF3B370BF6BBBBCF400D9DD3F /* AnimatorNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29501204E1391BC59AB7AF310834F053 /* AnimatorNode.swift */; }; - 4708505041F162DB894B876B79857794 /* Editor+PhotoTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29D2B882480874F42D53FD7B196E67AC /* Editor+PhotoTools.swift */; }; - 4730296E49F16E17769686F7831AA0EB /* ofType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42C932923F54BF07D5682A760F4539BF /* ofType.swift */; }; - 47443F09C6EBFFF6143EA8B4967F865F /* UIViewController+TopMostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89D901F96E665E5495CE0A5C598E200 /* UIViewController+TopMostViewController.swift */; }; - 475B4F3E71C293065AAFDB1888696CF6 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = EC5B534FF1A78D5C2AC189C51939C944 /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 478BCD3392E5988621AE61164403A89F /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = EB7396B87B6C023F0EC483AD518CC57D /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 478D40A254B29DC1408D37D3D6051DF7 /* SwiftKeychainWrapper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AC83235E9EDBD10A36F3E1F871D63BF3 /* SwiftKeychainWrapper-dummy.m */; }; - 47C9A000C20E04EC69BFEEF3C6AC6256 /* IQKeyboardAppearanceManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = A23D984530015E18E2F4B38BB459C1FD /* IQKeyboardAppearanceManager+Internal.swift */; }; - 47FBA86C15EC8060331926C9A8D54BB1 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 76F3D82220A6BE6531EBF65472D2F31B /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47FBCA188545B898AB5EEC31E3E5E680 /* YBIBIconManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BF71EAF82417B414C95B361533EE14D /* YBIBIconManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4830383EDD889CDDDC68FFC53004F690 /* Throttle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9211F2F8ED853FD416D5AE344C4B2BA /* Throttle.swift */; }; - 48613A776228D14C2933B89CBE229570 /* EditorToolViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 483A34A8F177C29CC7FBA298C2881921 /* EditorToolViewCell.swift */; }; - 486CDF230E2A556983838450D0EC5C75 /* KeyframeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9DE577BCD3B1980C66068F5BBF9C1DA /* KeyframeExtensions.swift */; }; - 48D3C099349231D4D0122D8E51468A19 /* Date+Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12A7038866A941BC4F3263821D30DE6D /* Date+Math.swift */; }; - 48EF9CCCC09C2E3B18C2F501CEBD51CE /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73BD189B4E00DFEAEDCFD2ED648BD5A6 /* ObserverType.swift */; }; - 490664A35E3AA79D57C33414E1B19E66 /* DDOSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A63CABC0DE1372702B329D3C31A8F207 /* DDOSLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 49197254BF19DFC61F1B0B0D870092F2 /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91FDF1CAA6188BB76D061C1A1A292B80 /* VirtualTimeScheduler.swift */; }; - 492E53D98F2FB5F2EEF734D1D672BC08 /* TimePeriodProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B02944BAFEBFE6942DBA3EA87B8E5AF /* TimePeriodProtocol.swift */; }; - 4938511D8412EFA06AFCB9D8DD0F4F77 /* YBIBCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E9B98311325CDF25036C3281CDBCA4D /* YBIBCollectionViewLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 49445CE967F63922E2048455DCE72758 /* YBIBInteractionProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = B2AFEC94AC3BE895818CC20EF1694D57 /* YBIBInteractionProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 495788561F6ADE88310B49BDB3A049C8 /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 36203684131055DB499F60D39CE2F9CA /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4990936139BF46A3888CBF58360A7251 /* UIView+SDExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = EA293B714E3EFFF2B4E110D6741A5097 /* UIView+SDExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A1C800E8FC186756C783A3AF0CC2144 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = AA79DD3CDCB73818B02AC1D089A6D543 /* SDWebImageDownloaderOperation.m */; }; - 4A240539859DE81874149E2DAB8852EF /* YBIBUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = D7A6B09B1EB0F21A79A335F239769653 /* YBIBUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4A48CC2202F5719ADA9F539879538771 /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1C36DF3BE0882BE0A7E5CD447CBEF2B /* Zip+arity.swift */; }; - 4A8E5376A0FA9D3DBD7F1E452F1BE38B /* EditorStickerTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27CFFE88BED57C1FE5BBB3011F19DBF3 /* EditorStickerTextView.swift */; }; - 4A968EBD70F69793C28AD47645AA124F /* DropShadowNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6746F5634973F191E0B1F6461DB1945D /* DropShadowNode.swift */; }; - 4AB3FD4438152538ED29BFA7B341B02F /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 046756EDF821762DDB9FCB12B7D5EF28 /* DateFormatterTransform.swift */; }; - 4AC9B005EF04B376E1E8612AA94B0BD7 /* Picker+UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A687625895E5B7535DC57C8C7718D36 /* Picker+UIViewController.swift */; }; - 4AEB94C02388DC97E65AEAF58412F14B /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = E90211449D1194D31D1BE906BFB6FEBB /* PrivacyInfo.xcprivacy */; }; - 4B0B017D5B3951B641C1336A8515838F /* RxSwiftExt-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 62851F93EAD70B5DAEBEAE1D63184C5A /* RxSwiftExt-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4B1290DE38BEE1418F52E914EB28389F /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D3E95B767FD6876A4F79F0E3E0A61F4 /* Merge.swift */; }; - 4B3687C8AB50D80335544D2338C54D74 /* Picker+PhotoTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50B45299DA66A11F777502AF15634A23 /* Picker+PhotoTools.swift */; }; - 4B7CDFB801A015F02E417F172C231CE9 /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EF97943C0E85B351106FE78D20CD5F9 /* Catch.swift */; }; - 4B802114AD90D83829297937C5939C91 /* SGScanView.m in Sources */ = {isa = PBXBuildFile; fileRef = 606D6DE0357D8862B257CC628D6256A6 /* SGScanView.m */; }; - 4B9FC9B0004EB197325C1A6D67C9FA28 /* GroupNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40F5AA4F27B5CB9A27F0ACE39DCE988 /* GroupNode.swift */; }; - 4BBC8BF43CF7B6DB8BECF2B367BB751E /* tree_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 583EBFC93BECC151571D0013BD13AE47 /* tree_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 4BFEF1EA0FD8911E9EF55A4484F7F1E6 /* KF.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1923C5F56BFC83403AE09CB6E7168D18 /* KF.swift */; }; - 4C10C2C40993364E838ABE82E0301880 /* ShapeCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2509D403C834A34D7305D4C90158B37 /* ShapeCompositionLayer.swift */; }; - 4C1D69C1BF682CA3960720F66538C07A /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 08E79F539A51EF5624368459D580FDA3 /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C59782D5A1EDFE15AB92763993FD942 /* YYSpriteSheetImage.m in Sources */ = {isa = PBXBuildFile; fileRef = BB7467BE133454D87B61A8895816C0A5 /* YYSpriteSheetImage.m */; }; - 4C76A7083CB882DBA6D7AB708AF8A300 /* SendMessageCallbackProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 155E20CA6BEFC121FE0CABBBC97155F2 /* SendMessageCallbackProxy.m */; }; - 4C8406FCC6BC4D4007C31B4805E414DD /* NavigatorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF16DAEEB6F7357BF3520DDEBB204C5 /* NavigatorDelegate.swift */; }; - 4CFE1C0BF7FD332B810E42D2DA299F5F /* RxScrollViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FD460C65311A9B6AD426570D30A2EDE /* RxScrollViewDelegateProxy.swift */; }; - 4D08C586CB9B30E68361DECB0A708AE6 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEBAAA80E335D6590A9D194325FBA00F /* Archive+BackingConfiguration.swift */; }; - 4D81FCC2BA602A7BD07F22F1584B8F26 /* AssetManager+AssetCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87C0F85799A80C00E166826442DB6D27 /* AssetManager+AssetCollection.swift */; }; - 4D9E593DECA015D410984C771CCFDD12 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 57F2F6105FAEB977A72B69CDA9E35CEF /* Alamofire-dummy.m */; }; - 4DA27FD55659157AB453E2F3CA143AE1 /* SDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = D42BD13DE088E55D9440C64037EC2796 /* SDCallbackQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DA8C358A666CA3352780CBB1D351A48 /* UISearchBar+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2596C6DAC2A8B615E67D865765BA5EB /* UISearchBar+Rx.swift */; }; - 4DCA75BFE1558CE59DFC56607E49B3D2 /* MJRefreshConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A5CF121F3B617D5C4A09D9BDD4D5011 /* MJRefreshConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DEB12CB0D7D8F6AAA5C645E6C6C3284 /* AssetManager+Asset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FA7A535E34304FEB795FCB634375C02 /* AssetManager+Asset.swift */; }; - 4E19785ECA3BF1CD264269D5DACD9B87 /* SelectBoxConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8806095ACB64222B262665284764BEA /* SelectBoxConfiguration.swift */; }; - 4E501359489F2069549B20BD94BFA61C /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2156C5852C3ECAFFA155D714B6C5139 /* Do.swift */; }; - 4EC2962339DCDEAA3554795F8737A175 /* YBIBToolViewHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D1B3B65DA5FD5A5576321B0DF0050B4 /* YBIBToolViewHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4EE26FA7C7FB130C57FF22FF1CAC2B3F /* filters_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0C32AEB37F418F32DD29DCF4F8431825 /* filters_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F1D9DCC6E91445694774FF0849A4B83 /* CGImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 2F6640032ED9681A09BA524C5F3EECC6 /* CGImage+WebP.m */; }; - 4F4DEB687C0E4834A5B291DEE0651D6A /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E707A863CA7859212FEFF8209B2C51 /* ConstraintMaker.swift */; }; - 4FA185AE9B8476AA7B79DA5AAC419A91 /* IQKeyboardToolbarManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B00B2714CE63029E316A682E308DACC9 /* IQKeyboardToolbarManager-dummy.m */; }; - 5063AA402AA20EC46563AE952E480024 /* Infallible+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7C68D1AD25BE9E3B11FE53E50D39163 /* Infallible+Create.swift */; }; - 506DE859713E4FBF1246DE0F500600B8 /* SGScanCode.h in Headers */ = {isa = PBXBuildFile; fileRef = E9603A4E8FF5FF21DE3C230D19267661 /* SGScanCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5089D80A7EF3416F2F3A4D432EE50F5C /* SGPermissionPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = EE3AF8CF71094C3214003559DB10B3CD /* SGPermissionPhoto.m */; }; - 5090C42BBD3A044AB5D419967216CB37 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B9B2BED448FF6B8E278E87D6D430A3 /* QuartzCore.framework */; }; - 5093A747D64057EDB11E7C389C904A9C /* anim_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 223F157AF2FE64BA22ABDDB993DFB6C2 /* anim_decode.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 50AAB77967D0145B1492E8F868E0FDD8 /* PhotoManager+Audio.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F8918760B6BA08970F8004ED7AA6FE4 /* PhotoManager+Audio.swift */; }; - 50ED87303DE9E2682DEED02D299237D1 /* DiffableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C6A602E36472CC2DC2327225B04D330 /* DiffableSection.swift */; }; - 511743EA21722DCB02BC11F82698A057 /* IQKeyboardToolbarConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C218ADBB9ED9BCB5794960F550704D52 /* IQKeyboardToolbarConfiguration.swift */; }; - 512B9661FC34235E0EEB3A6D3E319B88 /* MJPropertyType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E106F539EFD985E901DB6221706FA68 /* MJPropertyType.m */; }; - 513171B8A7FF210CDAAD8F89082D354A /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = A18CEDAEF818C6AB48438A2230736E32 /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 515402907776670802E14BA4FFCBEB03 /* pausable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64219E8625D4757F4535A81DE9CC4D2F /* pausable.swift */; }; - 516198259FBF27998319EA25BE34D523 /* SwiftDate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AEA189D9B360430E513572847E80BFA3 /* SwiftDate-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5163FC6D715F6881B1FA1AB13DCEF870 /* UICollectionViewLayout+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 27E55D0F439ED92B9740583CD3291EC1 /* UICollectionViewLayout+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5174DD2019966DFDC21B8864453ED3DE /* NSObject+MJClass.m in Sources */ = {isa = PBXBuildFile; fileRef = BD30A03CDBD30EA947D04F11E53B9CCE /* NSObject+MJClass.m */; }; - 517A42EBA8C2D887F183A5BA5088B836 /* upsampling_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = E79CAC9375ACAB81CC6DF05A6F6DC26F /* upsampling_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 51DDED280D55FB32EF2455BE8E5EE305 /* EditorToolViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AA2BDF2A6AEC64BE57DDA9A5A18B11A /* EditorToolViewConfiguration.swift */; }; - 51F3B35343757429879D929BB8FAB835 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CBDB659ECA60E466DDE07E7F3188D9B /* MBProgressHUD-dummy.m */; }; - 5210FBCE7B8D9C113F92A7EB93DC0D81 /* DDFileLogger+Buffering.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CCC9D719AB7E41B97FDF91B409B1579 /* DDFileLogger+Buffering.m */; }; - 523235228A1C021C67F2E3776A922DC5 /* MJRefreshTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE98E60968603D5FA63AA72697BD268 /* MJRefreshTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 523705FBA900D0965981AD85D57B2858 /* IQKeyboardReturnManager+UITextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8735CA7CBEA3EC29C13590FB46722BD3 /* IQKeyboardReturnManager+UITextFieldDelegate.swift */; }; - 526EBB21113F77377DFBFF6F0D2A9FF7 /* AssetManager+LivePhotoURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18BD4A98815CF19CEF256B8951CB1B21 /* AssetManager+LivePhotoURL.swift */; }; - 52A4B575AED29E5155ECAE9032603201 /* ItemEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = 709352A78011CC2D4BE14AD43BFD8505 /* ItemEvents.swift */; }; - 52D757C94A7C2AACD80AB049F9881EFD /* YBIBImageScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 99A0AB85281536E0E545FFA662C432F5 /* YBIBImageScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52EC86E627940D5740209212FFEB6958 /* webp_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 0D22A34E6D8A78B03A3878CC8F4A141A /* webp_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 531A5B89526140600E81AC06D7609722 /* Popover.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB8BDEA4C7A77BAA0355626608295FB3 /* Popover.swift */; }; - 53264B91AA947BD2BA1C03735C5A284B /* Repeater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19D327EFE94ECB1A3205002302180EBC /* Repeater.swift */; }; - 533BF0B3BDC7553A874AA44DBC6FAFDF /* _RXObjCRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB2D04A41EC4109E190F3E4A1309236 /* _RXObjCRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5357356A8E071A949B0A89105C330C2E /* yuv.h in Headers */ = {isa = PBXBuildFile; fileRef = 04BB4A806B019AC1CFA3C776444FE07E /* yuv.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5392CECD3707F194D077669DE55EA90A /* URLConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4119C293858086ECD9A8866275C5A9 /* URLConvertible.swift */; }; - 53B548F8E57FD5BE02ED598FCA44BC30 /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F630C8FCE62218432F68271134AD87F /* SerialDispatchQueueScheduler.swift */; }; - 53CA868E64451978727670396A9477B5 /* _RXDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 88004E06395845BEC822BA9C445BA387 /* _RXDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 53EEAC6A987681E9E9C6C7B91E34B24C /* RxTableViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E717BD781EB091185A79C355C520A67A /* RxTableViewDataSourceType.swift */; }; - 54155DF312ABEA7136335F47C81CE938 /* near_lossless_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = AB13A26BC6750B3E62BC905FFE398E3C /* near_lossless_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 5423A68BE194FF4F88E1F3F8060741D1 /* dec_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = A7CAC3DB04F7ADB64B8499A90B77C74B /* dec_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 5429EFE2AEFCBAE8C5D9FE99E813B322 /* huffman_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = EA50E8FECBEF17BCC8D53B8CD0D61CA1 /* huffman_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54A157EFE2592F0C6D70550B88578C81 /* analysis_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = DA66C9C915DAFC02D59574A19D34C580 /* analysis_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 54A45AF20BFF99BA20B15AF09AC4901C /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06030FFD43B3B128FC6ABE677BA4FE54 /* Notifications.swift */; }; - 54D0A443ADA6D6F309E7D326BE652DD2 /* OIMReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 63E347ABA937E1A86307E97B31D7E50C /* OIMReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 54E268C32915CF908E7AA776909B45EB /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 84F2C96DF432D64FEF247DDD154D10AB /* MJRefreshConst.m */; }; - 54FCB2A0877468FCA03245D4FBB0F9D2 /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = E0611803A1D39F6DB0A37D8FC405B3AA /* ImageCache.swift */; }; - 5547D47E48CD0F4AE65CB8DEFF8E0D53 /* sharpyuv_csp.h in Headers */ = {isa = PBXBuildFile; fileRef = 092167ED1CC47E4B4914B165AB241CA3 /* sharpyuv_csp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 55A04B833FD170F94BE342310B41FB40 /* TimePeriodCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A468180CC8FED21C9CBCF714A602BA70 /* TimePeriodCollection.swift */; }; - 55A43F0D93A06F06A446F0053DCD085A /* Pods-QuickLocation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3FEC1DFBF7036B761FB944F2B9F817 /* Pods-QuickLocation-dummy.m */; }; - 55C33792F8CE9E783B8014A61F953AB7 /* DateInRegion+Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E28567FB181BF2D15FA053910918A9B /* DateInRegion+Math.swift */; }; - 5609ED912D598CD5AD61F2FE109423EE /* alpha_processing_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 20042495A7F0AEBBC01B9CB26314CDD2 /* alpha_processing_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 561420A20DC0A84258A902E9EB69A15A /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 01A81FDDCFBF4399353832963143DC0B /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5648D7F0A01DCE02F38BA12B3389D4C0 /* TextCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF41EFA1EAF19A24E823D999541E1D14 /* TextCompositionLayer.swift */; }; - 564ADB7E97B721F59E933E1D05B1C305 /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CFD834B07B9BC8B466E8ACB23CF66F7 /* TransformOf.swift */; }; - 5660010A63B9E5190FB3BA0723C83E79 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2CFE83EA77120219C5AB316D4F80D4D /* Platform.Linux.swift */; }; - 56691610F48CD177ED944F34C23C0A74 /* GradientFill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A6039DC25796F9AE9A8B94A69984B37 /* GradientFill.swift */; }; - 566B1350CFC30E4D9B89E294C69C9EB3 /* YBIBContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = FAEA6E5F8BC0A7CAF9400093BB333FED /* YBIBContainerView.m */; }; - 5690E7733755EF537CD50961C703850B /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49053A2947EE78436A16A7AA161489FB /* PriorityQueue.swift */; }; - 569BA73DBB2EAFC4BFEC77AF6A0C3F89 /* TableViewSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 142413141212B735369078BF6388CA5A /* TableViewSectionedDataSource.swift */; }; - 56B50B3F8DD7B44500AA65DDA2C88F9F /* Keyframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79B611C17C06D5FF4CCB095774A495E9 /* Keyframe.swift */; }; - 56D8A7EAE4D72FF6C23421CAB6F21504 /* MJPropertyType.h in Headers */ = {isa = PBXBuildFile; fileRef = A453B6D8197404FC1374D7F63F8B640E /* MJPropertyType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56E800EB3B2BE8AE0BA45A30974D7920 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 53E27EF908C7FB5EFEE14ADD95C69C96 /* Masonry-dummy.m */; }; - 5727477E667AEAF37FEB3B3CE3BFCEA8 /* SectionModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C08C88751394A41AA41DF435BE9B690 /* SectionModelType.swift */; }; - 572CD95503502CDF3ED788F0B24C252E /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EAB7003BBB2F9EF9DA4E095D91280CC0 /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5746320BBB67E457AF4C4EE5A2D32799 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D36A4A7070EA83191C07AAA60853D10 /* Validation.swift */; }; - 576C5FD65E8E35A7EF189EBB20CE01C6 /* LivePhotoSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E02CC1CDA6213ADD2D3A5455B1CAA1 /* LivePhotoSource.swift */; }; - 57AEF499097B5B2AF1D566F88E7DB206 /* _RXKVOObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = C3DC42E9BB7BC32F274FCDB40EC61371 /* _RXKVOObserver.m */; }; - 57C4F6EFB30DDD14E960AC2D6B34F904 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 673FBA63F9F3560B749DE95F0776152C /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 580D9F7D0E5B3A80462D5C7ECD81A7B7 /* KingfisherWebP.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AC42ACAF533936A9C6D02A3B360662A /* KingfisherWebP.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 584B2BC80E7104E4C2028C5B4A084F2C /* CALayer+fillBounds.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A010C711309127F26077A97DB9D8DE1 /* CALayer+fillBounds.swift */; }; - 58627A8298D25CD81FCCDEDC8D7773E5 /* IQTitleBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993FD35E999A7AB78E66C8B6CB9FDB35 /* IQTitleBarButtonItem.swift */; }; - 5883CC9CCF065AC993539027684B7491 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2E26E78C920199D48C95A6E28FC1791 /* Platform.Darwin.swift */; }; - 58B0006E1FCE48DFC522984B42C5DCF4 /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EAE8C6CF498E05099DE24B18C3560DD /* RxMutableBox.swift */; }; - 58D1B8BFF33B272CF5655439B621F2B1 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F58995D9C873B51C91694DA3DF853E2 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 590F07818244814004FBBEAB1DD57CF4 /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 659ABEE73565FB13D1D253ACC5C5F5EB /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5922A6A0AE7152CF436356B3556F1835 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 005D4C8AF425EF161CADC4688A651EFA /* ConstraintItem.swift */; }; - 593BE6C6A4228D571E38A13C997BEFF1 /* PhotoPanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C4498E7B172BF948777253F5FFCC9A /* PhotoPanGestureRecognizer.swift */; }; - 594619F78BF7AD4FED3AE54E56B565E3 /* DefaultsKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64A97DF1ECAA601838BDE6A51B36E743 /* DefaultsKey.swift */; }; - 595FC1B83C3124AC916FE978EEB3BF90 /* OIMAttachedInfoElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 1583E5EDD96C5DC700A9A7CB042E5C7D /* OIMAttachedInfoElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 59926C66B6FD833E66F57DC8DD184AD3 /* SwiftyUserDefaults-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A5605DFB255E8E50316E27C2AC51298 /* SwiftyUserDefaults-dummy.m */; }; - 59A7B942A600A7BC1ED704F858270E2F /* rescaler_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = E003852F0C2ED5D3367CC3BCB111DE40 /* rescaler_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 59E1BF0AB3F19C50E578D398E26EB227 /* KFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDA8392764223ED541726AFFDD11B807 /* KFAnimatedImage.swift */; }; - 59E8E48227EFAB47CF488B945CDB6A71 /* DropShadowStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB8EED23F953B16F768563FC931049B9 /* DropShadowStyle.swift */; }; - 59F34874DA4ABB2F5C4E09EA6865936B /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDABE3383A3C68EFCCE02018595AFFB3 /* ConstraintLayoutGuide.swift */; }; - 5A2FD3386684CE7797BB7FF6F3CCC061 /* KVORepresentable+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8733BFF5C1688EA0DA6F27C8A71E52 /* KVORepresentable+Swift.swift */; }; - 5A59B9480008B1E5D4A86DB270FAB470 /* UploadFileCallbackProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 13CFBAC771749F005DCDC9210BE8D854 /* UploadFileCallbackProxy.m */; }; - 5A7D0317917962BB4C8608318195009C /* PickerInteractiveTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F565D5B158AF3BD7A2398E2AB52BB084 /* PickerInteractiveTransition.swift */; }; - 5ABDF47FC0D60B701B5A8E767DC1314F /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A01BB5837F881970519254C3F1F0B175 /* EventMonitor.swift */; }; - 5AC012169819B4ACA66D680CBB2D4B24 /* LottieView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 801C736CBB37EF2A92BFFF9A8DFBDC70 /* LottieView.swift */; }; + 3B14F5D1436DC56A3F2D4A4ACBEA8197 /* IQKeyboardToolbarManager+Toolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 858555FE5CD415E9FE0DE9EB2A7AFCFF /* IQKeyboardToolbarManager+Toolbar.swift */; }; + 3B16CD40D6856ECADAE282BFED982595 /* PickerBottomViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F51ECB02B19F5FE5864C701321C147C5 /* PickerBottomViewConfiguration.swift */; }; + 3BA7EA7CD07F07FFA5792AF93A98B981 /* EpoxyModelStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7772449672CBE48D3FFA0D9317D8AD48 /* EpoxyModelStorage.swift */; }; + 3BA911ABFACEB592815A720C60B48C53 /* PhotoAsset+URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3399796C15028FAAB7F429D5AEE0D825 /* PhotoAsset+URL.swift */; }; + 3BCAE7843A2516EBA64768CC0CD79988 /* ParameterEncoder.swift in Sources */ = {isa = PBXBuildFile; fileRef = F13144DC6F4AB1AB855A41E59B26EB68 /* ParameterEncoder.swift */; }; + 3BE0AF07013E897E60C05588D232AD74 /* Formatter+Protocols.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57893FB92C503783316937718B7D6CFE /* Formatter+Protocols.swift */; }; + 3C1D4FB9E504C5E37213A06D1A0E8554 /* UICollectionView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = E95702201E937BD3B02E440468773440 /* UICollectionView+Rx.swift */; }; + 3C2058840E42D08B30D081187228E79B /* Date+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 675B4C11F7B590880C77E8AAEF1F3A60 /* Date+Create.swift */; }; + 3C8DAC2429DAACE7EF441415C7C7B717 /* VideoEditorMusic.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCAFF5A5740D13881CB89FB2332CF4BC /* VideoEditorMusic.swift */; }; + 3CA8AA8FFEC560A25DFD5EBFCF187AFC /* IQTextView-IQTextView in Resources */ = {isa = PBXBuildFile; fileRef = 847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */; }; + 3CA948576898BEE941D30116D80D9395 /* MaskCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 694EE45B9AE3A7575F8B867C9D6A78CC /* MaskCompositionLayer.swift */; }; + 3CE8DC253F3048595F30A3C64FA9543A /* Picker+PhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC9D6D0932358CB76A02655D6417A65C /* Picker+PhotoManager.swift */; }; + 3CEE544E244F623CEA38EF75183BC93A /* NodeProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4542B0278922709B2677B3742D449B8 /* NodeProperty.swift */; }; + 3CF9247B7112973208E98C5B8A3EFD08 /* ImageDrawing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 818F80EEBE82BB7416E478C26E7995D2 /* ImageDrawing.swift */; }; + 3D1DA6956A2BB1FAD53891B484575978 /* PathNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5EC0B76BF335CF429B6B623B5DEF288 /* PathNode.swift */; }; + 3D3B646B4988314275B40E97BEB16C7F /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = D910123998FD43BE6AD2DDD3A3D45594 /* ConstraintLayoutGuideDSL.swift */; }; + 3D47BB7B12540180D7548830017B873D /* SharedSequence+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFB6F6DFDEB8E69C4A18B6691BBDD7F /* SharedSequence+Concurrency.swift */; }; + 3D752C60755FCF890E8579C4FAEBB6B5 /* SDImageAssetManager.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD9EB2C14D6F3DD35809C4C91193549 /* SDImageAssetManager.m */; }; + 3D80D0457EB3BF7D449CA995F30CF2CA /* CocoaMQTT5Message.swift in Sources */ = {isa = PBXBuildFile; fileRef = 500DC6BC616ED25251A50A86C36870BA /* CocoaMQTT5Message.swift */; }; + 3D9E99F17F687A6BBAF6BCBC33C74213 /* YBImageBrowserDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = B34D8164E363688D35D07DC9EFA7ECDF /* YBImageBrowserDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3DD607D8EE7367C54BF5D9252D1F7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 3E301C20B8B55E9D5F6300A134561BFF /* SerialDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ACF591CB08ABFD9EC45A948D394EBDD /* SerialDisposable.swift */; }; + 3E715D5BADDEACEEF30D6A4CA82CDA9B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 3E9B7829091DB08299A28473E42AAC60 /* YBIBImageLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = B2FB4A7A72FEED4EEC521EBD466AF52F /* YBIBImageLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3E9CB435642EBD721648B430DD0E5A51 /* UnitBezier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55B16604977C9DD7CC41867CF659D286 /* UnitBezier.swift */; }; + 3EC79AF239C06987A9C62AA7FEC1B96F /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 783FC12BAED041F378F97768D2B28B8C /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3F0A66D0F2A42BDE21605CE2F9A8145A /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB6D3BA9EB2705C68DEC158FFD134AF /* Debounce.swift */; }; + 3F2D23F9C43322FECE50FFDBAC5EBDA9 /* bit_reader_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 37A76EC7E372C59E5A53839B2D5EC932 /* bit_reader_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3F57DD6E2D66DC1CF834CB76F7FAB980 /* EditorStickerItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06ED629B369D759C9255F2C1BD20473B /* EditorStickerItemView.swift */; }; + 3F749E95FFA3640649B8252D9B2CFC10 /* KFImageProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97404EDD54B128EB9F21CCA4CC58A92B /* KFImageProtocol.swift */; }; + 3FB47B714578990577C9B1CC85DC0D0C /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 692E73A19B4EEA1D680D9F67D5718114 /* Delay.swift */; }; + 3FBA98216749EFB55B3D7FFEFE2681B2 /* OIMReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 950AF206CB2131B94A4913E8D6D73802 /* OIMReachability.m */; }; + 3FCA734C50CA0AE6B74173F07437A885 /* Changeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53A748F8442ACE4E6959806D00DB0272 /* Changeset.swift */; }; + 40190BB6FD6FA51901C19C1BF4DBD5A6 /* UIViewControllerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7E0219D96D197D256967A214677AE6B /* UIViewControllerType.swift */; }; + 402FA8B04D2CEFBD67DDDD7768AC4EB1 /* PublishRelay+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D12B6120AA47A34F846154D94CAA3F4 /* PublishRelay+Signal.swift */; }; + 4063405C03CCB96E39645F8F991E75FA /* MqttDecodePublish.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDAB40E3AA9DE5D5A63CF63ED9A2BEF /* MqttDecodePublish.swift */; }; + 407FEEB6A5DA7B4EF077DAE20DE114A9 /* PhotoPickerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63162572B5F40706944B6D4695746BA0 /* PhotoPickerController.swift */; }; + 409D987DB67CFB48AA6311402BE0D30D /* IntegerType+IdentifiableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11A04BE5CE43A7F729E96EA4E6256922 /* IntegerType+IdentifiableType.swift */; }; + 40B6C52B85E307B53FF06DF1ECD6D046 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7282B196E51A3F4664251AA4023D0C02 /* PrivacyInfo.xcprivacy */; }; + 40BB4A23AD4A18E81678F58EAA90EB85 /* UIScrollView+IQKeyboardManagerExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95CC0C8C9DF91B6EEC6755575144D1BE /* UIScrollView+IQKeyboardManagerExtension.swift */; }; + 40CA3D5F4E23459A974B7C886260F70D /* SDImageGIFCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 78C694E50921AD52B782E980CAE66D3D /* SDImageGIFCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 40CCAE7CC10932034F8BDBDB11A060B6 /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 908DC03A3D9216AB6FE7FE902C573A81 /* DistinctUntilChanged.swift */; }; + 413FB3DBEC191BD8FD034D6B619ABA78 /* alpha_processing_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 520200F35D7AC74EBA71E00F2CBF4F38 /* alpha_processing_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 4168F11F01FBC79CAC2E7452E0E90BBC /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43406D3985E9918221FE0A4DE1B571DA /* Bag.swift */; }; + 4184983EA0EC59DB2518B936E2CA3C10 /* ObservableConvertibleType+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F63AC006B2627EE41E02B5552FA3FDC /* ObservableConvertibleType+SharedSequence.swift */; }; + 419BEFA58C93F82128B3EC673B8B2808 /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1A66C060BA472F214129D41D55863B9 /* ObservableType+PrimitiveSequence.swift */; }; + 419E5FDF85188A7D1F31AF680884A125 /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A5C6F735186CBB62A6EBD6ECB76858C /* AnonymousDisposable.swift */; }; + 41EAB079E787B4FA6866FC48FC7D187B /* MqttDecodePubRec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110A4E7BE4EB9B92AD398EF75E3DF5AE /* MqttDecodePubRec.swift */; }; + 4203437AC6CEDF0C0455C95FCA7CEC31 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E60C88006022308DBE83289F5CB1A46 /* Security.framework */; }; + 420ADE5F222F9DB15F15F59991EEFDC1 /* CacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 310A752EAADFC795CC0A69824946DC22 /* CacheSerializer.swift */; }; + 420C49E6734283B87E7D206694344112 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 4213B9A582A396D7E3E1EEEA57FE200A /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 632FFDAC6AD7D412F1BF8F1A913A0EF1 /* UIColor+SDHexString.m */; }; + 426C1CEDF3D8317CBC0353913E92BA2E /* Archive+MemoryFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9F0A16DB2718E87062DB18D1618AAAF /* Archive+MemoryFile.swift */; }; + 4294EE557F13FE2EF5957288BDDFE9C9 /* EditorImageResizerControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F7EED91CF0B4D7A89C11A806293769A /* EditorImageResizerControlView.swift */; }; + 42F6A891188100B2EAC2DD5FC0CCBB50 /* Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C907F746C2788FC9A636D9BA502E2E /* Group.swift */; }; + 43A27A7590AB8B341E0106298FF45CC6 /* KeychainWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB58ABC19057B8242704E3499769C82 /* KeychainWrapper.swift */; }; + 43A8337B50D483F93A22E1941C18671E /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = FD018790C71DECF6D9B77734AEDDC8E1 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 43D84EBCE8220F637D8BE1C473BF9188 /* FrameConnect.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35298093BE07EC18C02E752D449371D /* FrameConnect.swift */; }; + 43DE8C31D6AC6DF88E03EF5C2F9AB778 /* OIMSearchResultInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F3E14299379EB091FFF0667442E61240 /* OIMSearchResultInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 442F3EF780ACE70BAF124C9E3E5E8E15 /* ImageDataProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5B5E409A3CB6709D1C0EC5240773D49 /* ImageDataProcessor.swift */; }; + 442F468E261A1106C291BF52BDBF9DB7 /* MJRefreshHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8174B2C2A98517B4AD3D5FEF87B40F58 /* MJRefreshHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4431DB7D2739D4D1701F63BA42F1ECC5 /* FrameSubscribe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C8F6BD5C4F963CFF317253AB78D288 /* FrameSubscribe.swift */; }; + 44E12060DC6F91B02411D6A00858CA35 /* LayerDebugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52DE37F1AAEEF218852464F11E143656 /* LayerDebugging.swift */; }; + 44FA91ABEA149BDDF9A6FC5AE94774F3 /* TagListView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C9D1DC3A8237ADFBC76223E5E1932BB /* TagListView-dummy.m */; }; + 4501636244237C850616353EBD1C8189 /* CocoaMQTTProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8623EF65FEC6BFD426123019DFB996B6 /* CocoaMQTTProperty.swift */; }; + 450C90D5EC2199F7C604D50B30FBFEF3 /* Reduce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C91C661FD814F39CAB6325D8D4B7E37 /* Reduce.swift */; }; + 452C940762F65B125C216F73B369F583 /* MJRefreshStateTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = D0A5F579E5060D3B3840AA15280205F8 /* MJRefreshStateTrailer.m */; }; + 4533898C4946124EA1F111F1835EC6BE /* OIMVideoElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AFE49130DC59D5BB417170BC6782E91 /* OIMVideoElem.m */; }; + 453437AE32236787CCBCDB84336E4A93 /* YBIBVideoActionBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 5ED4C28A20C58BA223BDDBF5861D744E /* YBIBVideoActionBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4552112D19F0C7551BF31425FC8D1EC7 /* ControlEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4CDE77BD401C132B20942F8B3CA92E7 /* ControlEvent.swift */; }; + 455F481C635ED958C685DD70C2E9AA86 /* Archive+Reading.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFDA5F5E6DE9CF3C0BF1AFC98DA6D9ED /* Archive+Reading.swift */; }; + 4569889593FF212F0BC397FE2ABC5312 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C044C8F399ACA5B2EE61EF53158B478D /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4571A0EA37DC84F39E3830D38A1531AB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + 45AE3D9DCD60E97EFAACDC56F430C9A3 /* TimeInterval+Formatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6F7913A879E3C937BA173A6E58EDBC /* TimeInterval+Formatter.swift */; }; + 45BA801435A315ACE712825F72606CAE /* WithLatestFrom.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB1C61EFA6F55C5182E8D76C343977AC /* WithLatestFrom.swift */; }; + 45C8C8F139BB9A4A0A45FC6C333FCCBD /* SDImageCacheDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = A3BC31B6E58488D20D1E01F30A6E36A5 /* SDImageCacheDefine.m */; }; + 45E1583D7EF53489B82C4CA2AD1AD0CF /* MJRefreshBackFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = A781D796BB0C79520A672AE004474165 /* MJRefreshBackFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 462FA8E8C7677BC1691013F1733E4DA1 /* NSDecimalNumberTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 967D6286ECF8DBBE843AB35C9E2CF2B4 /* NSDecimalNumberTransform.swift */; }; + 46C56C35747EB93ED186EB0A4614BB71 /* PhotoAsset+Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = D40EFA4AC4FAF688BB84B55A3FB2CF5D /* PhotoAsset+Request.swift */; }; + 46DD69BCF3B370BF6BBBBCF400D9DD3F /* AnimatorNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D04DBC093A142D706FC40A9EBD11889 /* AnimatorNode.swift */; }; + 4708505041F162DB894B876B79857794 /* Editor+PhotoTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4009BD16431C62C0B7BE3CB189F750B2 /* Editor+PhotoTools.swift */; }; + 4730296E49F16E17769686F7831AA0EB /* ofType.swift in Sources */ = {isa = PBXBuildFile; fileRef = E91F66139CDDA437F057F79B815A732D /* ofType.swift */; }; + 47443F09C6EBFFF6143EA8B4967F865F /* UIViewController+TopMostViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3223D73145E787B1981391FD710DAA /* UIViewController+TopMostViewController.swift */; }; + 475B4F3E71C293065AAFDB1888696CF6 /* MJRefreshBackGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = C697541991BB83795F62A7EAC8FD2B49 /* MJRefreshBackGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 478D40A254B29DC1408D37D3D6051DF7 /* SwiftKeychainWrapper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A22F13325BAECE5E89A7635E627B97CB /* SwiftKeychainWrapper-dummy.m */; }; + 47C9A000C20E04EC69BFEEF3C6AC6256 /* IQKeyboardAppearanceManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1661F2067BAE2A0A0E5D6C5585A309D4 /* IQKeyboardAppearanceManager+Internal.swift */; }; + 47F8811B5427A0E93A230232C573B68C /* MqttDecodePubAck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C8171B585A7AB98F4DAC387B9569C8D /* MqttDecodePubAck.swift */; }; + 47FBA86C15EC8060331926C9A8D54BB1 /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BA471A54694354CA0D84E2A452949610 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 47FBCA188545B898AB5EEC31E3E5E680 /* YBIBIconManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F34ED0A941A2F51373D6C1C05B1339D7 /* YBIBIconManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4808B2B2052822D84C77C8A62699622F /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 14A7D6A86A2083A77AE74C11D9E5B400 /* SDWebImageDownloader.m */; }; + 48613A776228D14C2933B89CBE229570 /* EditorToolViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0CBE9B053F9FC8D9F31828C0584A37D /* EditorToolViewCell.swift */; }; + 486CDF230E2A556983838450D0EC5C75 /* KeyframeExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5D131BAEA2B1C0468C915FC762A6341 /* KeyframeExtensions.swift */; }; + 48A5FF7B0107E13FDFA349294CE41359 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D35826F34C3A15406C7BCA0C286C17A /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 48D3C099349231D4D0122D8E51468A19 /* Date+Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A24B45B99DABB55846B35CC63B19366 /* Date+Math.swift */; }; + 4901D71B1E8609E9BF02617F741F6512 /* rescaler_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = B2DF02A1C83FCAC61CE81BF9B51677AC /* rescaler_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 490664A35E3AA79D57C33414E1B19E66 /* DDOSLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 378E212C4FE47178EBCE8F98BAB1B1D8 /* DDOSLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 490AEEAF2B7281C716A29CF7BEFD6E33 /* SDWebImageOptionsProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F97E68DD72913DDFFA66907E6F040F8C /* SDWebImageOptionsProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 491D049834F6F84A3D0785A682FCAE39 /* UIImage+MultiFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 88467EFBA0FCF30687E23912DE9B7DD0 /* UIImage+MultiFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 492E53D98F2FB5F2EEF734D1D672BC08 /* TimePeriodProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 706126F07CEBF1B19EAA3D54064C3002 /* TimePeriodProtocol.swift */; }; + 4938511D8412EFA06AFCB9D8DD0F4F77 /* YBIBCollectionViewLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 43CD18A02BC6362BD60A9F8A895C6881 /* YBIBCollectionViewLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49445CE967F63922E2048455DCE72758 /* YBIBInteractionProfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 887BD66AA7441D8A73D87321B6F17CBB /* YBIBInteractionProfile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4990936139BF46A3888CBF58360A7251 /* UIView+SDExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = FD30BE25D5B77C034CA2040AC6EF80E6 /* UIView+SDExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49C64C6D505629CD6B37FA8D5F68CDA1 /* lossless_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = A89DFF6BEF600D2FD437FB469EB3876D /* lossless_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 49CF13727C6680117794AE1A86BFAF0F /* picture_csp_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C07F59A034811F4CBBF62F8E736ECAA /* picture_csp_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 49D0AB841BE753EFD2A840C4C54F4756 /* anim_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 10ECE5FD969EBBA30C2ED7DA1AC66C7C /* anim_encode.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 4A240539859DE81874149E2DAB8852EF /* YBIBUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B4759B2362FE048A89613C7D13FBE31 /* YBIBUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4A5F51AA21766046600966A50BD6F533 /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 572C33F4140022FE99118556F038018B /* Sample.swift */; }; + 4A63127B68DCC325FBEBB78896FAE6F9 /* IQKeyboardReturnManager+UITextViewDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B29722D6230A4E399189B5B3E153D285 /* IQKeyboardReturnManager+UITextViewDelegate.swift */; }; + 4A8E5376A0FA9D3DBD7F1E452F1BE38B /* EditorStickerTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B72E217B485757193D8084079600E909 /* EditorStickerTextView.swift */; }; + 4A91D925DDACC63C464346C6EB1CED3E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 4C84C4C711FFA7CF45DD30F7F1B9F6FB /* PrivacyInfo.xcprivacy */; }; + 4A968EBD70F69793C28AD47645AA124F /* DropShadowNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A80A81973DFC185D749BF15E3B9010 /* DropShadowNode.swift */; }; + 4AB3FD4438152538ED29BFA7B341B02F /* DateFormatterTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A88BE7352DE9732931C54A38F9936B /* DateFormatterTransform.swift */; }; + 4AC9B005EF04B376E1E8612AA94B0BD7 /* Picker+UIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ED05F749374B2ECD29E17E6726B4D21 /* Picker+UIViewController.swift */; }; + 4AEC3CC4368A996534E603361B5D7940 /* vp8i_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = ADE23998ED27B4812995A97BEF5F323C /* vp8i_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4B0B017D5B3951B641C1336A8515838F /* RxSwiftExt-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DE841174DFB947091CC9730CC27A4D7 /* RxSwiftExt-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B1290DE38BEE1418F52E914EB28389F /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11B4D2B58D8EC3CA214F9D4A0F71A59C /* Merge.swift */; }; + 4B1C0A08511CD18328B7AD065B6447F8 /* MqttDecodeSubAck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4D7FBD66D7474E6981A9772DBE9E40 /* MqttDecodeSubAck.swift */; }; + 4B3687C8AB50D80335544D2338C54D74 /* Picker+PhotoTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1015C6C8D14DA8683A3381003A7C1EB0 /* Picker+PhotoTools.swift */; }; + 4B802114AD90D83829297937C5939C91 /* SGScanView.m in Sources */ = {isa = PBXBuildFile; fileRef = 691FEC0751A0CEA25959BCE082FC3B97 /* SGScanView.m */; }; + 4B9FC9B0004EB197325C1A6D67C9FA28 /* GroupNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = E85F341F52AD4EA9051370B4AB27A5BB /* GroupNode.swift */; }; + 4BB0CA2D3BBB9A3D60EFB691B070B3D3 /* lossless_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AEC81D4CEAFD3F38E344F8311FE012D /* lossless_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BFEF1EA0FD8911E9EF55A4484F7F1E6 /* KF.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8277B036CADFDB18A9032F3676C20D1 /* KF.swift */; }; + 4C0B9A1CB2C59D19BA619458188DB556 /* enc_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 2CF7AFA4E3D64A4BA4D1B1B57212C941 /* enc_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 4C10C2C40993364E838ABE82E0301880 /* ShapeCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7D13E2DF65446BC4D8E7B407EAA0684 /* ShapeCompositionLayer.swift */; }; + 4C2FF50CEFF8089782BF69B0201BA4A1 /* huffman_encode_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 803F8F55A8F17B4D7652541124C612C4 /* huffman_encode_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 4C76A7083CB882DBA6D7AB708AF8A300 /* SendMessageCallbackProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 03EEA40526D078ECA2261B80DFC83B93 /* SendMessageCallbackProxy.m */; }; + 4C8406FCC6BC4D4007C31B4805E414DD /* NavigatorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A60D3136A08EC0C773382CEE7C49B14 /* NavigatorDelegate.swift */; }; + 4CFE1C0BF7FD332B810E42D2DA299F5F /* RxScrollViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F30D8D00A655C7EC5DA8DC98A8361B5 /* RxScrollViewDelegateProxy.swift */; }; + 4D0444BAE8369211DADB3376A38089CC /* Observable+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5520E606C013E1A2620E94D8169AF82C /* Observable+Concurrency.swift */; }; + 4D08C586CB9B30E68361DECB0A708AE6 /* Archive+BackingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0296D5D6EFA25ABAAAA68D3CD8738A76 /* Archive+BackingConfiguration.swift */; }; + 4D45AF0998CCF0F5840FC0D3A4E40BC8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 4D80E60A335E390E7E06406B289B1507 /* alpha_processing_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 0951F87C6DE10E5CFAB72203270704EB /* alpha_processing_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 4D81FCC2BA602A7BD07F22F1584B8F26 /* AssetManager+AssetCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3AB2F5FE36493E753EEAAF3B8E6B30D /* AssetManager+AssetCollection.swift */; }; + 4D9E593DECA015D410984C771CCFDD12 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ABDDD2F889B1861B14D2F1D61F16BA8 /* Alamofire-dummy.m */; }; + 4DA8C358A666CA3352780CBB1D351A48 /* UISearchBar+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2779AC1EA6378DFB55EC94CB2A921AEF /* UISearchBar+Rx.swift */; }; + 4DCA75BFE1558CE59DFC56607E49B3D2 /* MJRefreshConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A3A23E72BF86121106194AD04651D2E /* MJRefreshConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4DEB12CB0D7D8F6AAA5C645E6C6C3284 /* AssetManager+Asset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93E12D74AA92766FA145737CB1FF4B12 /* AssetManager+Asset.swift */; }; + 4E11FC5197231B7FC95109CBEFB6615B /* SDAsyncBlockOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C0F1E0571EE5F74112DC26DEE1DB61D /* SDAsyncBlockOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4E19785ECA3BF1CD264269D5DACD9B87 /* SelectBoxConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 602C74A8185EA5EE8350DAA128584F7F /* SelectBoxConfiguration.swift */; }; + 4EC2962339DCDEAA3554795F8737A175 /* YBIBToolViewHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 0371D4CC57FE2AD694BD3124D76F3700 /* YBIBToolViewHandler.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4ECDB9E3C46C6B4233DA2AC4DA514932 /* UIImage+Metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 79B7929EC24027379B0B163DA94A6AFA /* UIImage+Metadata.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F03E118D2391DA8DF72DF10152F07C8 /* IQKeyboardToolbarManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D8B96BC951501B73B984B3E5E73D45D /* IQKeyboardToolbarManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4F1D9DCC6E91445694774FF0849A4B83 /* CGImage+WebP.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BCC0CB4800246FD935D7AF0399C5175 /* CGImage+WebP.m */; }; + 4F2C790A0B9ACC95B86C6639E6C5AF4E /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78407664800D43DC47B50BE2A39D946A /* Debug.swift */; }; + 4F43274487E91FBD7E03D86245E47A4E /* PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B3B1BFD01D9928B8320CCFBE483C0B6 /* PrimitiveSequence.swift */; }; + 4F4DEB687C0E4834A5B291DEE0651D6A /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = F716D3D553C2B2B467ACFEB6493D9F37 /* ConstraintMaker.swift */; }; + 4FBF89FE470E2F4A0E7E8546A469967A /* SDmetamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A5972F6E217179DC514AFBE7916229A /* SDmetamacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 4FC8EEE68D5932ABDDFE2D0DCF8345CC /* ScheduledDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA7C3B976B5FED44BFD89C3C0FBBE972 /* ScheduledDisposable.swift */; }; + 4FD35E0DC4C9F53BE89F91977C085562 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 53A4EFF13E5D8770804115A05B68B1C5 /* SDDisplayLink.m */; }; + 5028A68DA5ED8F5524765AA3A07B4007 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 277192D403211FA10EEAC643C35570AD /* PrivacyInfo.xcprivacy */; }; + 50669B24372B93D32B3A617D0058F215 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AFBBCC3AC2D57FEB1F37DD9DD64C777 /* MobileCoreServices.framework */; }; + 506DE859713E4FBF1246DE0F500600B8 /* SGScanCode.h in Headers */ = {isa = PBXBuildFile; fileRef = A1DA6E0CC1D2FAF481390FDF49CB9EE8 /* SGScanCode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5089D80A7EF3416F2F3A4D432EE50F5C /* SGPermissionPhoto.m in Sources */ = {isa = PBXBuildFile; fileRef = 07063D265D80CED41E96A7C82AE2DDDE /* SGPermissionPhoto.m */; }; + 508EE05DC4635E416722BBFE86807E95 /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61CF6C543261C867ACCBC0ED36A257A1 /* PriorityQueue.swift */; }; + 508F0749C8CE0782F435CE83E8883BD7 /* muxi.h in Headers */ = {isa = PBXBuildFile; fileRef = 936CB7B4BDC58080C1761D5802B3F961 /* muxi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5090C42BBD3A044AB5D419967216CB37 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2C997ED187FDEF21DB00D42F13F8ECC /* QuartzCore.framework */; }; + 50AAB77967D0145B1492E8F868E0FDD8 /* PhotoManager+Audio.swift in Sources */ = {isa = PBXBuildFile; fileRef = D13ADEC01AEBCFADCF283E3936FD6C64 /* PhotoManager+Audio.swift */; }; + 50B43CA000068D1E1BC08EF96A23E0F5 /* cost_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 3CE5BD03C703D73BE31F3D87E1B5DC08 /* cost_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 50D00DC42BB5C1BE2352D3464EFB94CB /* common_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = ADD590C801F4A52D73C98EA6ED07876F /* common_sse2.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50E0B8B52F6C012C647A877DE161AD0B /* MqttConnectProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 322E4310DE8158FCAE06CF313CB5D549 /* MqttConnectProperties.swift */; }; + 50ED87303DE9E2682DEED02D299237D1 /* DiffableSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4781270B7E505D46B77FC0AAE0844B23 /* DiffableSection.swift */; }; + 512B9661FC34235E0EEB3A6D3E319B88 /* MJPropertyType.m in Sources */ = {isa = PBXBuildFile; fileRef = DE1E6901934EE596740D842380286A4D /* MJPropertyType.m */; }; + 515402907776670802E14BA4FFCBEB03 /* pausable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ABBFFA488022C89EF93575377A4C200 /* pausable.swift */; }; + 51549AB4DCEAACB95CD86750694E1D87 /* quant_levels_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = E1F62D4EADB9E5D416AF1F2EBB690434 /* quant_levels_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 516198259FBF27998319EA25BE34D523 /* SwiftDate-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 245230D60496C156AA01F11BF0F5812A /* SwiftDate-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5163FC6D715F6881B1FA1AB13DCEF870 /* UICollectionViewLayout+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E797E34167479AB4C62BEF24C93CAAE /* UICollectionViewLayout+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5174DD2019966DFDC21B8864453ED3DE /* NSObject+MJClass.m in Sources */ = {isa = PBXBuildFile; fileRef = FA212ECF33B3A933473221784ED69166 /* NSObject+MJClass.m */; }; + 51AD982F51665703357600F04DCD328F /* SDWebImageOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = AC25F5250554656AB117D165FA972CC9 /* SDWebImageOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51DDED280D55FB32EF2455BE8E5EE305 /* EditorToolViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFA50E72BEA63413CB9C0B4CC48F4F7A /* EditorToolViewConfiguration.swift */; }; + 51F3B35343757429879D929BB8FAB835 /* MBProgressHUD-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 94AFF6B159156CF9FB52FA537C9D048A /* MBProgressHUD-dummy.m */; }; + 5209C1A3570588A7B77161FA9EA55C02 /* iterator_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B4B16CEF33050278A4A904EC75AD40C /* iterator_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 5210FBCE7B8D9C113F92A7EB93DC0D81 /* DDFileLogger+Buffering.m in Sources */ = {isa = PBXBuildFile; fileRef = 05746202040C5E84F9997A84784DE29C /* DDFileLogger+Buffering.m */; }; + 522BAB997E48EA6A808C89BA298FE55B /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 63321D54034C11DDB8981792A5761232 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 523235228A1C021C67F2E3776A922DC5 /* MJRefreshTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 59306A0835C1BE58B6CBDF64FF22DF38 /* MJRefreshTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5259F923E04070DB3B5FD9F1A98B62FB /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EF66DE3B3203486D7F366B2E5AAD62A /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 52634197F97213E2DD98538DCD8BC6D4 /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BE93567AA85914227E92BDFE9669A63 /* SDGraphicsImageRenderer.m */; }; + 526EBB21113F77377DFBFF6F0D2A9FF7 /* AssetManager+LivePhotoURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65029C092034F39CD83E5C58E0DA0B05 /* AssetManager+LivePhotoURL.swift */; }; + 52A4B575AED29E5155ECAE9032603201 /* ItemEvents.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9891B991F8D7F282B6C175E77BE7D0E /* ItemEvents.swift */; }; + 52D60BAAE980A153100A4881975E8CF6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + 52D757C94A7C2AACD80AB049F9881EFD /* YBIBImageScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 272F9E6947D5DFE5145771307773F9E9 /* YBIBImageScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 531A5B89526140600E81AC06D7609722 /* Popover.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFA03B4AC805A46101403448BA891DEF /* Popover.swift */; }; + 53264B91AA947BD2BA1C03735C5A284B /* Repeater.swift in Sources */ = {isa = PBXBuildFile; fileRef = 723B33791793F56BD5E9F38531D5874D /* Repeater.swift */; }; + 533A88E45962B5D9C58C2C8CDF68B408 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = FBFCD3C2F41A889618134EB337C10CFE /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 533BF0B3BDC7553A874AA44DBC6FAFDF /* _RXObjCRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = C444211868DE12D238B5BF354455FC4D /* _RXObjCRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 533C838059890F6AFF29075B9A7D4C6D /* UIImage+Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = CC59B2281AD964D6B8FED7B26F17BEC0 /* UIImage+Transform.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5392CECD3707F194D077669DE55EA90A /* URLConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011AFAA206FF4A0E965B6A9437F4A8E6 /* URLConvertible.swift */; }; + 53BA20933A3747C025F10B4C51EED188 /* UIImage+Transform.m in Sources */ = {isa = PBXBuildFile; fileRef = 1322DF1CDD5A25B867ADD9873A4AC966 /* UIImage+Transform.m */; }; + 53CA868E64451978727670396A9477B5 /* _RXDelegateProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F7CC255B973DED6704CF75AA5652653 /* _RXDelegateProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 53EEAC6A987681E9E9C6C7B91E34B24C /* RxTableViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19D41911253A4EA902F92DB8C0EC5822 /* RxTableViewDataSourceType.swift */; }; + 54A45AF20BFF99BA20B15AF09AC4901C /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6FE100A253357F7FFFAAF9AB9378C4 /* Notifications.swift */; }; + 54D0A443ADA6D6F309E7D326BE652DD2 /* OIMReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CC360DDD6D3361E48E7695224199158 /* OIMReachability.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 54E268C32915CF908E7AA776909B45EB /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = C4AEF7DE14166C25132B610DAB1F3C00 /* MJRefreshConst.m */; }; + 54FCB2A0877468FCA03245D4FBB0F9D2 /* ImageCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75E672D2E3F85192FCB6AA5DB98E8607 /* ImageCache.swift */; }; + 55699564BB44B2104A443E6D48923E90 /* libwebp-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D2168315CB9F6330A6402FFFDD1D6C30 /* libwebp-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 55A04B833FD170F94BE342310B41FB40 /* TimePeriodCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 208AFEA3CC5DD10476B29311F5E8F3EE /* TimePeriodCollection.swift */; }; + 55B11D2C4DDF75F774137344BF028AF6 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 635325A329D375088E730F34019317A0 /* PrivacyInfo.xcprivacy */; }; + 55C33792F8CE9E783B8014A61F953AB7 /* DateInRegion+Math.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F20D74BF18F61F2F8043E9BB9261874 /* DateInRegion+Math.swift */; }; + 561420A20DC0A84258A902E9EB69A15A /* MJRefreshAutoFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = DFB5011F8D337C897BA3D4066DAA8DAB /* MJRefreshAutoFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5648D7F0A01DCE02F38BA12B3389D4C0 /* TextCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 518C08021C81FCD665925D5FE7DB2D2D /* TextCompositionLayer.swift */; }; + 564ADB7E97B721F59E933E1D05B1C305 /* TransformOf.swift in Sources */ = {isa = PBXBuildFile; fileRef = D105F796848D507AEBB1461B0F8A6D7C /* TransformOf.swift */; }; + 56691610F48CD177ED944F34C23C0A74 /* GradientFill.swift in Sources */ = {isa = PBXBuildFile; fileRef = E07E0B4611AA88852073CCA616A9032A /* GradientFill.swift */; }; + 566B1350CFC30E4D9B89E294C69C9EB3 /* YBIBContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = A564302709C6F613C097FCA7C36410B8 /* YBIBContainerView.m */; }; + 569BA73DBB2EAFC4BFEC77AF6A0C3F89 /* TableViewSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91F9B1A6C9A789429ABD96817E09C218 /* TableViewSectionedDataSource.swift */; }; + 56B50B3F8DD7B44500AA65DDA2C88F9F /* Keyframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5EDE4C54CCCF208B2D71DCB9FDB21C7 /* Keyframe.swift */; }; + 56D8A7EAE4D72FF6C23421CAB6F21504 /* MJPropertyType.h in Headers */ = {isa = PBXBuildFile; fileRef = D80F30B4976169EF9937B6A44FD12D40 /* MJPropertyType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 56DFEB02ACCD64F2C2CFCC01747627D2 /* Disposables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 034243C340888689E6CC333E4A5514C8 /* Disposables.swift */; }; + 56E800EB3B2BE8AE0BA45A30974D7920 /* Masonry-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D234CC248B770A58420B85F0D51049CD /* Masonry-dummy.m */; }; + 5727477E667AEAF37FEB3B3CE3BFCEA8 /* SectionModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1A9770100809405AD02EE9CCCD7C2DF /* SectionModelType.swift */; }; + 5727F454DBE214ABD764FD2AC05BC7C4 /* mux.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D43EFC784C9CB0EEC823043042F4F3E /* mux.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5746320BBB67E457AF4C4EE5A2D32799 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80462D2D5DC6C1F74F611C1A70FA0A5F /* Validation.swift */; }; + 576C5FD65E8E35A7EF189EBB20CE01C6 /* LivePhotoSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C1764349B4C733F6B7A6B68D67BC042 /* LivePhotoSource.swift */; }; + 57AD313741969102750AB3CB3976BC97 /* CocoaMQTT-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C61A14610D0126017F22A925514C694 /* CocoaMQTT-dummy.m */; }; + 57AEF499097B5B2AF1D566F88E7DB206 /* _RXKVOObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 075882F6287E92089A2D5E849864B5EF /* _RXKVOObserver.m */; }; + 57C4F6EFB30DDD14E960AC2D6B34F904 /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E4DA59576A1914BE355CDECE1AF3362D /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 580D9F7D0E5B3A80462D5C7ECD81A7B7 /* KingfisherWebP.h in Headers */ = {isa = PBXBuildFile; fileRef = F808015688D43C9E0031FC140F6849BB /* KingfisherWebP.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5840C6FBAEEC15A7F3D89435C73AF6B7 /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F39BB06188020CC5D8E4980721C6AC2 /* Enumerated.swift */; }; + 584B2BC80E7104E4C2028C5B4A084F2C /* CALayer+fillBounds.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DBBED0980B464762473A6C89F1C172D /* CALayer+fillBounds.swift */; }; + 5883CC9CCF065AC993539027684B7491 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCF8B7BABFCFD728C47BD91B529B0830 /* Platform.Darwin.swift */; }; + 58F7ADFE261DB23CBC1E99AC29AB8A0A /* Deferred.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CEDFF8B9C44A6519EBCD6F47B0F262D /* Deferred.swift */; }; + 5922A6A0AE7152CF436356B3556F1835 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05E9CE5A83328C8F0A54F45B5A6C8051 /* ConstraintItem.swift */; }; + 593BE6C6A4228D571E38A13C997BEFF1 /* PhotoPanGestureRecognizer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E02070E552BE1AC1C311C83E723E8C37 /* PhotoPanGestureRecognizer.swift */; }; + 594619F78BF7AD4FED3AE54E56B565E3 /* DefaultsKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DAD00461B83C200FA915645CDB0E2C6 /* DefaultsKey.swift */; }; + 595FC1B83C3124AC916FE978EEB3BF90 /* OIMAttachedInfoElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 44BDF7C88D11E13B365E3AF156FE327A /* OIMAttachedInfoElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 59926C66B6FD833E66F57DC8DD184AD3 /* SwiftyUserDefaults-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2EBE4B32A33B53EEC1777BCF15861D1E /* SwiftyUserDefaults-dummy.m */; }; + 59D8740DE7EA85A7E5950D8A4B43AA74 /* Array+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DB6E6F409BB82016215077AA58FFE0F /* Array+Sort.swift */; }; + 59E1BF0AB3F19C50E578D398E26EB227 /* KFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5E0BA4C08C42E4F935DB00E62F37EA2 /* KFAnimatedImage.swift */; }; + 59E8E48227EFAB47CF488B945CDB6A71 /* DropShadowStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75D18C3514B0AB93334F121664FB2959 /* DropShadowStyle.swift */; }; + 59F34874DA4ABB2F5C4E09EA6865936B /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = E796C4048C441AD02DC39D0BD3AC5217 /* ConstraintLayoutGuide.swift */; }; + 5A2FD3386684CE7797BB7FF6F3CCC061 /* KVORepresentable+Swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = A63D5EC5608CA5FC91E9F28422C4C1E7 /* KVORepresentable+Swift.swift */; }; + 5A59B9480008B1E5D4A86DB270FAB470 /* UploadFileCallbackProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = E3AEA4903A4A524064387947E97A51C2 /* UploadFileCallbackProxy.m */; }; + 5A7D0317917962BB4C8608318195009C /* PickerInteractiveTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = B39413E51791A04479D1A4F3B3575E2E /* PickerInteractiveTransition.swift */; }; + 5ABDF47FC0D60B701B5A8E767DC1314F /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF3B0FB9898350076BE5086B8A648CA0 /* EventMonitor.swift */; }; + 5AC012169819B4ACA66D680CBB2D4B24 /* LottieView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F18B21B8DF3684C2CE65E173E832352 /* LottieView.swift */; }; 5ADCE72323C6B6AD702E85FE8B2CEF78 /* MBProgressHUD-MBProgressHUD in Resources */ = {isa = PBXBuildFile; fileRef = 6EFB05F1F29FAD078E29A839C5020799 /* MBProgressHUD-MBProgressHUD */; }; - 5B08596E856E4CC2F34A8A2372F9F764 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B8435CCF2311680F3ED5C6D68A7DB889 /* NSArray+MASAdditions.m */; }; - 5B08AE4C304C9CF545CE37131B3A3BB3 /* OIMCallbacker+Closure.h in Headers */ = {isa = PBXBuildFile; fileRef = 8068E8070D96B799FC962E5A1BC5511B /* OIMCallbacker+Closure.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B08596E856E4CC2F34A8A2372F9F764 /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = F8D1527E921FE86AA6FFED26C884C85C /* NSArray+MASAdditions.m */; }; + 5B08AE4C304C9CF545CE37131B3A3BB3 /* OIMCallbacker+Closure.h in Headers */ = {isa = PBXBuildFile; fileRef = 90C7FFBD13E7069D7CDB43E2A9F7F81D /* OIMCallbacker+Closure.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5B094AECD875F2C5416ACF7D70D6B6B2 /* SwiftyJSON-SwiftyJSON in Resources */ = {isa = PBXBuildFile; fileRef = 7CA3B05F07B063827B34AD2B0DB23706 /* SwiftyJSON-SwiftyJSON */; }; - 5B1E0BF4678455BC502D2B7B2DC48BF6 /* OIMMessageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B119AE75A9A04C0FC424C31B4F171B /* OIMMessageInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B33A02EB936B8CFDEC0DDE34D9C330E /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43601022A470E6D853FE16759BDC655E /* DispatchQueue+Extensions.swift */; }; - 5B3923C137072003EBEBE7E027F56CDF /* UIColor+SDHexString.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C1449F57688BEF3B9D5DCFB485E606C /* UIColor+SDHexString.m */; }; - 5B9D821848443B273832F8F3FFFB6EF0 /* Never.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84934C95F8FF400D99A7515B8C780AAE /* Never.swift */; }; - 5B9F6CF9C6FB7194478B84FB5ADE24E3 /* OIMGroupApplicationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 20FFC6126E63DBE03B5555F2CEA45936 /* OIMGroupApplicationInfo.m */; }; - 5BB6B99986FD7111B3AEBE931C7F507B /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = D6C77430014C62956E5C73E7FC9DBD96 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BD5D9B8F61C124A62C75D9AC36A07BD /* MJRefreshTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = B68BC94B42D3E5F9AD397EA16BE5DD3A /* MJRefreshTrailer.m */; }; - 5BFEA22DAE56385193B4231D5761611F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 2DB115166094A8D48E376C2F668892BE /* PrivacyInfo.xcprivacy */; }; - 5C1D2B938DACC33D9AFE04B62FCC9EFE /* muxread.c in Sources */ = {isa = PBXBuildFile; fileRef = CDB7FF942B90BE067AA3B27A25238BA5 /* muxread.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 5C29F3BFE98B26AA6F4736A4102AB7B5 /* Defaults+Subscripts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FEC6077DC3237CA46D42ABFDC14A37E /* Defaults+Subscripts.swift */; }; - 5C6BACB3E936ADB9BF7B694DE5F76B24 /* lossless_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = AB53487CE53F8FB4D70D0221212EC78E /* lossless_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 5C8FCF7192997E76A80BE80032A6736D /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D117580563C690B3B6D37BB9C3A3CEE /* TailRecursiveSink.swift */; }; - 5C9EA4F07C1D25D08C9A74B8D18D507F /* AnimationCacheProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7742E45657024F0DDFEBD97D410588B /* AnimationCacheProvider.swift */; }; - 5CA3399DA62981599919E71062272E9E /* mapMany.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AB42D5F7656B8882D8F442ED7CC8B8 /* mapMany.swift */; }; - 5CD1164C22DA8E2882BDDD66A611D139 /* YBIBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 58A066A3C3FB7F76C197EADAE084688C /* YBIBUtilities.m */; }; + 5B1E0BF4678455BC502D2B7B2DC48BF6 /* OIMMessageInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F2F48E9C3DD021AFAAF173158C2BC249 /* OIMMessageInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B33A02EB936B8CFDEC0DDE34D9C330E /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D057D2D724536C69CB371BBB638D3B1C /* DispatchQueue+Extensions.swift */; }; + 5B41F4CE095824F7FBA30F59241A020B /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = EA52E2692A0A64130E93FC68F11C4F8E /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5B8E6B2A79FB2854979D399D9748A48E /* enc_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = C6D30DDFE1BF6DACA6804172A77CAFA4 /* enc_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 5B9F6CF9C6FB7194478B84FB5ADE24E3 /* OIMGroupApplicationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B842D2FB9E52687A1AF54CD9740A769 /* OIMGroupApplicationInfo.m */; }; + 5BB6B99986FD7111B3AEBE931C7F507B /* MJRefreshAutoStateFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 958AA68B7BB3D260BE27D937E76C9710 /* MJRefreshAutoStateFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5BBD386F448E2E822F0604BF7102FE17 /* ConnectableObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2F5D4485890B56FE9E54491AF71F8DC /* ConnectableObservableType.swift */; }; + 5BD5D9B8F61C124A62C75D9AC36A07BD /* MJRefreshTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 1276FAED22369627709084038B6FF270 /* MJRefreshTrailer.m */; }; + 5C29F3BFE98B26AA6F4736A4102AB7B5 /* Defaults+Subscripts.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16098AC15C72D87F44C638C00C7C494 /* Defaults+Subscripts.swift */; }; + 5C44470EF1044429D6457EFEC81C018A /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 98E65BD4ED51C14C9AEED0810840CC1C /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5C577E5C5D13313BF4E90DA27CCE1BFB /* MqttDecodeUnsubAck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A8B44A19AF20F37A8875C22357A38F1 /* MqttDecodeUnsubAck.swift */; }; + 5C57EE908FCC18769EBAF8A902DB2AEE /* MGCDAsyncUdpSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = DE2180C541DB14418AE24C9C09FB2399 /* MGCDAsyncUdpSocket.m */; }; + 5C9EA4F07C1D25D08C9A74B8D18D507F /* AnimationCacheProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48C0D0820DEB2784A88DFE222DDC52D5 /* AnimationCacheProvider.swift */; }; + 5CA3399DA62981599919E71062272E9E /* mapMany.swift in Sources */ = {isa = PBXBuildFile; fileRef = 041BE6B75085B8D8F3F94945290C1279 /* mapMany.swift */; }; + 5CAB0AB09FE4A8EF175E154539E3CC36 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B3E7BD37B3CED58C99075C4CAF81FBAA /* PrivacyInfo.xcprivacy */; }; + 5CBD3F3DBA3661CCDD103364E799A352 /* IQKeyboardReturnManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CF2AB942FDE7274CE1F5D9667B6EC127 /* IQKeyboardReturnManager-dummy.m */; }; + 5CD1164C22DA8E2882BDDD66A611D139 /* YBIBUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 95B4863B9298753CB8613C21E39C9B27 /* YBIBUtilities.m */; }; 5CD127F101529C336A07D45CE1106A54 /* Alamofire-Alamofire in Resources */ = {isa = PBXBuildFile; fileRef = 085DBCE7DD98588B2ED103B1C1F36026 /* Alamofire-Alamofire */; }; - 5D07708EC42D549847583DED8030CED9 /* yuv_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55A2692DAD3BED620DA0EB83FC8A09FE /* yuv_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 5D2B46D1F7B27E81D3526A4FA0AE1B50 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35B2495153788DD6EBBE5BF78859D1A2 /* Archive+Helpers.swift */; }; - 5D616EA4592D70E951F33BDA4A7C8DA3 /* UIImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C37D8F8F5792C0FBB119534DD5A5838 /* UIImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DA9F754707804370E363E343E9221F1 /* BehaviorRelay+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D862D8002783A98CA4298CD944721078 /* BehaviorRelay+Driver.swift */; }; - 5DE1E9EE872B702F012DA1E310CCB157 /* MoyaError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC029F6B78235F5DBCA8BEA669E6064 /* MoyaError.swift */; }; - 5DEE0A7469BAACD2EA71A8DE205D333E /* OIMManager+Conversation.m in Sources */ = {isa = PBXBuildFile; fileRef = B23C3A2C524E46A832566B9E8F3565B5 /* OIMManager+Conversation.m */; }; - 5DF2E03715129AA0C77ADD8BAFFBDDFC /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76A218800E579334BACA61C598A34ED7 /* KingfisherOptionsInfo.swift */; }; - 5DFCBADAC7D0FAC82C84A6C8E7BF1DA6 /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 64B047E4298457A88A20E186EB03E519 /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E686B1E1BC041BE4966F71D75978FB3 /* PhotoAsset+Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B7A648559C518EA6DDF715D86F642BF /* PhotoAsset+Network.swift */; }; - 5E6BFEA8AF2EE6BEEAEB1BE2346A33AE /* Documentation.docc in Sources */ = {isa = PBXBuildFile; fileRef = 1B3C11BF7CD9B3366062CA6E41292DCD /* Documentation.docc */; }; - 5E6D9B41BAE736924F76FF8CED634AE4 /* TraitCollectionProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CF5FE8FABF08B21AE1B4496D4FD182 /* TraitCollectionProviding.swift */; }; - 5E763B6068F37F4DB3580ECDF4389146 /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 390E8573959FA2A886CC5567D09B09F6 /* ConcurrentDispatchQueueScheduler.swift */; }; - 5E8A0E4593834354FFFDBC129F5F6081 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 5EA055EF73E9639BBE8A176CF6167602 /* OIMManager+Login.m in Sources */ = {isa = PBXBuildFile; fileRef = A2C6981FB90E9DB2786F343976922ECA /* OIMManager+Login.m */; }; - 5EA7CEF77748C6745DE0713024E68039 /* ConfigurationGlobals.swift in Sources */ = {isa = PBXBuildFile; fileRef = F26E5F82D1BEC8D2C97277B2D67D396E /* ConfigurationGlobals.swift */; }; - 5EE23E0B4A7175D504F4C7E20505DDE7 /* KFImageRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ACE2A2FCD1CB79DDBD88BFB0583269E /* KFImageRenderer.swift */; }; - 5EEAC6A66FA0E6B5830DAA93471DA9FD /* sharpyuv_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 060A177B76119368615F6C08CFBDC704 /* sharpyuv_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 5EFF6487E656A2A2D4324817F28CD5B8 /* mux.h in Headers */ = {isa = PBXBuildFile; fileRef = CAA1AA03A70AEA0C5A111D92FB984179 /* mux.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F09107998BED88EC6FCDFC5305031B1 /* String+SHA256.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE7DEA50FF25BDE8F47C9A4C55418AD1 /* String+SHA256.swift */; }; - 5F45735DF355530CC955066D3C007E19 /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = A5579C794B8B2149F7FF896EA599A88A /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F9A72150ADC8769E1E28AD550D314A1 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 781602548FAD9A55430D9ACCCB6098CC /* SwiftyJSON.swift */; }; - 5FC38C81C52F349565DA5EA2A63E5C5C /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 845BD000FE8A9E1EB45F78DC1E70E618 /* Mappable.swift */; }; - 5FDC4239F7B651092BF582D0F460BAD4 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = D7B4BE25B675D9E62A4F73B632D2FA4E /* UIView+MJExtension.m */; }; - 5FE376C5CEBC1C40441E38EA1EE6BF02 /* vp8l_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 4123C8FEAA4B2A821DFD684756000B82 /* vp8l_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 6094AAEC695E16343CEA6679DE1928E4 /* IQKeyboardReturnManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BC42012201F6578E940392397D5E5F8 /* IQKeyboardReturnManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60981496CF43E012B912C4B93587F430 /* Completable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B613575929F9CDC08E3D012506899530 /* Completable.swift */; }; - 60E8E419DD6F0CA6D556F6B9FE7B128C /* sharpyuv_dsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 36609CDD2BC9353598397AC9D8CB42AA /* sharpyuv_dsp.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 60FF5C656C2BF52195021D00816891E1 /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB3C8E0FE0025F189650168E3AF6C6BE /* AnyObserver.swift */; }; - 61015DC99221A23D700A04291DBA6B67 /* webp_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 466A603F12FA5BB31841F6365BACD39E /* webp_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 6134C81E38AE47AE5DFE0B0B1E6C3380 /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D4F2F0EA5C534B941F600989F2ADB613 /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6138260CB5AF95929889148DFC913A0F /* lossless_enc_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E22F8ED0B0260D140F7BE3E0E75344A /* lossless_enc_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 61461B0D9D7B81C3F8D24066D9A19DCE /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = D86F8CB933244DB4129321F3F634F3F6 /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61507E402F1F7C58BF119995A0479A22 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = DFFB232AA60913FE340369D4DA3F470F /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 616EE17920C59DD34B65912B4763C7A1 /* PublishRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6FB79E861E4F3D89D4BDDCF33899DB8 /* PublishRelay.swift */; }; - 617E7F15F79A3A5DF83B334AAC78E41C /* AssetManager+AVAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11BF0F782E6A624EBD13466CED287C49 /* AssetManager+AVAsset.swift */; }; - 61857C821395B868C65A8FFE4DA1B4E3 /* MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 79D95A5C4EA4042D907803C45FFD333C /* MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61A1702C9F4291517E87A0B355B4AD4E /* alpha_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 645B6195BA2EF0CC400908DC32A609F8 /* alpha_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 61A3DA271E425F1B43772BA3649F8425 /* ISOFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4C026C1C0C1FF7FEE5FF1768B7C1F9D /* ISOFormatter.swift */; }; - 61ED64340371AB30B936A019C22C376D /* UIView+IQKeyboardManagerExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B6E91C3E6BDDC7B05E43C0052936B6 /* UIView+IQKeyboardManagerExtensionObjc.swift */; }; - 61FD73CF8706BCE3BA5A3A357A15C35A /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8871BF84E79608846B442F26D2DED761 /* InvocableScheduledItem.swift */; }; - 626865A3EF3A6D4A97808AFAF335BBFA /* LottiePlaybackMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8646AABF9B045A43689BB1CD400420 /* LottiePlaybackMode.swift */; }; - 62B90C6FC83F91F91A4BF12022C7B050 /* UIView+Parent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F458BC861920FABA639310941239FD72 /* UIView+Parent.swift */; }; - 6321B6047A2176553365F6367D1C4BDD /* DDLogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 384D8E218EB66167C5F83EADB6F99879 /* DDLogMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6376D1EF42AD00D03711B680B2986CEB /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = AD3F046E6A26BC1343E61DFF8913EEBD /* SDImageAWebPCoder.m */; }; - 6377643B1FEC4330947E1DA0BC971FBE /* AnimationContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41CC3F3DD2BB8D3B4156748F2141ED40 /* AnimationContext.swift */; }; - 638F2273D87A721B52DBE6CD24E60CB2 /* UISlider+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D48CB3120F622B1DC4E9B3AF51D0A7F /* UISlider+Rx.swift */; }; - 639D0DB05E52760FCACD626490DEEA46 /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B194F603A90189ED3671958DAE609175 /* DispatchQueueConfiguration.swift */; }; - 63A8CE0CBE0ADD489C20A0D7F51FC1A5 /* TextLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A77598EF3EBC00300D5A3F9E4B15F065 /* TextLayer.swift */; }; - 63E0DD5A7FA5099D1811E8C9E709830C /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 035A29367C3694753943C9E78FE114DE /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 63E1B3AEF8C51B72351EA0E978E131FB /* EditorController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F84C87D3D449237C53594AAF0191B383 /* EditorController.swift */; }; - 64308875A4ADBE88D2C76D622FACF1D2 /* YBIBAnimatedTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 28E32AB0F1A47BA5A7A51B18B2079AB8 /* YBIBAnimatedTransition.m */; }; - 644D53AECC6A137FB73F210875551EF7 /* NSControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = F31120DF2E5C142AB737BF64F301D994 /* NSControl+Rx.swift */; }; - 6483BAFF84F868056DECD840E8F9D359 /* CustomPathAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38EEDE814FAD2740F02699B6E4BB0001 /* CustomPathAnimation.swift */; }; - 6483D6F6B26818AE1CEDCB90AFA6B22B /* ignoreErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A86205BBD9A0C0A9ABA8E148F66C648 /* ignoreErrors.swift */; }; - 64AF3888E1DB7049200A3A5C28A26D9D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = D33E322A3E5E2970FF84AD445CACE4F1 /* PrivacyInfo.xcprivacy */; }; - 65531B806F8327DD184D7A07D74829E5 /* UIScrollView+reachedBottom.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB9F979185CFD56D1A727A76434687D2 /* UIScrollView+reachedBottom.swift */; }; - 6587CF9B280E8628F362B44853AE36CA /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E47BC20E69F8FD24594FFC1D8910599 /* SDMemoryCache.m */; }; - 659FC93CF2E7E3959D6A4E19F12D4FD8 /* LottieURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0786928B2C05998AE8F0FF54CE85D00 /* LottieURLSession.swift */; }; - 65E1C640FE8331BF45094B2A6A66BA05 /* AlbumTickView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F6E07FC92F07EE8755B8F09EA81360F /* AlbumTickView.swift */; }; - 65F629E1E7896CD05D7DBDB31719F92D /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = F02E19AB613C5B9E4A3BC77C82DD4D93 /* Queue.swift */; }; - 66B954DE210240B6BEAE4194C864155E /* dec.c in Sources */ = {isa = PBXBuildFile; fileRef = EFEF2502BCF487C0B50FAB112E1518D2 /* dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 66BAA48E3E4563168EAF3C8E48CDFE4B /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 972CC00CAA521E6FA780F098E389470A /* SDWeakProxy.m */; }; - 66C2FC73A91E265FA5A09F2D0B99EAF0 /* ObservableConvertibleType+Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05B1D3E92EC969DE3979A664DD430938 /* ObservableConvertibleType+Infallible.swift */; }; - 66C98F9CBC310ABF9199767F97CD0D06 /* Editor+UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402415CFF7312E2B08AADA79DA73A4E1 /* Editor+UIImageView.swift */; }; - 66E62D8247E22A3B50148739B610C704 /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 82DA9A393789D615C04307DCC37C663F /* DDTTYLogger.m */; }; - 66F024DCBE9C5AE50FD48FE6876D5DEB /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53902042B5E9FA22F75D07AD3A462902 /* ResponseSerialization.swift */; }; - 66FC880217F38970CC056F79129A7727 /* yuv_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 82DC469C28323FCEAC87DA19052CFFE9 /* yuv_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 671347F24D9FDFA45AC894760A275E23 /* YBIBDefaultWebImageMediator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E18007B9B2D27C7163D2478DCA136F4 /* YBIBDefaultWebImageMediator.m */; }; - 6728C0424CEE44AA9D3CE04848A99706 /* AccessTokenPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B96FFDF9BCAA248D1DC8C88267CED019 /* AccessTokenPlugin.swift */; }; - 6739B9085488745EA197B1D58F789BD7 /* DDLoggerNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 28504FCCD451928D39B76F37745A0206 /* DDLoggerNames.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 675B77428EFD5FED7CE72863A1FE8962 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 678EDDCD6ED116BC5100C5924A9BB0C6 /* DiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1C5BEE9A50F34D3FE4396E083ABA3E4 /* DiskStorage.swift */; }; - 679CBDF30126442DC86B51F7334D5818 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02FF9BD791E7E79B5F6D78F088939100 /* Archive+ZIP64.swift */; }; - 67D1A6D90F2FA281D46D5A902DC57F82 /* curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = C107644E8F1B43B9190403B7575902BF /* curry.swift */; }; - 6815F83EA9B7321CCD853754F859FCDB /* VideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B237C461DD75E2FE67F4D105C480806 /* VideoPlayerView.swift */; }; - 682DB56C577287486871A296ED0BBED4 /* LayerTextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59FC1BD33170A2BC4D498D0B282E04C9 /* LayerTextProvider.swift */; }; - 685573DE5F3B2F837EAB992129C06732 /* OIMManager+User.m in Sources */ = {isa = PBXBuildFile; fileRef = D1298B1397ACD7C9C70CFD673D14E200 /* OIMManager+User.m */; }; - 685CB5FF6C164A33D25A02BCBDB4E608 /* WebPProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B254E7B7EBE8EE0B7A1BB6FEDE08103 /* WebPProcessor.swift */; }; - 6868DF039B2BBD8A30C5FC9F404AD719 /* BehaviorsConfigurableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFFEA7E4A731859F2E8145F75A7FCBA0 /* BehaviorsConfigurableView.swift */; }; - 68C8CC790FD5CB13EB2631917A0A683B /* TransformOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D6CE6CF210C12D6787846819CB8D3B1 /* TransformOperators.swift */; }; - 68F4885E04AA995D1E8FB8B28E0EE3F9 /* AnimatableSectionModelType+ItemPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CE41C5B80EA05791BE83C7126E9D35C /* AnimatableSectionModelType+ItemPath.swift */; }; - 691D7ABB712F2F5760FE1544D911B304 /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE6F22872D0C90A564CE9655853DB065 /* Zip+Collection.swift */; }; - 69345CBCB31076EBF8A2C5885AF973AB /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = C59EC7A1C6159115643B175BCBF65033 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6941289A9343A4DD3B746BBEA4F1AB04 /* NotificationCenter+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A33292F139F4D03763C451D174D6627 /* NotificationCenter+Rx.swift */; }; - 697D2AE2F0BF2F0C76AD53397FC66A29 /* UIButton+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ADF97EACA948B2C7006B53AEB1FEF8E /* UIButton+Rx.swift */; }; - 699ECA87C4D5F7C18A7D473DAFEF5A02 /* PickerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B281B08D41A8C1539780B8C2DCEDFBFB /* PickerConfiguration.swift */; }; - 69AB582F7B619D2BB667DB19541AE066 /* DDASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 779A45EE4D8A55285225137A022FF947 /* DDASLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69B74FDF7C33B63E60F97F0DA06AA999 /* StyleIDProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = CACA5F91164444FD018604161211CEC8 /* StyleIDProviding.swift */; }; - 69C938D0947A9B1BC57063E62FD6FD80 /* OIMSimpleResultInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 77677AE1490EEECD80C448F28787D67E /* OIMSimpleResultInfo.m */; }; - 69E353C99C6EEA3C93CCF2E526460B9D /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = B15D37276FF9888DD3E00DD6F5196E38 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69F6B98B0F745F5C0D40E5BB813D3358 /* EditorToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C130B750A15BEC82321EE1FB7C52C2EE /* EditorToolView.swift */; }; - 69F72FE9F2E27DB15981E62CF31AD23F /* GradientFillNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 020D6025AE9566485C60DFB72DEE5B18 /* GradientFillNode.swift */; }; - 6A5917F884AA23BE533264DC2B0DEB55 /* YYImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E3B2CD25D2368F0AD91857FAB79E8FB1 /* YYImage-dummy.m */; }; - 6A78A39A6B1CA7D9DA8ED7EE0DAA5E32 /* YBIBToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = CB8D8C5604011BB605F1D1874F011C0E /* YBIBToastView.m */; }; - 6AE82541A8951A34AF43A20E2622CFD7 /* PhotoListCellConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1294CE8A5F4523CADF3F15AD30A2FC36 /* PhotoListCellConfiguration.swift */; }; - 6B1E9342D1D1B3FF6761973B54846C5D /* cost_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 02446533D9FB702A89B3DEA51B1A3BFE /* cost_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 6B2EE580E51F236995465C1FD8569D3B /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B65AF04777A2385E03DD8913EFAE5D7 /* CurrentThreadScheduler.swift */; }; - 6B4F5C299432BC6D39F216FB1956F526 /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = E1D1566EFC577C509F7BD737CAC55973 /* SDDiskCache.m */; }; - 6B9ED16B62C85179D15C9568D602B72E /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 541F4A250353BC493AD6863F891D9F95 /* SDFileAttributeHelper.m */; }; - 6BCE7872B0E75FF5B7CCDDCCC8587571 /* AnimationKeypathExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EDD5DC412BB584AD5F6B72E3728689F /* AnimationKeypathExtension.swift */; }; - 6BE4B832555B3FB32C2854A933EF5E8E /* DDLog+LOGV.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FFDD175562EA9E04F00CB58EBF9A6D7 /* DDLog+LOGV.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6C3CB2A3016E06B0C80D7859A39AB4FD /* EditorToolOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23F9CE86B59F74334043FA327497FA4A /* EditorToolOptions.swift */; }; - 6C56558199B60AB6A4090D2F4ACE67ED /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = CE6A24FF0DA7E2B9D9E7D6432F783172 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6C71098ECC662C8B37BDA8243820F070 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C77D66DCCBD20AA11966F53C867FF4FB /* Accelerate.framework */; }; - 6C8F51544B7FBA7E98A28A644A2A4395 /* Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FB7CFB34CBF3DE8D9065DC420ED9447 /* Diffable.swift */; }; - 6C988731931639D9E205C5B286385982 /* count.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4912A79A08146F11C569FC6DA4735C57 /* count.swift */; }; - 6CA9456A80528FE611303867B289BE1C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 6CAB59AA86D67BD46B82E326058258A1 /* ImageDownloaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2208D0296FB7B05852D116F0936A6DE /* ImageDownloaderDelegate.swift */; }; - 6CABA18CE8DB786EFDA231AF69A7D4B2 /* KFImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7BCE18E08BCB73003FA4EAB713A67F6 /* KFImage.swift */; }; - 6CB9E2AE85D2F366B426D4BE356944DA /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B1FD911A7C53A5154FB7647CA6EFC70 /* Sequence.swift */; }; - 6CBD6AF70B10AE502415349AB3A22F7F /* DataIDProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3E4BEB998FE521E695D73DC9BF2ECA90 /* DataIDProviding.swift */; }; - 6CEB67FA720C11B6A3D90568A24E2CD8 /* picture_psnr_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 081D3FFF22883789F72BD87362697E6E /* picture_psnr_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 6CEB91B9D0F79F63B220B9363D72B03C /* frame_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = AC2AD7BD30CB7339F736B669B8A956DF /* frame_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 6CEC610F6C21A3717EC2E0486100F20C /* enc_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = F469E5185C17FD6B096DA1F3B7C3DC90 /* enc_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 6D11B5E3D02CE6F3FD35BEC9305A8D0D /* CredentialsPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE9BA9868608B0F72E0F1A2BCFA4CD6D /* CredentialsPlugin.swift */; }; - 6D1C4245850FFCCBE3B1C7AA6B945554 /* LivePhotoError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C247ABAB37F0C054419181BFC3D3E7E /* LivePhotoError.swift */; }; - 6D3071F804219E6A520372754BA9F09C /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEFCC919734F12F29D14D4BC157695AB /* URLConvertible+URLRequestConvertible.swift */; }; - 6D5C57B867317D87857E5ACC76B478A8 /* TimePeriodChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE42C469235FE439145DB1ED23358021 /* TimePeriodChain.swift */; }; - 6D7439D4CF0245AC4432B11BBF057250 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 6DCECAF4E87E7779497CACBBE6021E3E /* DropShadowAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A27D042C38FA3F775A3165A4F4623C4 /* DropShadowAnimation.swift */; }; - 6DD7F06F6985BCC0F95AEA9472F1A304 /* Infallible+CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CB8B56D6AF6C0096630403D14A6A2F8 /* Infallible+CombineLatest+Collection.swift */; }; - 6DE4EF429E51202F0D58FFC6BA0A929C /* YBIBDataProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FF0DAC53114F5A38ED18BC9E4CFB6EF /* YBIBDataProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6DE6C7F0FA965828E4FCE687BF75FBBE /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = A2333B9AC870862E2D29C8F94BF1F89A /* MJRefreshAutoNormalFooter.m */; }; + 5CF988F49F44624A4A8B02BF1CCE4BBF /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21AAE531B9EF7DB927D524FE45E5365C /* IQInvocation.swift */; }; + 5D18F9474E82C79D5CB94852FD2F2ABA /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51C4B6A72A5C25F467F679AA6756374B /* Maybe.swift */; }; + 5D2516D112A1602C01C94A875FF3C165 /* UIView+IQKeyboardExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59DF3EC3D68BB1FD12D0E26E697ADC67 /* UIView+IQKeyboardExtension.swift */; }; + 5D2B46D1F7B27E81D3526A4FA0AE1B50 /* Archive+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8363BA837F7E198BFBCA2B3BCA30959 /* Archive+Helpers.swift */; }; + 5DA9F754707804370E363E343E9221F1 /* BehaviorRelay+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 614D20EE3407F1CF8CF6E98954CC88DE /* BehaviorRelay+Driver.swift */; }; + 5DCFDCA51964B19641B53CDEEA1496D5 /* sharpyuv_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = D9805B1AE674AAFF2B25D9BB35A39FCD /* sharpyuv_cpu.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 5DE1E9EE872B702F012DA1E310CCB157 /* MoyaError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 596895B99E7E27AAF130D98206857EC7 /* MoyaError.swift */; }; + 5DE57E6CA0FC3C9752AA4E895D3F4B10 /* mips_macro.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FB0A97444E8C7D469D5B0FF79C781D6 /* mips_macro.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5DEE0A7469BAACD2EA71A8DE205D333E /* OIMManager+Conversation.m in Sources */ = {isa = PBXBuildFile; fileRef = BA50CF2B5D2F41B255A98CBFC75EF571 /* OIMManager+Conversation.m */; }; + 5DF2E03715129AA0C77ADD8BAFFBDDFC /* KingfisherOptionsInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1059A598BA4F9CA60155BA8373D9F178 /* KingfisherOptionsInfo.swift */; }; + 5DFCBADAC7D0FAC82C84A6C8E7BF1DA6 /* MJRefreshStateHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 01E2CDB0E2DB23B7E2FDD6F56D617292 /* MJRefreshStateHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5E0A53FFAB0FDFB5668859F6A2819F5D /* MGCDAsyncSocket.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F5B52F8C128A08525589088D88B446A /* MGCDAsyncSocket.m */; }; + 5E1CD661F9FC277B7E32DA348FE0DD1F /* MqttDecodePubComp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A8F1EA5A5A4DAA6EBB99FAC4B0D994C /* MqttDecodePubComp.swift */; }; + 5E558455B862C4CE21399D45C2CBC479 /* FrameUnsubscribe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CC755210EE7CF0DEB9FD2F3DBDE1873 /* FrameUnsubscribe.swift */; }; + 5E686B1E1BC041BE4966F71D75978FB3 /* PhotoAsset+Network.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A0F856E93522334178410DBF24E676D /* PhotoAsset+Network.swift */; }; + 5E6BFEA8AF2EE6BEEAEB1BE2346A33AE /* Documentation.docc in Sources */ = {isa = PBXBuildFile; fileRef = 2FFC90957F5D67E24F21D774D7AA39C2 /* Documentation.docc */; }; + 5E6D9B41BAE736924F76FF8CED634AE4 /* TraitCollectionProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE120212B6286301289F194C73D0175F /* TraitCollectionProviding.swift */; }; + 5EA055EF73E9639BBE8A176CF6167602 /* OIMManager+Login.m in Sources */ = {isa = PBXBuildFile; fileRef = D63FD645FB3FE4E761A51B32132ED16C /* OIMManager+Login.m */; }; + 5EA7CEF77748C6745DE0713024E68039 /* ConfigurationGlobals.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BEA2B127E818A0484E4A0EED9286EF5 /* ConfigurationGlobals.swift */; }; + 5EE23E0B4A7175D504F4C7E20505DDE7 /* KFImageRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCC5AC3823AF1F18738C22FBEA8154BF /* KFImageRenderer.swift */; }; + 5F09107998BED88EC6FCDFC5305031B1 /* String+SHA256.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0BC8E970B9984DFA602426BCBC66226 /* String+SHA256.swift */; }; + 5F45735DF355530CC955066D3C007E19 /* MASViewConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 31A4A6EECE7B81CAF7FDDD1978EE7249 /* MASViewConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F6AAEF831D378F4E6A3FF51825ED87A /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 15C41B1F75E0AE177414264D43A54B7D /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F73B8422D7F873146B63613F05D2059 /* SDWebImageCacheSerializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 75AA059908618543FD7A7E7DD4C6BEAA /* SDWebImageCacheSerializer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 5F7A8BF1C3C7E701CA9E83A6A749E804 /* Catch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58786133E8B41F9CB8F1338AF6A58900 /* Catch.swift */; }; + 5F81D7B4079A62D601FB3264F3E526C0 /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = F995FF505792148D15A05FD9BEEBD27C /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 5F9A72150ADC8769E1E28AD550D314A1 /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = D47AAA9B971BFF2F0C01320573159825 /* SwiftyJSON.swift */; }; + 5FC38C81C52F349565DA5EA2A63E5C5C /* Mappable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E8FA08C357760274FBE094F7121F08 /* Mappable.swift */; }; + 5FDC4239F7B651092BF582D0F460BAD4 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = EBAC8E57DF4784F9DECD58863EA59EE5 /* UIView+MJExtension.m */; }; + 6134C81E38AE47AE5DFE0B0B1E6C3380 /* MBProgressHUD-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = A42061DFC6E2B374C142A8DB9B3289E6 /* MBProgressHUD-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61461B0D9D7B81C3F8D24066D9A19DCE /* MJRefreshGifHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = C85509D11138B3103A30250316CBE2D6 /* MJRefreshGifHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61507E402F1F7C58BF119995A0479A22 /* NSArray+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 394D94A4C79F8E0EE3A26D9204D6DC3F /* NSArray+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 615435C7081677EE9C7B30E52B6FE1C9 /* UIImage+ExtendedCacheData.m in Sources */ = {isa = PBXBuildFile; fileRef = A57A3781B2D11ED00B067F77C51CD911 /* UIImage+ExtendedCacheData.m */; }; + 617E7F15F79A3A5DF83B334AAC78E41C /* AssetManager+AVAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27CB1D6F3889BFEDD86BF0A7F0C55EFB /* AssetManager+AVAsset.swift */; }; + 61857C821395B868C65A8FFE4DA1B4E3 /* MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BD8508309633303254E1D0D64DC2DF9 /* MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 61A3DA271E425F1B43772BA3649F8425 /* ISOFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF9289DFE96B0D477395C1AE2E955C29 /* ISOFormatter.swift */; }; + 61E2F6FE736F568F36926985FE3C7A80 /* picture_rescale_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = FD3856AE45707685922FEF462D919D7B /* picture_rescale_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 61ED64340371AB30B936A019C22C376D /* UIView+IQKeyboardManagerExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BEFFF17F16298B1DF23F0FD66D7EADA /* UIView+IQKeyboardManagerExtensionObjc.swift */; }; + 6201F1CC44EDDCF8F148A9C7B4781C34 /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = D5E5340CF5421A590D1A25C045077BA8 /* SDImageGraphics.m */; }; + 626865A3EF3A6D4A97808AFAF335BBFA /* LottiePlaybackMode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B6958855F647734EBB24E8340EEC38B /* LottiePlaybackMode.swift */; }; + 62B90C6FC83F91F91A4BF12022C7B050 /* UIView+Parent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28EC7434D8007BC07802B27B8D6FB1A8 /* UIView+Parent.swift */; }; + 62DFFFA4BDE24874632B3B498C6BE2C7 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 103BCD5D91A86629DA7A02BC546D632F /* SDImageCacheConfig.m */; }; + 6321B6047A2176553365F6367D1C4BDD /* DDLogMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 6AF85A1017DE15A4101657601A4C5A16 /* DDLogMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 632D509D4BB36A746609BBE86A643440 /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA1C252AB5B246A0A86CC016441BE5E /* Scan.swift */; }; + 632D8A65110832A6FB8BAA12CBEDD566 /* UIView+IQKeyboardExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84315F79BA3DE29DC734A52F0D9418E9 /* UIView+IQKeyboardExtensionObjc.swift */; }; + 634EDF12A3BC3BED298B2DC6E2A000D3 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 808C026501781567CD3AA43ABB6D5AD5 /* PrivacyInfo.xcprivacy */; }; + 635C4536301F19B49DF66A23969A9D15 /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DE422219528B0F8C044E9C23AC7E206 /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 6377643B1FEC4330947E1DA0BC971FBE /* AnimationContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8BE3802244F0F467A022E91DB6B2B712 /* AnimationContext.swift */; }; + 638F2273D87A721B52DBE6CD24E60CB2 /* UISlider+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17213D82F9306746169202894B0EAD94 /* UISlider+Rx.swift */; }; + 63A8CE0CBE0ADD489C20A0D7F51FC1A5 /* TextLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63B4C977FA84E6204CA76F7CD5A2E079 /* TextLayer.swift */; }; + 63E1B3AEF8C51B72351EA0E978E131FB /* EditorController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFE15059268A18A5A2987D96995CCA9F /* EditorController.swift */; }; + 64308875A4ADBE88D2C76D622FACF1D2 /* YBIBAnimatedTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C0661ACD87A5C3E6324F3D7E16411DE /* YBIBAnimatedTransition.m */; }; + 644D53AECC6A137FB73F210875551EF7 /* NSControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7B9D50DDFEECB6C6DE1EAEA0BC8ABE0 /* NSControl+Rx.swift */; }; + 646D5CDC2EB30283ACEBFC0AEDBF75CD /* palette.h in Headers */ = {isa = PBXBuildFile; fileRef = 05B1B4DA4C8FF18FC71780D40B4D6E64 /* palette.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6483BAFF84F868056DECD840E8F9D359 /* CustomPathAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4CF735786E6DCCDD3EC08F8BD99569E /* CustomPathAnimation.swift */; }; + 6483D6F6B26818AE1CEDCB90AFA6B22B /* ignoreErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FD132A96BC176A0BD3C8AB88344FAC5 /* ignoreErrors.swift */; }; + 64B7F47DDA02615D2E0C7A26DD6761C9 /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D06090901658DC9635ABC2BCBFACEE /* CombineLatest.swift */; }; + 64CC18C8B38278628CCA1B8D4E0631DE /* UIView+RespondersObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = D20EDFE87D7E3E82F987FC08A4F00CEE /* UIView+RespondersObjc.swift */; }; + 64E1CC958AA43AC1F27EB7AC00496239 /* lossless_enc_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = A06B171ACB56AD93E1BD1EBEF5864588 /* lossless_enc_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 65531B806F8327DD184D7A07D74829E5 /* UIScrollView+reachedBottom.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA661D4F822BB9E46CE4E3531131BCF2 /* UIScrollView+reachedBottom.swift */; }; + 659FC93CF2E7E3959D6A4E19F12D4FD8 /* LottieURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59FF368F95FB6496AE29853E9BA5BD14 /* LottieURLSession.swift */; }; + 65B58399187958BF83B8D7AE27101FD2 /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD1620B77332357059766C062C7334E3 /* First.swift */; }; + 65E1C640FE8331BF45094B2A6A66BA05 /* AlbumTickView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F42108168E3827DDBA4CF6555E2306D /* AlbumTickView.swift */; }; + 65F629E1E7896CD05D7DBDB31719F92D /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75CFF08BA767C49703863DFF96165154 /* Queue.swift */; }; + 6628A73EB3F4DE1C02C8E057E9327BF0 /* Sequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 767C6D24F65E9C5553D193CDDA8BAE82 /* Sequence.swift */; }; + 663698A6CE77790999079FA690A29902 /* enc_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 5F7C7512CF2FDDA57441C76E292DFA54 /* enc_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 66AAA871D0FEB3988852B5D7952ADE68 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 66C98F9CBC310ABF9199767F97CD0D06 /* Editor+UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F75E2A009040E7C88B0F41EF87FC7B /* Editor+UIImageView.swift */; }; + 66E62D8247E22A3B50148739B610C704 /* DDTTYLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = EB5CE15E8B1EC758E154A3D6D0DBB372 /* DDTTYLogger.m */; }; + 66F024DCBE9C5AE50FD48FE6876D5DEB /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = B87219E2EAC813A4BC04BD1792CFAEE4 /* ResponseSerialization.swift */; }; + 671347F24D9FDFA45AC894760A275E23 /* YBIBDefaultWebImageMediator.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1127638FB310D5F12AAE25ED25158A /* YBIBDefaultWebImageMediator.m */; }; + 6728C0424CEE44AA9D3CE04848A99706 /* AccessTokenPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B576EDF7A86415CCC3E2A8821457526B /* AccessTokenPlugin.swift */; }; + 6739B9085488745EA197B1D58F789BD7 /* DDLoggerNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 48C58BD4112BA7365B046A10EC59B716 /* DDLoggerNames.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 678EDDCD6ED116BC5100C5924A9BB0C6 /* DiskStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 477AB1A71336EC844111AF30835E2B70 /* DiskStorage.swift */; }; + 6795DC52B0A601D81E66EA32B743DFC4 /* SerialDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1264E6B84B65131BAEEAC3BA08283C42 /* SerialDispatchQueueScheduler.swift */; }; + 679CBDF30126442DC86B51F7334D5818 /* Archive+ZIP64.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A095D9FE603AEF527B68874E180B2A0 /* Archive+ZIP64.swift */; }; + 67D1A6D90F2FA281D46D5A902DC57F82 /* curry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 231246BF2A5913AF9CF769DF47AB7806 /* curry.swift */; }; + 6815F83EA9B7321CCD853754F859FCDB /* VideoPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA9EC52758D4E3583A39B592710F605A /* VideoPlayerView.swift */; }; + 682DB56C577287486871A296ED0BBED4 /* LayerTextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFACA4AD88EF25B756AD0FDF375677F3 /* LayerTextProvider.swift */; }; + 685573DE5F3B2F837EAB992129C06732 /* OIMManager+User.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C2E793CB5C9B430F36FE3573B5EBAB4 /* OIMManager+User.m */; }; + 685CB5FF6C164A33D25A02BCBDB4E608 /* WebPProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFDDE473595828D6E2632E61085FBD8B /* WebPProcessor.swift */; }; + 6868DF039B2BBD8A30C5FC9F404AD719 /* BehaviorsConfigurableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB37EDCCBA41B0C9641257E086DC8ABF /* BehaviorsConfigurableView.swift */; }; + 68C8CC790FD5CB13EB2631917A0A683B /* TransformOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33019DB9E82E9B11DA3C4C5B100E7390 /* TransformOperators.swift */; }; + 68F4885E04AA995D1E8FB8B28E0EE3F9 /* AnimatableSectionModelType+ItemPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C73556EF652E6AAF642783546B02DB0 /* AnimatableSectionModelType+ItemPath.swift */; }; + 68F5FB238662CAE753DDBC9E7DA89855 /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 859AB61AB5CAC4F8321CE1373C70291B /* Reactive.swift */; }; + 6925B90AA3C1D38A83202C2609F7C3F7 /* Infallible+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A4BFE94DC6BB805A8659EF7C8C4D022 /* Infallible+Operators.swift */; }; + 692B37D44CF7B495DD9E1FE3177692D3 /* DispatchQueueConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 540AF0A1A3033C4B8E1EA0CD46426BD6 /* DispatchQueueConfiguration.swift */; }; + 69345CBCB31076EBF8A2C5885AF973AB /* MJRefreshComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F2ABB2AEB2CB29DE8F616DDE208CB10 /* MJRefreshComponent.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6941289A9343A4DD3B746BBEA4F1AB04 /* NotificationCenter+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9026790117C43E79599D121A106C2214 /* NotificationCenter+Rx.swift */; }; + 6944CE1C5E07D8DACCDC8DFEA4934AC7 /* dec_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 46A6A76613C60A158BED1E4B71FF5A5E /* dec_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 697D2AE2F0BF2F0C76AD53397FC66A29 /* UIButton+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12AEC4022B4E74BA76823EDA45EF7B0E /* UIButton+Rx.swift */; }; + 6982C676E5EA5D0EFDF7E13FE8747A9C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 6989DB840B86F4E1507C836814F8A35F /* rescaler_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 616CBDDA5612B517A144C40409DE85D5 /* rescaler_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 699ECA87C4D5F7C18A7D473DAFEF5A02 /* PickerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 104AB2BBDAA118AB5B3EC43FCFB764A9 /* PickerConfiguration.swift */; }; + 69AB582F7B619D2BB667DB19541AE066 /* DDASLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 216E0D99EA559AD8E578C6AC676FFCBE /* DDASLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69B74FDF7C33B63E60F97F0DA06AA999 /* StyleIDProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE7C96DF1255DC3006CBEA26F1C9BD7E /* StyleIDProviding.swift */; }; + 69C938D0947A9B1BC57063E62FD6FD80 /* OIMSimpleResultInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = C4C7C3A5F449BC7B132C23B891237D99 /* OIMSimpleResultInfo.m */; }; + 69E18ED7FA1CFA345EF5D00B7ABA156B /* common_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 82E48720FDE1FD73E9188821ABBDEB63 /* common_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 69E353C99C6EEA3C93CCF2E526460B9D /* UIScrollView+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = F84E727F70A15E83B7D25FD1B1473F30 /* UIScrollView+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 69F6B98B0F745F5C0D40E5BB813D3358 /* EditorToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BEE403D1E699A5CEDB82263240DDC64 /* EditorToolView.swift */; }; + 69F72FE9F2E27DB15981E62CF31AD23F /* GradientFillNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C79119E0FD1944C9FBEC3DBA813288B /* GradientFillNode.swift */; }; + 6A78A39A6B1CA7D9DA8ED7EE0DAA5E32 /* YBIBToastView.m in Sources */ = {isa = PBXBuildFile; fileRef = 87DF08BF0E16E2F0B672516B99521229 /* YBIBToastView.m */; }; + 6AD5356A624519885BAED049B683EFDA /* enc_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5E5BBE340E41A5864BF05B58060A75F6 /* enc_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 6AE82541A8951A34AF43A20E2622CFD7 /* PhotoListCellConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A29C91398140EF644669A498986A8D /* PhotoListCellConfiguration.swift */; }; + 6B469D8584D94A1E7A2B749689A56555 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7D90B17797653D7003F3F7A500E74D96 /* PrivacyInfo.xcprivacy */; }; + 6B8B861CEB17FF5AFE9600DA45E45915 /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 110065EE86084581A6832FFCF7A27380 /* GroupedObservable.swift */; }; + 6BA0AD20FBC3135653D0191F4CF3CBCF /* backward_references_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 240B3E67D8767688B64A581BA5949261 /* backward_references_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 6BCE7872B0E75FF5B7CCDDCCC8587571 /* AnimationKeypathExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FE1963B6D2F054A9E8BFAFEB6F716FC /* AnimationKeypathExtension.swift */; }; + 6BE4B832555B3FB32C2854A933EF5E8E /* DDLog+LOGV.h in Headers */ = {isa = PBXBuildFile; fileRef = 749621F3F175B83BA32CAE04C651F4DF /* DDLog+LOGV.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6C2B82F5D82AF2E6A5AE58529158BB1C /* YYFrameImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C1E7106CBA77D0D297129D49B1EB3 /* YYFrameImage.m */; }; + 6C3CB2A3016E06B0C80D7859A39AB4FD /* EditorToolOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 015B5597E8B9F59CF0D5FAE133C17DEF /* EditorToolOptions.swift */; }; + 6C71098ECC662C8B37BDA8243820F070 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CD73578573AF5AD46B0F08EBEDF1A5 /* Accelerate.framework */; }; + 6C780F3D2186743F9015C2B1AA6ACD7D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C0BB4CBF6048C1CFAA8CF2FA39D85DDA /* PrivacyInfo.xcprivacy */; }; + 6C8F51544B7FBA7E98A28A644A2A4395 /* Diffable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D83A09F42FB0A0DEA3C2CE28C6C23CCF /* Diffable.swift */; }; + 6C988731931639D9E205C5B286385982 /* count.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BC19FD29586F1661E5FB91599DACA72 /* count.swift */; }; + 6C9E4124129EBA01A46BC58D63017EC3 /* CocoaMQTT-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5630C95267C5EDAFCAA18472484F8E66 /* CocoaMQTT-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6CA9456A80528FE611303867B289BE1C /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + 6CAB59AA86D67BD46B82E326058258A1 /* ImageDownloaderDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE508651E5E549F78249BDCAD16BFD32 /* ImageDownloaderDelegate.swift */; }; + 6CABA18CE8DB786EFDA231AF69A7D4B2 /* KFImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80B2C73E9BDABA3F11BF3DB85DAD250A /* KFImage.swift */; }; + 6CBD6AF70B10AE502415349AB3A22F7F /* DataIDProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11335B714622306F91A1F2FB8E0B3186 /* DataIDProviding.swift */; }; + 6D003B1C03E4B62C6AC86FB2BB8F725E /* IQKeyboardToolbar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E2853814085998597B40FCD6FF69185 /* IQKeyboardToolbar-dummy.m */; }; + 6D11B5E3D02CE6F3FD35BEC9305A8D0D /* CredentialsPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C89B6D5952E42BDB087357BEDAAA88 /* CredentialsPlugin.swift */; }; + 6D1C4245850FFCCBE3B1C7AA6B945554 /* LivePhotoError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB177B7132DB39C91B6B2D930AA7F6B /* LivePhotoError.swift */; }; + 6D3071F804219E6A520372754BA9F09C /* URLConvertible+URLRequestConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BE1232171B86E58A95A465EF0D69CEA /* URLConvertible+URLRequestConvertible.swift */; }; + 6D5C57B867317D87857E5ACC76B478A8 /* TimePeriodChain.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4457220F18221DEEE691C455779CA75 /* TimePeriodChain.swift */; }; + 6D7439D4CF0245AC4432B11BBF057250 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 6D83B5DBF22DBDFCE140413476DAFA8A /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 658B6C4630AA41F05C5A0BE18A041CEE /* ScheduledItemType.swift */; }; + 6DCECAF4E87E7779497CACBBE6021E3E /* DropShadowAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C224AC4EDC0D96C8B5598D7A2323510D /* DropShadowAnimation.swift */; }; + 6DE4EF429E51202F0D58FFC6BA0A929C /* YBIBDataProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E17D7BAA52A7884B7F49C0C06778BF7 /* YBIBDataProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6DE6C7F0FA965828E4FCE687BF75FBBE /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 805779FF7031E298D79B68E54C435A67 /* MJRefreshAutoNormalFooter.m */; }; 6DE9FD143CBC24075601F8FE2ADC4115 /* IQKeyboardCore-IQKeyboardCore in Resources */ = {isa = PBXBuildFile; fileRef = 6E897F35E5E27028AC58B14B552FBC8D /* IQKeyboardCore-IQKeyboardCore */; }; - 6DF9A1A26E26014E7551926E7329F1F0 /* msa_macro.h in Headers */ = {isa = PBXBuildFile; fileRef = E867074B27E8FABABEB3A062C89F10C7 /* msa_macro.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E39129FC8643A70C276801FEF4C280D /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54A3F0BF75389BB6C8ACD25D8C0B04B9 /* Constraint.swift */; }; - 6E68FC477FEBC6BAF22C2ABC21F62A84 /* Moya+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D30F72ABB0E7C0638BD31E4CE7840A3 /* Moya+Alamofire.swift */; }; - 6E7D336428FAD21BE6A3046D244BC324 /* LayerImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95443C107F9AEEA2EE018985A7D23387 /* LayerImageProvider.swift */; }; - 6E9233B4A51BFFED8A71D58974E57907 /* zipWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 500A5FEB2506800042D1146A691F3EAA /* zipWith.swift */; }; - 6EDA5B695F14F2B532938BE2674D05E8 /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = A124C9F3769D0065B20BB49855542106 /* CombineLatest+arity.swift */; }; - 6F3DF877B76370967A98D9AD07034607 /* StarAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACC3F849100B4177C338AEEF424E627F /* StarAnimation.swift */; }; - 6F4524BF074768E280C5DB1C52526814 /* Core+CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33ED4054AFA9102DE2DFF8413FBF3767 /* Core+CALayer.swift */; }; - 6F8930FFAF904A41BF75A50959EEF897 /* AnyValueContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 616B42C1149DA62E1819065E55738C44 /* AnyValueContainer.swift */; }; - 6FA5A945327C97415DB959CF13AB9241 /* AnimatedProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44EBEF9387307DC81A32EFFE81F6035F /* AnimatedProviding.swift */; }; - 6FB928F2C18CD7FE791401D03C22E042 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 75FE13F045D517683751F241C2D07B5D /* SDAnimatedImageView+WebCache.m */; }; - 6FBC34FC7F89A9E1E79E967EE0633A31 /* SDImageCacheConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = BA191322E165A18078EB558F6D18F31E /* SDImageCacheConfig.m */; }; - 7048639AD3CDF1D671A76A1AC765417D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 7061BE5F19AD1E8E28E2497349144D3C /* VideoEditorMusicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB887A9561D276DB34EA50EEE4EC12AC /* VideoEditorMusicView.swift */; }; - 706FFD08EBEB41ECFBD99F46227A31B9 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = AF41612EEB9F8E1B8A0A9496A63C2391 /* PrivacyInfo.xcprivacy */; }; - 70E45D01B4F165CEC6D941B21E13E9CE /* MaskContainerLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E64F4612761F1A967A05BC539DAF105 /* MaskContainerLayer.swift */; }; - 71068243F1848F01355B5EEE22082CE7 /* SGQRCodeLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 045E796AEE22999EA4184E68E9B7F8E5 /* SGQRCodeLog.m */; }; - 71394FEEC6AB26B0E6A4EF0A6ADC3EC4 /* backward_references_cost_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = EA7E04CEEC7A79FB05E2DE3DAE634DF4 /* backward_references_cost_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 7139F90D349424DD12EE4D4374EBBC08 /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9223CD5E46678235221233277EDFE02D /* SDWebImage-dummy.m */; }; - 71538A1D21015F459964BA625D5EE90A /* NSObject+MJClass.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E618947B25509EAF74A486F71C3AD21 /* NSObject+MJClass.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7168A1F86699F21734478EC9596F0D74 /* NSTextAttachment+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 835D71EFA384E013530022C4ED5D6DED /* NSTextAttachment+Kingfisher.swift */; }; - 717812EFCFB61B9D6A80AE866FECA714 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8B0B4D9A47EDA4FB888829AF560CD8 /* SDAnimatedImageView.m */; }; - 71B9937590A242996BBC55C011041FD7 /* ScheduledItemType.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE79DEFA3AD3E0BFEA7198576E92711C /* ScheduledItemType.swift */; }; - 71CB3CA886AA53B7F5E81581D5E519D1 /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 21951539AF1191589E265213E6B8D31C /* utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 71E9499597534DDCD5262F96DD4C8873 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FA284AAEAD628F6B638EFC01ADF2225 /* URL+ZIP.swift */; }; - 723EC21501A85E196324BEC7B75E3A15 /* Core+PHAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2109F7F661446DA12643DCACFF4078C0 /* Core+PHAsset.swift */; }; - 724F464814668A050CC7066026C57B9C /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = AB2DDA3D7CBE2D21345D27AC7AF3D8B6 /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72A1A7BC05EB7651BE8BA9908DDF4554 /* color_cache_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = BB26D67793EF0FF90678F9F98CE61847 /* color_cache_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72AEB15AED3CA88476A4A696F953E6A0 /* VideoEditorFrameMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F085795F289B5BEEE1A9F7E1FFCAA53 /* VideoEditorFrameMaskView.swift */; }; - 72B3AFC351B26D4D98EC25F8E5B789F9 /* SDWebImageDownloaderRequestModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DB84D16310CC6D943255E049A9E9D77 /* SDWebImageDownloaderRequestModifier.m */; }; - 736ED5555F3EB058898EDDA945932D0A /* CombineLatest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D551093E45236015C327AE4B9BEA862F /* CombineLatest.swift */; }; - 73B104332534CE9139D2DED3DCEADB0D /* IdentifiableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1729A5C0BDDB7D06AEBD8894DA5153F /* IdentifiableValue.swift */; }; - 73DF1AF944E538C09126158F3574FA9A /* DDContextFilterLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C27FEE1D4334F4976A5F419C24858EB /* DDContextFilterLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 73ED4CAB43E4753F59CF2291BC5242A0 /* IQTextView+Placeholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A67326A62BBF7678EA70AC35CB159929 /* IQTextView+Placeholderable.swift */; }; - 742FB40D98E583B7925ECAC31C78818E /* LottieAnimationViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89492CD7805184F37D66C74AF64E60D5 /* LottieAnimationViewBase.swift */; }; - 7434AB2486CC0054C0D29F6B56775A94 /* DDDispatchQueueLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 33E53F7946D28A4A15CE8D0B0AF85E2C /* DDDispatchQueueLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74372ECC9D3E665CCC3C25EB989D1487 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29F796D6472EA6FC82B038C97ECF4785 /* CoreGraphics.framework */; }; - 743D34D0DFEA436F0807159B76CAF039 /* RxCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = E33CB738E9BEF4C5E064BEB48D7C52D1 /* RxCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74545FB0FFB10990E463C78AB00D3DF6 /* ShapeItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EBAEB62E0BC6BBD2A99A9FFC0297E16 /* ShapeItem.swift */; }; - 7459DE7076415F8D7E00855B8C142273 /* AssetManager+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 428BD599C962D9E479FAFFBC60859CF5 /* AssetManager+Image.swift */; }; - 74714664EA6A6A0178114C1570835B66 /* OIMManager+Message.h in Headers */ = {isa = PBXBuildFile; fileRef = 97847B9AE08AA8C0D6CD270E39CDC0E2 /* OIMManager+Message.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74A10EDE721BF734BB30215C5B803D23 /* PhotoEditorConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 690512071EDC44B3B6B7DAC39FB28E74 /* PhotoEditorConfiguration.swift */; }; - 7511BD0DB532C7E3B5044892A20131A7 /* DateInRegion+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A843D530EED2334A0CD6860F27AE9F7 /* DateInRegion+Create.swift */; }; - 75531B73D5F39CB3C311AF4E73A2C893 /* SDGraphicsImageRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = C14B726FB27D2B21A55B33ADEC4ECFB9 /* SDGraphicsImageRenderer.m */; }; - 755B26DBBA7E3D69A1652CAFF74173AD /* ObjectMapper-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F420C010C7336A4B964E0E4223E96D7 /* ObjectMapper-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 755D9CA16B51789C4BBEB377F7DE65FC /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 705E66B46D3FB6C3860039695FEE7E45 /* PrivacyInfo.xcprivacy */; }; - 75AF74177E7ED7AC1D58E789784A38D2 /* BaseAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 165FC294BFD8A65FF438D6516CD19815 /* BaseAnimationLayer.swift */; }; - 75B018D32C8A344D1CFDE4B192378DC5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C53081C00C8A2D5E4DDB3C986037310A /* PrivacyInfo.xcprivacy */; }; - 75C483C0603EBBE2B7C91A7014B80E5B /* TextAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA153F1787B4626C642F61ECE6F84F95 /* TextAnimator.swift */; }; - 75EC448869A0119287D192B8AA564E84 /* ShapeContainerLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A69E76676E2422A40553AA70F4B9AF /* ShapeContainerLayer.swift */; }; - 76093F5DC66264C840C4883B35499E82 /* partition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F491CDC277C6297CED0F4DB7FDB3B7D1 /* partition.swift */; }; - 7625435D29FEA6C65763AB2C045DA476 /* MarqueeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 938E1CDDDC030960A63016E0B7190652 /* MarqueeLabel.swift */; }; - 768D33C2F3127E74E8A1EECFE3FCF6C1 /* Differentiator-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7E6C39A78E34CAF91FE894770A29339E /* Differentiator-dummy.m */; }; - 769B4905AD35AD554AA9DE98DA8E4E11 /* IQKeyboardManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5A3802C70E5FFA3157414C2F2DD188 /* IQKeyboardManager+Deprecated.swift */; }; - 76A8EFC057455679D223E762AECCCF3D /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB070EEA28E7CED98A5D3FBC546B2023 /* Combine.framework */; }; - 76B4853D7AF9B16FEC384DC383D90838 /* DDLogMessageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38F94877CEF3C20AB5A2BC7EECB7F447 /* DDLogMessageFormat.swift */; }; - 76BF116C44CC99B086526ED8A19F48F5 /* quant_levels_dec_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 35940441E1F35674BCA1B41D098A3ED3 /* quant_levels_dec_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 76C8BE0DB8DE9BFD4D551465F246B2D5 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7C2E339CA969D2C5ED74BA6ECD6F69EE /* PrivacyInfo.xcprivacy */; }; - 76D446B97B0D2FA97975C830469C615C /* enc_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = AE3A29EAE2AD084E9A58744CA01CC32E /* enc_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 771CE2A036FA11F4B146E7CD81415142 /* alphai_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 74D831646F1721D18E9CB61D78B92424 /* alphai_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 772CF8E9CD02ECA4275B6173E2110E80 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = F214D9285BDD834DE0F15BEBB695D5E9 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 779AE3203BE594126E5F5C1BD1AF210B /* catchErrorJustComplete.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF1A17DE9613A991E0CA0C68744B81D6 /* catchErrorJustComplete.swift */; }; - 77EC03B0F9D4FF3F96A18E8B1B6235FE /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = EDE1FC37AA6F040B0AF72E17C31A9E4D /* PrivacyInfo.xcprivacy */; }; - 77F1B40C21EFF28350EDA6A12263B098 /* IQKeyboardManager+Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5A54FE569BE26DE8F8FABCE0B34BC75 /* IQKeyboardManager+Appearance.swift */; }; - 77F2E509688A124F02FD040516154751 /* GraphicsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1490DB57DB8A1ECD1F3411B7761EAFD /* GraphicsContext.swift */; }; - 780D2766CBC5DA2645C9DD412C55A583 /* RxWKNavigationDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5000C74964362967707C8378D889444 /* RxWKNavigationDelegateProxy.swift */; }; - 780F45F347C399D58601EF11FA024C98 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1E36184832E3BA860B6D06AC2293606 /* Utils.swift */; }; - 7835057D36DA67BEE422DC82F5598510 /* RxCocoaRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 631D1F2FC1CAC25B4FC1DC7C9550FC6B /* RxCocoaRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 783B9E8FC29F6D7EA20051F03D0EADCA /* TimePeriod+Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B34EDD0EC5E729369F40418B69FA49F /* TimePeriod+Support.swift */; }; - 784EC876ED7D0E61BA1D1D5B6FC080D3 /* SDDeviceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = EF1552FB2882AE6292A41E0FE732D03B /* SDDeviceHelper.m */; }; + 6E39129FC8643A70C276801FEF4C280D /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = D270B58C52D873E88FE7A688C880CC47 /* Constraint.swift */; }; + 6E67A4985A0D1F75DF8A4ADE6E9317F0 /* sharpyuv.h in Headers */ = {isa = PBXBuildFile; fileRef = 777F31EBF8D1DD8526D7F094EE35DAF4 /* sharpyuv.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6E68FC477FEBC6BAF22C2ABC21F62A84 /* Moya+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD78BC3B9444626883C4206C4B606F25 /* Moya+Alamofire.swift */; }; + 6E76E5E1CDE5A04EAEB9F75A173F24F9 /* ConcurrentDispatchQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75705F5AA04E07912B9A7028B41CC240 /* ConcurrentDispatchQueueScheduler.swift */; }; + 6E7D336428FAD21BE6A3046D244BC324 /* LayerImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BC67518006B19DC55658D20E4359695 /* LayerImageProvider.swift */; }; + 6E9233B4A51BFFED8A71D58974E57907 /* zipWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63881AFB6BB011EFCF1252118D2C46A8 /* zipWith.swift */; }; + 6EEC267E5A4D42DC73361B1417C34E2A /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 17067DED77C9D2CFC9CF625FA24F832B /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F0838C80554CA46CEEC7CFFBA26B9E7 /* NSData+ImageContentType.h in Headers */ = {isa = PBXBuildFile; fileRef = A0219DE9E829EB25509BB1E2C6F67F4C /* NSData+ImageContentType.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6F3DF877B76370967A98D9AD07034607 /* StarAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C37E9B0A2752CD48FC43FABF09C7B745 /* StarAnimation.swift */; }; + 6F42B4D96019FC7A8EDE1197A01E9488 /* UIImageView+HighlightedWebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 12D2895B84AB9CF7B83ED11129E9C360 /* UIImageView+HighlightedWebCache.m */; }; + 6F4524BF074768E280C5DB1C52526814 /* Core+CALayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90B5BC834A2DCAECF1A45B2A40BF12F8 /* Core+CALayer.swift */; }; + 6F6C920A3E7AEF236B703D2FBA728320 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DDD2C1AD91FF951A9A5F3D2E8D0913F /* SDImageGIFCoder.m */; }; + 6F8930FFAF904A41BF75A50959EEF897 /* AnyValueContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B37D9643E310BBA7496A4FE4A9FC48 /* AnyValueContainer.swift */; }; + 6F9D0DA8753977B211234613C24F41D1 /* predictor_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 645B1D036F396C3C31884CF44074CB01 /* predictor_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 6FA5A945327C97415DB959CF13AB9241 /* AnimatedProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAEA5657079E5ED6EC6D28C57EB4C2BF /* AnimatedProviding.swift */; }; + 6FC8633F5F4D6B865FB5C871A83185B2 /* io_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 5625B9E2F5C57D4695967DE287CA1547 /* io_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 6FD0DA95919ED8881B7F221D6A4D3B63 /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 570E6DBF4A44E5546A3C965D9E18073A /* SubjectType.swift */; }; + 7053223F22305B4166BD83EFC451E575 /* SDAnimatedImageView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C9E8A9D320DDF6866142EBCF0AB17D3 /* SDAnimatedImageView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7061BE5F19AD1E8E28E2497349144D3C /* VideoEditorMusicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67B8A8567DA6C52E64E59F0E24001910 /* VideoEditorMusicView.swift */; }; + 70E45D01B4F165CEC6D941B21E13E9CE /* MaskContainerLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D3AFCC822EA201EE0774A79F8B66DF7 /* MaskContainerLayer.swift */; }; + 71029A5C5D8B9D12FBCF8461459E95D1 /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3419BDD44F6743C4AC46FA04B2350FAF /* SDImageCache.m */; }; + 71068243F1848F01355B5EEE22082CE7 /* SGQRCodeLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 2FD7EEBE586F6B453B12A099DEC36BF7 /* SGQRCodeLog.m */; }; + 71538A1D21015F459964BA625D5EE90A /* NSObject+MJClass.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1E32AF2B6B2E567E088EE3153CA7E8 /* NSObject+MJClass.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7168A1F86699F21734478EC9596F0D74 /* NSTextAttachment+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E2E8E4E7D7E410B6C94E5C4C0C3DC04 /* NSTextAttachment+Kingfisher.swift */; }; + 71E9499597534DDCD5262F96DD4C8873 /* URL+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0483E62BDF02CA0C3DE38D03FC2505C6 /* URL+ZIP.swift */; }; + 723EC21501A85E196324BEC7B75E3A15 /* Core+PHAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = A50464F051FFAD36C579BF994F2EE62A /* Core+PHAsset.swift */; }; + 72A04EB4528FFEE0D1E75AFFFB59159E /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92ED2EB695BF51A59A9309EFCD8B7BAA /* ObserveOn.swift */; }; + 72A25A5054A18E2686A42633ECCA296B /* near_lossless_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 924B109D0B5D6A53163A686247653238 /* near_lossless_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 72AEB15AED3CA88476A4A696F953E6A0 /* VideoEditorFrameMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10122837DEED57398C463CC0F8E4EB4 /* VideoEditorFrameMaskView.swift */; }; + 72F46AF65F99A2D2D1D4040A6A7480D7 /* rescaler_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 6286DBDC946A52B1E86BC5F2EB20BA19 /* rescaler_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 72F7783C7C45D4D19CE96B5060EB75AB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + 738AEC4CC699BFBA787CFC9F4EC9B200 /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE743B0489172B9D8AFCA90B825A0C6 /* SingleAssignmentDisposable.swift */; }; + 73B104332534CE9139D2DED3DCEADB0D /* IdentifiableValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41C167A42094403E6D01F0C012B89B5 /* IdentifiableValue.swift */; }; + 73DF1AF944E538C09126158F3574FA9A /* DDContextFilterLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = AB391B254D2D6498DF8E0C3EED6102BA /* DDContextFilterLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 742FB40D98E583B7925ECAC31C78818E /* LottieAnimationViewBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A6B00582C6F5360841283FCA163063F /* LottieAnimationViewBase.swift */; }; + 74304A8524CDF980583FB8550F47990C /* IQTextInputViewInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 184F947CEF38F5F5A56AAC37D7C72109 /* IQTextInputViewInfoModel.swift */; }; + 7434AB2486CC0054C0D29F6B56775A94 /* DDDispatchQueueLogFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 36150B9A092CEA623ED750B37621BEA4 /* DDDispatchQueueLogFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74372ECC9D3E665CCC3C25EB989D1487 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFA273262C05031D86CC3431CFFA95B7 /* CoreGraphics.framework */; }; + 743D34D0DFEA436F0807159B76CAF039 /* RxCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 583B4C6A567749AA875BA86DF64F5671 /* RxCocoa.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7446F81DD35C285BA22BC4DC085DF6AC /* SubscribeOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7C11B2A9E8F8B341AEA7B362E23E7E5 /* SubscribeOn.swift */; }; + 74545FB0FFB10990E463C78AB00D3DF6 /* ShapeItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E589DCFDF4CA763286693D5151E8C2E7 /* ShapeItem.swift */; }; + 7459DE7076415F8D7E00855B8C142273 /* AssetManager+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = A653B0A60B5E5A8FEC71EC7CA4A3EB5F /* AssetManager+Image.swift */; }; + 746AE37FC215D00A060089B21B1D22D5 /* SDImageAWebPCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 37248EC9C1A753806439CCF5D8B1413C /* SDImageAWebPCoder.m */; }; + 74714664EA6A6A0178114C1570835B66 /* OIMManager+Message.h in Headers */ = {isa = PBXBuildFile; fileRef = 26B525A296261CA1942BF343253871F1 /* OIMManager+Message.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 74A10EDE721BF734BB30215C5B803D23 /* PhotoEditorConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5D8900915140D4712BA5E20E7EAA3D4 /* PhotoEditorConfiguration.swift */; }; + 74BAD1E9F4E576B92615C0600E2F851F /* Range.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9E55D135AD87DB4E17C237AFECE26C7 /* Range.swift */; }; + 7511BD0DB532C7E3B5044892A20131A7 /* DateInRegion+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F35C928F53F26BC77F3325C5C0D4FAB7 /* DateInRegion+Create.swift */; }; + 75166BBBCEB03EF71AF8D26E2B4DF828 /* SDWebImageIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 80F422D9CF7F73BDD80C55E658E8103F /* SDWebImageIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7558BB04C3278ECFE185A5E982CEBEA9 /* cost.c in Sources */ = {isa = PBXBuildFile; fileRef = 910B1455FE142F868DB22A1E2D94066D /* cost.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 755B26DBBA7E3D69A1652CAFF74173AD /* ObjectMapper-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F8D243AD8458EB2B14CD5EFB786D3A /* ObjectMapper-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 75A2501E025111DF48E6662F4C8163F7 /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAF3240D5C6054FC9088F120BCC0AE61 /* Empty.swift */; }; + 75AF74177E7ED7AC1D58E789784A38D2 /* BaseAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC29025924C23D539E1D1221AC29A60 /* BaseAnimationLayer.swift */; }; + 75C483C0603EBBE2B7C91A7014B80E5B /* TextAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = B402B8425EBB730BFC58AEB36CC52226 /* TextAnimator.swift */; }; + 75EC448869A0119287D192B8AA564E84 /* ShapeContainerLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E9D7F05983C95E168849B51B28EC29C /* ShapeContainerLayer.swift */; }; + 76093F5DC66264C840C4883B35499E82 /* partition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F966211AE623F7F0393C7F5139C6CF61 /* partition.swift */; }; + 7625435D29FEA6C65763AB2C045DA476 /* MarqueeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F98F9817B280E58C08FC6A1993D49FA /* MarqueeLabel.swift */; }; + 763E4D8F18AA1796E333DC9678D424AE /* filter_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 4FF5C188C69C55F5F58943A32C6A5590 /* filter_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 768D33C2F3127E74E8A1EECFE3FCF6C1 /* Differentiator-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3676B48C2F610BF5A549DEC0E3237259 /* Differentiator-dummy.m */; }; + 769B4905AD35AD554AA9DE98DA8E4E11 /* IQKeyboardManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC3074255B9B2BC12ABE3CC218759254 /* IQKeyboardManager+Deprecated.swift */; }; + 76B4853D7AF9B16FEC384DC383D90838 /* DDLogMessageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238363420B18595D15E9E84CC3740DB3 /* DDLogMessageFormat.swift */; }; + 76C49441ACBD4BB270E50BCFA217F7BF /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E924404F18EF5B2BFCF943AB82366720 /* AssetsLibrary.framework */; }; + 76CE298CA63BD9C98E75949D0B77F12E /* cost_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 6D70119D576DA10861861869B0B91C91 /* cost_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 76FB685C2887CB339EBE9C0A6E75120A /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEDC7B7D5DFCC3D589C9258A53C79C1A /* Multicast.swift */; }; + 772CF8E9CD02ECA4275B6173E2110E80 /* View+MASShorthandAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD14D0F84352B2B3E7EEA1BB4CAA493 /* View+MASShorthandAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7752B9B3776841659476CF994354E9FE /* decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 13DD4EB9386FF12834E44BF449F92FC4 /* decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 779AE3203BE594126E5F5C1BD1AF210B /* catchErrorJustComplete.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C8C4047820D21477920765A198889CD /* catchErrorJustComplete.swift */; }; + 77B41C6CFE0B92758119A593633C0233 /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C8BB5332F80E96E8D6A4B4D6AA10A0 /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 77F1B40C21EFF28350EDA6A12263B098 /* IQKeyboardManager+Appearance.swift in Sources */ = {isa = PBXBuildFile; fileRef = 530D37E6D2B62B3C6E8375CD070A1ED6 /* IQKeyboardManager+Appearance.swift */; }; + 77F24BC228EABC6538B11AC83E85336A /* neon.h in Headers */ = {isa = PBXBuildFile; fileRef = F0F4E13F07A961A441A6054F294E1167 /* neon.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 77F2E509688A124F02FD040516154751 /* GraphicsContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3959D145FD2E8F762316E0F5B249252D /* GraphicsContext.swift */; }; + 780BC2D085C2534DADCEA83A9E68790C /* backward_references_cost_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = A29BD49A7C76A70FC93ED9BBE634D6A2 /* backward_references_cost_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 780D2766CBC5DA2645C9DD412C55A583 /* RxWKNavigationDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CA0BB648C2262B78659DA12DD51A2F /* RxWKNavigationDelegateProxy.swift */; }; + 7835057D36DA67BEE422DC82F5598510 /* RxCocoaRuntime.h in Headers */ = {isa = PBXBuildFile; fileRef = 80B0158484445E6EEDCB488111857C96 /* RxCocoaRuntime.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 783B9E8FC29F6D7EA20051F03D0EADCA /* TimePeriod+Support.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97AA22B3EFF347E5FA01A0D40617FA36 /* TimePeriod+Support.swift */; }; + 785E695163038FE0296501AE72DF1BAA /* vp8li_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 011E89E515BB464178D2AD0A6CBDC760 /* vp8li_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; 7873F2F89CD0A435FAB776BC27BFB56A /* MJExtension-MJExtension in Resources */ = {isa = PBXBuildFile; fileRef = 43EAAD2AB7E6B407E80E95F643F93D22 /* MJExtension-MJExtension */; }; - 789892D13F1B6E6FE9185800742E9744 /* NetworkAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6588BE6EAD95A062EAD65E4406523B33 /* NetworkAsset.swift */; }; - 7902D28FC9EF5AFEB452F508C7F266B1 /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 6675C0D3C3E1B217343679BB2C28AF0F /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 791636D3DCF9FF81AD061E5CF5D6F051 /* syntax_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C47797CF83C8275EB25B782A05E26C0 /* syntax_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 7933EDD15F245D28BE5D99E203E9BD1F /* DataStreamRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9258CFF7C85CF79A431C334C91C49A73 /* DataStreamRequest.swift */; }; - 794C6C6B3223E089FE0D3C21D1F9F0A8 /* quant_levels_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 7B77DEB6A390666DF68E81ADE12F1BED /* quant_levels_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 794F87F9E0A8E4DCCF52A73F1BC75428 /* SDImageIOCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D6D43780E33C2CDBD9719B5CA9CD786 /* SDImageIOCoder.m */; }; - 79527BDA19BE542F4B62E5D951075845 /* ImageCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E6324703E1125DF8EE3BBB0953D938B /* ImageCompositionLayer.swift */; }; - 798802F71E005751FEA1036DC398B9A8 /* UploadFileCallbackProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C0CF0C62F67692E4295190EE91E610F /* UploadFileCallbackProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7989A6E79BFA78440C39F568D972305C /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 22363CA9E38F55410E8D888D617320B3 /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 799E114493E31733F2D953450BF82EE8 /* Popover-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B555B1099D99D8615619FD3085B9D500 /* Popover-dummy.m */; }; - 799EAD4947C3902EA490A7282B738C25 /* AVAssetImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3A95178FB209B1FAE668822F7A4DEFC /* AVAssetImageDataProvider.swift */; }; - 79B1CABB3DCACAEABCDA3AA0E35825C0 /* DDASLLogCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = A9717FEB35D2D2F9A59EC9D64C1C3CAE /* DDASLLogCapture.m */; }; - 79DF74409328C4173E4C3678B2E8E0BF /* OIMFileElem.m in Sources */ = {isa = PBXBuildFile; fileRef = A1603778C0EE3DA3ECCBEBA945D3B01F /* OIMFileElem.m */; }; - 7A070D739AE17B0FC405F435CECE8D21 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E3FE23EA4FA88C546AC8A32561D0DF2 /* Disposable.swift */; }; - 7A232A8D5C0D06F3CE373E1B46422118 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13B22DBEA0599B8AB9BBE81DB9E9144F /* AFError.swift */; }; - 7A2DDEA900883E39D33468469FC14AEB /* ImageDownloader+LivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C0DBF3930B6D9B41590221ED28D0ABD /* ImageDownloader+LivePhoto.swift */; }; - 7A366C79F00849F36EF83F0B31C68A6E /* OpenIMSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 92848CB8CEF981C9B3BC395EEC10733C /* OpenIMSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A5F65ACADE9EDAD0E8D456AF59DB812 /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30AA8EAC742EC556E68712FF9D8F74D3 /* Using.swift */; }; - 7A6EB833C39BF53C8B4C64F15128E33C /* ShapeItemLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 598460A5DF3B56203B29D01ECAC0F8F9 /* ShapeItemLayer.swift */; }; - 7A80DEB95ED22729738A514B448AD383 /* OIMManager+Group.h in Headers */ = {isa = PBXBuildFile; fileRef = 44456B4A49FD97858C88390117FC8890 /* OIMManager+Group.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AF516B98D45391B909D507D0244104C /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2E823642914FC324B9D6472E687E6F /* ConstraintDescription.swift */; }; - 7AF75BB2106ACF6BC8DE4FEE402752CE /* KeyframeGroup+exactlyOneKeyframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD3394AEB6113760F63CD2C8E55F0743 /* KeyframeGroup+exactlyOneKeyframe.swift */; }; - 7B02F11607469A3D3728780A829138C4 /* _RX.m in Sources */ = {isa = PBXBuildFile; fileRef = A70960A456CC7B878B6BE0A13B941DBE /* _RX.m */; }; - 7B0458B6E9002963B57B5E8DB56B33B8 /* TAAbstractDotView.h in Headers */ = {isa = PBXBuildFile; fileRef = 990707B203C5928699E7AAADC40C85D6 /* TAAbstractDotView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B0F1B3ADC6D72E1122F13FADB2D8E2B /* RxCocoa-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 294F945132A96401D8BB6AF1EE6285E1 /* RxCocoa-dummy.m */; }; - 7B0FE4A214ACC60D219ACBBD0342C47A /* ignoreWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D84E9F9F6E555A1543E50A0B611DEE8 /* ignoreWhen.swift */; }; - 7B20820FD55F1B574D96C1631ABE247C /* IQKeyboardNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 14ECA25FAC580BEAD24A7591921B4905 /* IQKeyboardNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B2207E5EC5C2444D016C4786FB34BA4 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BAFFADB6718043647FA05D94FD3860E7 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B5D343693DDF40635B24CC18C1C1DE7 /* Buffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DE4D17C8433A44E4298C409C0D34F11 /* Buffer.swift */; }; - 7BB27838B6FA938E9983A5EE7E3B3197 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4132CF769C59E4962F728199F4EFDCCB /* Bundle.swift */; }; - 7BB7EA40D98983D92AB8521EC43AC6D2 /* SwiftKeychainWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 301C9D054BD58240F500E205344E5E3C /* SwiftKeychainWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BC2B90C110F500D157D106CC41446A8 /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F1D204D6DDAB229B632C8DE0C49CE0B /* CompositeDisposable.swift */; }; - 7C0E703E6FA0DE4C0E4CE1A52FAF925A /* TAPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = FC4E893F753ADB394FE8F1C9F855C83D /* TAPageControl.m */; }; - 7C25A19B6C5DFE20A5A04612709550F7 /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C4D8AE7174BB9A4533DE44B3F11254 /* ScheduledItem.swift */; }; - 7C5505A2D3F2A697A5F324787061F4B7 /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 003BC8561F8A2CDBE8792BA3D972D3B4 /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C8D5357287A3F34A0F2CD2BBFC29270 /* NSBezierPath+SDRoundedCorners.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F5E0EBA29568C35DF864FAF6CBA4DD6 /* NSBezierPath+SDRoundedCorners.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7CBA95E07A492F7311C7DD8EDF0B4172 /* IQScrollViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34C85D236A09B50BBAE08B7FB20C1142 /* IQScrollViewConfiguration.swift */; }; - 7CD84F8DB695AC43A57E884C2171560B /* demux.c in Sources */ = {isa = PBXBuildFile; fileRef = 9FB522F4C7C47BA527C5E509E78B4350 /* demux.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 7D17BA44B25E3454A909743A209EB017 /* AnimationTextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9AABB0BF024C76A2F4778A8BF77E9BE /* AnimationTextProvider.swift */; }; - 7D42390CDB4FA147504B03DA2A174A0C /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = C669EF21008A80A60B3840300815827B /* ConstraintViewDSL.swift */; }; - 7D76C5A4BE2360D06B9E3652DA94B346 /* Infallible+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D5ECA710EB149367627C0ECCCD88F67 /* Infallible+Bind.swift */; }; - 7DC113D969DC1E84FFC1454EBB4A1C39 /* LottieAnimationCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA6F39A42F8F26B1001FC6ABA7D43B5 /* LottieAnimationCache.swift */; }; - 7DF2E0F22556196056EAAF14AB93CC8D /* DistinctUntilChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAB4CD456F6B33E249E6EA4B26455EBE /* DistinctUntilChanged.swift */; }; - 7DF4855DCBE2691D7348F8E654F5960D /* SDWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FA02D6C631F6C170C069CABD449F276 /* SDWeakProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7E10CEBAFF194EBBBF7915CD771FEAFB /* AlbumListConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06A671AD153C13287C7F5677F7728291 /* AlbumListConfiguration.swift */; }; - 7E10E1468D6B6AAFF07B3904477B5236 /* fromAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5581B1DE9E573F96230513861EAC652D /* fromAsync.swift */; }; - 7E478F8BBF9619E0B9E7B6F12A292C27 /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61262011F1BCB5A4C30594748F8200D5 /* Timeout.swift */; }; - 7E64667C414AB0AA1AB5A09DA40A443A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 7EA170EC2916A83F249D0095D4B0CEA0 /* DotLottieFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6B612D76BB12D1DD8A1C1714E48765 /* DotLottieFile.swift */; }; - 7EBDC64932A33B97DDA070B75EB2B6CA /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66F6E82115C5A0AA962FAE21C21F7884 /* Bag+Rx.swift */; }; - 7ECBAF7FA4FA7C6D82BE38F135514996 /* ControlProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA420F3649A7C98C2CEB39098100D80B /* ControlProperty.swift */; }; - 7F05B3C942C46A787CB0C2DE9AC12A80 /* enc.c in Sources */ = {isa = PBXBuildFile; fileRef = C02CFAD272BDBFF03F29BA64096B6F3F /* enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 7F134BE7BF9163F75F7F84556BE8A69D /* EditorStickerTextViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6C485474804F77A7EDCA1DE1FA325B8 /* EditorStickerTextViewController.swift */; }; - 7F46110E24BBC89EB44DD11BE3231C68 /* YBIBCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = E8E3080423B25BF6C6075F57320D28B6 /* YBIBCollectionView.m */; }; - 7F52F9458A7051EC57CFEEDF97F4C5BE /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBC49F1BCFB02AB1359A624A65AB5824 /* StringExtensions.swift */; }; - 7F5C48C2188D40013C6138EF2F912F57 /* yuv_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 7E75BE039ECDC5C98B1B3366AB223FFE /* yuv_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 7FA8C78DB021A7731D30D80C102DE042 /* NSObject+MJKeyValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 0ED0D149F401AB63D52DF294E59B0FC1 /* NSObject+MJKeyValue.m */; }; - 7FADE3B72EDEC6913DC839D679C7578F /* OIMSearchResultInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = BA124264AE4D19CCA7B7B57D21302619 /* OIMSearchResultInfo.m */; }; - 7FCA0B78B97499DE69A9A096C5EB1D86 /* LottieAnimationSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BF5D4957693B5B5DBC61FAC96B2CF23 /* LottieAnimationSource.swift */; }; - 7FCED58A456951FB7579DA3DAE904546 /* encode.h in Headers */ = {isa = PBXBuildFile; fileRef = E6E25AB29490F32DE655534A02FF32EA /* encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FDE5BBEB2E3E5E79A686FB6F496E566 /* KingfisherError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E9C22CBBE02969A90F816D150A20E9FF /* KingfisherError.swift */; }; - 7FF50219077B6B6DEBA2F63EE87C3781 /* YBIBLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = DC22F1149C5A3255693D354900D95EF3 /* YBIBLoadingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80372663D72D043CE915E2A0B14620A1 /* TagView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3789559DC432ABA817A4958988A7DE5 /* TagView.swift */; }; - 803C8DBF8B2FF6B70E15E0B31A992827 /* OIMGCDMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 36E652E445F8CECC432D298A13A78229 /* OIMGCDMulticastDelegate.m */; }; - 80721615C3658BF57B31FA699F19E9B5 /* OIMManager+Connection.h in Headers */ = {isa = PBXBuildFile; fileRef = FB4ADEBB4D4F0969EDB1E98FD06BD24A /* OIMManager+Connection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8094FC31D39D05DD242F6D843FB6EEE6 /* OIMSimpleRequstInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = EC75BE3FA4A00604568829C9FF27AAAE /* OIMSimpleRequstInfo.m */; }; - 80A8D44E274367AA97A804B3BEC264A5 /* SDCycleScrollView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 62416DA404529EE5F12AC66820968A42 /* SDCycleScrollView-dummy.m */; }; - 80AF897681B86918BCC4B85FD2676530 /* SingleAssignmentDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9B1C90D6A160806DBC532F191101F7B /* SingleAssignmentDisposable.swift */; }; - 80D44B08D71851B8F27FF295206E99F6 /* YBIBVideoTopBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 7462F84AB2989D3A2675AA6CA2CC540B /* YBIBVideoTopBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80DD2E734D11CDE781980ABCE13B3C11 /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3672AB437DFA2D3DB0B46CE5363FFC21 /* Fill.swift */; }; - 80FCE4E2E998026ECEC85CF2A3454783 /* DDMultiFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E17ECF721B2913CE636674C037654C6 /* DDMultiFormatter.m */; }; - 813BB877E336A2F38E4E220D082F8557 /* PointValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31C067D5AA45DE8118D9B9C303CDF1C5 /* PointValueProvider.swift */; }; - 813BE4C96A6D39C13EC50C6CD164F0AF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 0211CECFDC73CE25407A46059C53DB42 /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81480680EC2AD2EFB65E4B65D0AD3CE2 /* quant_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = BC30D019482F4221FF633E550DAC417D /* quant_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 815F81676EC04CD9DEB40AD4F7B019F6 /* SDWebImageDownloaderDecryptor.m in Sources */ = {isa = PBXBuildFile; fileRef = 41FEE0B7FFF23C3578AAA6B48F10FD1E /* SDWebImageDownloaderDecryptor.m */; }; - 819103BC96962A22E6BE5C481415EAA9 /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D6F3E223EDDA7BB3F9C466B9984E79C /* InfiniteSequence.swift */; }; - 81A5635CEA2AD9623E30CAE9AFC3BF65 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 956D08303C546C8822DB0DCBD148CF06 /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81D6F749095B82F5316CF87AB04F53A7 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE864E35FBE5668BF392096A7DF58B8C /* Operators.swift */; }; - 81F0C9CCF30EA684BF7A7112AB0AE9FA /* RxCollectionViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01AEFB1EB3A914C86593584A77C0FA77 /* RxCollectionViewDataSourceProxy.swift */; }; - 81FD0195DA3077411FCD0751E7CD5FE1 /* lossless_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = A1A4FD150E8969054E33120D391A51C8 /* lossless_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 820CAA6F190BDC09EAA1C5F937A1A5EB /* picture_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 991D1386E3E848056EA3B4E051FE493E /* picture_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 824AE53036AF89BA4BCD1B667B49C424 /* Glyph.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D85C068680B34A7EEFF48F7268DD710 /* Glyph.swift */; }; - 825237AF1EFB2268D5416A7AD88E01ED /* Array+Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AED70B7B68386C79189CD6256E14B99 /* Array+Sort.swift */; }; - 826286B050F92B77538F437DA962D9B4 /* RxSearchControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2778EBCEEC14C4833D44342D5C11AD81 /* RxSearchControllerDelegateProxy.swift */; }; - 8274C142B267ED628A56BE49ABC1AB42 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DA807B3AA45AE66EB8FD6744357C386 /* SDWebImageCacheKeyFilter.m */; }; - 82A5D07DC330993BB604113DC0635FE3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 8365B48A40FED7FB9CBBDD87D5062679 /* LayerProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79EF22CDC01C744BFA86A491B88C628 /* LayerProperty.swift */; }; - 83A4F2816C1B3F072E1A26A34C3BC4AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 83BCE1D9A0402A956C96D8F2A370452F /* ControlTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DEC4D97314748FED89C51384E90F8BB /* ControlTarget.swift */; }; - 83DD0AA04C87293B8F9578D7D2754187 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 8405137716A5EE714D2B9CB5880FA105 /* MapError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227FD73B3C6B806CCAF3C3B7499D12D0 /* MapError.swift */; }; - 8427A2B8905686251B6DEC1152C41087 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = BF160B94684907A47F9B8E3E019F60FF /* PrivacyInfo.xcprivacy */; }; - 849FF90CD07B763B0D53DD4656BDED61 /* DownloadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD95EF9454E3F53ABDBC35194ED025C5 /* DownloadRequest.swift */; }; - 84B31F08AD0AF1654F0FD7EB6D1E4F7A /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42B114F0B8206EEAB6F552D7C4F863ED /* NopDisposable.swift */; }; - 84EE59925A7B0D31258FFE7568AE9646 /* LRUCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5190657508F7147ACBE8B04917D52D6 /* LRUCache.swift */; }; - 84F295B31499AA8D1A5DF8170D194231 /* KVORepresentable+CoreGraphics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F139EC6DC9A823AD2A7358AE25AA685 /* KVORepresentable+CoreGraphics.swift */; }; - 84F3F943906105FE27ADCB8177D997CC /* OIMCallbacker.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E47F234141A9130E3D666C798E5329B /* OIMCallbacker.m */; }; - 85178BBF04D011E1CF3E694283E7821D /* DotLottieFileHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA9838D5568CF08D46DA7E59F8CF6C0D /* DotLottieFileHelpers.swift */; }; - 8581686902C37D5297216E88B7C16E7D /* UISearchController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763E77216C850D70057D326B4A6BA473 /* UISearchController+Rx.swift */; }; - 85AB23275E9D19394969235E5DC2300E /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = D09EEE16CE8246F2F7548E87067C664C /* MJRefreshHeader.m */; }; - 85BAE6C5A2152C5027285C2FA1B94A76 /* WebPSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045476BD81F43A7E4D35CFDD204660D7 /* WebPSerializer.swift */; }; - 85FB57F2721CB076972098B50085D2D7 /* Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C753919F581AE643532B0D59A3E5D3 /* Transform.swift */; }; - 85FE8E61C5EDD8A9B9DA98B8B4A9F208 /* filters.c in Sources */ = {isa = PBXBuildFile; fileRef = 9F376FE855AF22F30019CB36BAA7A1E8 /* filters.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 8610B646ACB327434E1072AB24241FC7 /* cost_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C1376FC7BB4470F53E0603A9A7FC1AC /* cost_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 865204DCDCE67F9B7735B54BA393ACE7 /* SchedulerType+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92F5E3708E512F20F2F3931DF742408D /* SchedulerType+SharedSequence.swift */; }; - 866A2B75DB39B049EE20D82B29296628 /* Defaults+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E521769293502BCC89258E2797104EC /* Defaults+Observing.swift */; }; - 868A9F524A7985BDA1EA124D9BF4CA63 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 270430691446D7F2AA48696D223B3B36 /* ConstraintDSL.swift */; }; - 868DC78BB40F54517815D2C0CA1754B6 /* CloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D70F2602168F1347FB7D9F6E7603D10 /* CloseButton.swift */; }; - 869413419A22C3834700E726484CAFDB /* IQKeyboardToolbarManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D825F64A76320E65FD8969C6C63148B1 /* IQKeyboardToolbarManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86ADEC1D9102F901343EFCB62D423D2E /* SDDiskCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EFE005BE578C2D2E402895822FD412B /* SDDiskCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86B6A957BA4D1D0CAB44A4FF6D40A179 /* AppearanceStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DC2D83167741CC204B2EC3E267BCF7E /* AppearanceStyle.swift */; }; - 86B7946E6E92C0BB75E233F860B24D60 /* OpenIMSDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D6B2C759FB92C7CAA19BAEA2B83D076F /* OpenIMSDK-dummy.m */; }; - 86CAB01D950C8BC35EDE0BDC01A2500B /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E4F0EB967D731167573C0D43015BE39 /* ConstraintView.swift */; }; - 87237FAFB6D6B0EAC112691A9AE313EE /* PhotoPickerBaseViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12E98132350361407F1F060CAF282D79 /* PhotoPickerBaseViewCell.swift */; }; - 8776A15F0B57061AD901F2C9FA6E378B /* SolidCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27B83BBA92B0D0F145F36F867F55084C /* SolidCompositionLayer.swift */; }; - 8780C16C073E1E6CBC8FC372F0B224E8 /* SDImageGIFCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 0846B8700232494BFCEC5F1561A0AD7C /* SDImageGIFCoder.m */; }; + 7876A95068846D36B8F1BD14365B69F0 /* SDWebImageDownloaderOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = CD66401597E7952E4DE53DEC58AC4941 /* SDWebImageDownloaderOperation.m */; }; + 789892D13F1B6E6FE9185800742E9744 /* NetworkAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3CF53606678C5355554CEAF86E72A88 /* NetworkAsset.swift */; }; + 78BD0F8D256532CA562E15911B11F746 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2C997ED187FDEF21DB00D42F13F8ECC /* QuartzCore.framework */; }; + 7902D28FC9EF5AFEB452F508C7F266B1 /* MJRefreshAutoNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = F307E5CD7860C4F016E1F43A2267C932 /* MJRefreshAutoNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7909FCB28ECBECC829CCBDDC60E65519 /* filters_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 12A797C3A031E57AFC7DDC1C885765D6 /* filters_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7933EDD15F245D28BE5D99E203E9BD1F /* DataStreamRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD34B51B09467734D0CC3DF50AAD4BDD /* DataStreamRequest.swift */; }; + 79527BDA19BE542F4B62E5D951075845 /* ImageCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6A8BD0B26710BD33082F2BBF5BB724A /* ImageCompositionLayer.swift */; }; + 798802F71E005751FEA1036DC398B9A8 /* UploadFileCallbackProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = FFEF543AD54697BFC217DAF8CAB97D91 /* UploadFileCallbackProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7989A6E79BFA78440C39F568D972305C /* MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BC2659EE479F1DEDEA53D93AC18285 /* MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 799E114493E31733F2D953450BF82EE8 /* Popover-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CDA05AE0A1D88DBAE40E62638BF3C8A /* Popover-dummy.m */; }; + 799EAD4947C3902EA490A7282B738C25 /* AVAssetImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5262A8466C222B81F01152B34DA64A09 /* AVAssetImageDataProvider.swift */; }; + 79B1C51D421DBBC538D8F2644E89C570 /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = DE742566AA0F5FFDE0409CF795E414D7 /* SDWebImageIndicator.m */; }; + 79B1CABB3DCACAEABCDA3AA0E35825C0 /* DDASLLogCapture.m in Sources */ = {isa = PBXBuildFile; fileRef = 5057B056546FEDFFD71C7FFDC03FF7D0 /* DDASLLogCapture.m */; }; + 79B7DBB43E06A5F65799B8AB51B39A77 /* sharpyuv_dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A45467E991A7D1E26A9A9CDD47E4EC3 /* sharpyuv_dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 79DA3D113B320B60C456019C2270CFB3 /* Zip+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36D13BB9A77FB2ADAE7FB83B1A7DCFB4 /* Zip+Collection.swift */; }; + 79DF74409328C4173E4C3678B2E8E0BF /* OIMFileElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CAE77C1FDFE55D88382565774039932 /* OIMFileElem.m */; }; + 7A232A8D5C0D06F3CE373E1B46422118 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6AA4F5CE1C7962178B6099FA00101B4 /* AFError.swift */; }; + 7A271B71FDDDC1BC3FF970EDAD5E98C4 /* CocoaMQTTReasonCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE18999B476D598F337EE1381FA8246C /* CocoaMQTTReasonCode.swift */; }; + 7A2DDEA900883E39D33468469FC14AEB /* ImageDownloader+LivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6870CA7016A7BB8E2033FD030B292EC /* ImageDownloader+LivePhoto.swift */; }; + 7A366C79F00849F36EF83F0B31C68A6E /* OpenIMSDK.h in Headers */ = {isa = PBXBuildFile; fileRef = 140B90127F8284D9D202F085B0596ECE /* OpenIMSDK.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7A6CA3F362C73E128D9A1227F9B73A38 /* rescaler_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 524F638285FA3A2ABDFCF6B787490342 /* rescaler_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 7A6EB833C39BF53C8B4C64F15128E33C /* ShapeItemLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF265D01BCDF891475E8B6CA021874DD /* ShapeItemLayer.swift */; }; + 7A80DEB95ED22729738A514B448AD383 /* OIMManager+Group.h in Headers */ = {isa = PBXBuildFile; fileRef = B7FBDEBE2C4E628598655B74A3137531 /* OIMManager+Group.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7AF516B98D45391B909D507D0244104C /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BE3ED2D55A51CE30D6B35A81EEDBF70 /* ConstraintDescription.swift */; }; + 7AF75BB2106ACF6BC8DE4FEE402752CE /* KeyframeGroup+exactlyOneKeyframe.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4047E809A4658ECA83A30E6061F84DC /* KeyframeGroup+exactlyOneKeyframe.swift */; }; + 7B02F11607469A3D3728780A829138C4 /* _RX.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C4D23E4B97E5589131E460C9DAE5009 /* _RX.m */; }; + 7B0458B6E9002963B57B5E8DB56B33B8 /* TAAbstractDotView.h in Headers */ = {isa = PBXBuildFile; fileRef = 158C77258A2351E9D3B6E93C28100672 /* TAAbstractDotView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B0F1B3ADC6D72E1122F13FADB2D8E2B /* RxCocoa-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A6B3C05E2A7710AA4BB0C9B83E2BF36 /* RxCocoa-dummy.m */; }; + 7B0FE4A214ACC60D219ACBBD0342C47A /* ignoreWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF0B8DBB8BE630A64C34C16B1D7F8343 /* ignoreWhen.swift */; }; + 7B16DF8E517A9D80875DDD95B4F57C12 /* IQBarButtonItemConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D230BB4BBC629C4AD808FB6819CFE89 /* IQBarButtonItemConfiguration.swift */; }; + 7B2207E5EC5C2444D016C4786FB34BA4 /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AA02FA0E65676F5516119114719BAB8 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7B262866D0FAFCAD2B5470D3A35748B2 /* SDAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D151E0C0C8749B59E1D6C1C422EE6C7F /* SDAnimatedImageView.m */; }; + 7B6BD3EA8747935609B6204913A6F0A1 /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B89A1A86F8CF99FF82A13D16543577F3 /* SDWebImageOperation.m */; }; + 7B845572152301170E2CDF0BE542D870 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 7BB27838B6FA938E9983A5EE7E3B3197 /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22CFA28D77DC2B2A44D160C4087AC3B7 /* Bundle.swift */; }; + 7BB7EA40D98983D92AB8521EC43AC6D2 /* SwiftKeychainWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AA65DC4296085382ABB031FFD4FDBAD /* SwiftKeychainWrapper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7C0E703E6FA0DE4C0E4CE1A52FAF925A /* TAPageControl.m in Sources */ = {isa = PBXBuildFile; fileRef = EA130CD648B85D56FD604CD251FFD940 /* TAPageControl.m */; }; + 7C1B11171AC88076494FF044DB0D4BAF /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = C613E0A1F41A822EED765247AC1F954D /* SDAsyncBlockOperation.m */; }; + 7C5505A2D3F2A697A5F324787061F4B7 /* MASConstraint+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6E36EA8058AD2A1D0CFBC154558690 /* MASConstraint+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7CBA95E07A492F7311C7DD8EDF0B4172 /* IQScrollViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CD16763011689F5599A9449C0100867 /* IQScrollViewConfiguration.swift */; }; + 7CF2A972F2443BD1B774F8330E12FE50 /* CocoaMQTTSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 603CC2BA472D5C652471FA248F2568B8 /* CocoaMQTTSocket.swift */; }; + 7D17155B34A28B6119D81475F1E57324 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = CEFAFB0750B061594184687C298B8099 /* UIView+WebCache.m */; }; + 7D17BA44B25E3454A909743A209EB017 /* AnimationTextProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 380D1F16AEB20A423847C1057BF1B74D /* AnimationTextProvider.swift */; }; + 7D3F42BD41F124E613A70A09171C6DAF /* FrameAuth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 550003481FF70BAFA7B39AADB487E760 /* FrameAuth.swift */; }; + 7D42390CDB4FA147504B03DA2A174A0C /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ECB7D5AB4DB61A7C722388BBFF2BCD7 /* ConstraintViewDSL.swift */; }; + 7D76C5A4BE2360D06B9E3652DA94B346 /* Infallible+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5DEF7F662508A12F2DEF686D8ED3570 /* Infallible+Bind.swift */; }; + 7D9A3C79C7741EAB604C5BBA70BA72C0 /* UIView+WebCacheState.h in Headers */ = {isa = PBXBuildFile; fileRef = 1493C734914B1D5213D92AB9DC211BA6 /* UIView+WebCacheState.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DAFFE9CA919E4087289F8A68C971020 /* Infallible+CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE9D676F02A2A0DAB13CF1AB99B5A4D /* Infallible+CombineLatest+Collection.swift */; }; + 7DC113D969DC1E84FFC1454EBB4A1C39 /* LottieAnimationCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993E3A197E04AE42791F78A4570F6478 /* LottieAnimationCache.swift */; }; + 7E105C0F1C97F0A9E8482988E078FDA9 /* CocoaMQTTDeliver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19E88545F1377810D5192228482A9C6B /* CocoaMQTTDeliver.swift */; }; + 7E10CEBAFF194EBBBF7915CD771FEAFB /* AlbumListConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D7819D2675E74CD46EF495115299E5 /* AlbumListConfiguration.swift */; }; + 7E10E1468D6B6AAFF07B3904477B5236 /* fromAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = F91B42E3A00BA1BA0E898C80945E1CC3 /* fromAsync.swift */; }; + 7EA170EC2916A83F249D0095D4B0CEA0 /* DotLottieFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C05ACB5044590C564E48226710D1D64 /* DotLottieFile.swift */; }; + 7EAA83C312561AB4317FD6C58187AEFB /* FrameDisconnect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4C77EBB2493FB7A93A2D0FB646C569 /* FrameDisconnect.swift */; }; + 7ECBAF7FA4FA7C6D82BE38F135514996 /* ControlProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = A912BE71BCC6CE5C8A4741C1D8E0D65D /* ControlProperty.swift */; }; + 7EFB074DB7112E352E4C8F16337C65DD /* bit_reader_inl_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 24D2D7C0AE2ECF3BEFD1763BBEF314B8 /* bit_reader_inl_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7F053BC4BC544FBA247828C7DCD7D280 /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 377728AD2BBD2505210A33E908AD69AC /* Generate.swift */; }; + 7F134BE7BF9163F75F7F84556BE8A69D /* EditorStickerTextViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DB886261132DFF1F39AFB7A34AE0692 /* EditorStickerTextViewController.swift */; }; + 7F46110E24BBC89EB44DD11BE3231C68 /* YBIBCollectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 23A4440664319022C5085EDC5E2C702D /* YBIBCollectionView.m */; }; + 7F52F9458A7051EC57CFEEDF97F4C5BE /* StringExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C1C877790940F9BEC52E105E2345F63 /* StringExtensions.swift */; }; + 7FA8C78DB021A7731D30D80C102DE042 /* NSObject+MJKeyValue.m in Sources */ = {isa = PBXBuildFile; fileRef = 89594ACC4AC688E569CADE30241012CB /* NSObject+MJKeyValue.m */; }; + 7FADE3B72EDEC6913DC839D679C7578F /* OIMSearchResultInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 53CAB2921C752E78CA55B05D3BE85065 /* OIMSearchResultInfo.m */; }; + 7FCA0B78B97499DE69A9A096C5EB1D86 /* LottieAnimationSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE979B9EDF3477B9352133C921EA1855 /* LottieAnimationSource.swift */; }; + 7FDE5BBEB2E3E5E79A686FB6F496E566 /* KingfisherError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8461B294FCAEA798CE2751EEA8891991 /* KingfisherError.swift */; }; + 7FF50219077B6B6DEBA2F63EE87C3781 /* YBIBLoadingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 98CDBE58C4CEDB9BD1550333B927C91D /* YBIBLoadingView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80372663D72D043CE915E2A0B14620A1 /* TagView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81F7D3FF1C6A6BA4CF4343A1D488E223 /* TagView.swift */; }; + 803C8DBF8B2FF6B70E15E0B31A992827 /* OIMGCDMulticastDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 423264E105440A0186760072DCD20FCC /* OIMGCDMulticastDelegate.m */; }; + 80721615C3658BF57B31FA699F19E9B5 /* OIMManager+Connection.h in Headers */ = {isa = PBXBuildFile; fileRef = E8B97DC75EF7EDB859A6C3C461EDDE5B /* OIMManager+Connection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8094FC31D39D05DD242F6D843FB6EEE6 /* OIMSimpleRequstInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B1B2B7ADF26863573179177D46607DB /* OIMSimpleRequstInfo.m */; }; + 80A8D44E274367AA97A804B3BEC264A5 /* SDCycleScrollView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A9BBAC281B464444D34803B8EA62BC18 /* SDCycleScrollView-dummy.m */; }; + 80A92B7601FF8D498B9A6C7824BB59F4 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = D483DE2B67FB68CEE562CE2EA924D7A9 /* UIImage+MemoryCacheCost.m */; }; + 80D44B08D71851B8F27FF295206E99F6 /* YBIBVideoTopBar.h in Headers */ = {isa = PBXBuildFile; fileRef = A9F238C824DC5CABA2405329173D8675 /* YBIBVideoTopBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 80DD2E734D11CDE781980ABCE13B3C11 /* Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3712A5FE54262D3B1DDB054BC62A6930 /* Fill.swift */; }; + 80F2DB3E5E7E2694D29F0576A8CAD40F /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 442AB6262AFA4173559DD94C6274239F /* SDImageHEICCoder.m */; }; + 80F9FB96B47328A2F7369446F6355C11 /* enc_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 046A2C352C7F998A7D82B6A41E402562 /* enc_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 80FCE4E2E998026ECEC85CF2A3454783 /* DDMultiFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 106AF6327F7C20B1A3C440871893FEF9 /* DDMultiFormatter.m */; }; + 80FF01F0BA48E8E5FAA6413ACEE166DD /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF7AC93836316D77CDFA574E1609FB6B /* ConcurrentMainScheduler.swift */; }; + 8131DFF80EB0CFA6C572076DAB2F1473 /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F89B5CA6977567E0293D9A72DCB921A /* SingleAsync.swift */; }; + 813BB877E336A2F38E4E220D082F8557 /* PointValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF009A9EF803941B4308E2E0875AA35C /* PointValueProvider.swift */; }; + 813BE4C96A6D39C13EC50C6CD164F0AF /* MASConstraintMaker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C6735ECE031BB18EA5077C548DFBD3B /* MASConstraintMaker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 819103BC96962A22E6BE5C481415EAA9 /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA453413AE53C58DA619D0B966B41FC6 /* InfiniteSequence.swift */; }; + 81A5635CEA2AD9623E30CAE9AFC3BF65 /* NSBundle+MJRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = 98D77213A7C4320F6008B30A82AE41CE /* NSBundle+MJRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 81D6F749095B82F5316CF87AB04F53A7 /* Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE26DEC3493C62F248963D1C42788E9A /* Operators.swift */; }; + 81F0C9CCF30EA684BF7A7112AB0AE9FA /* RxCollectionViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D0927FACAB8AFC0577E10CE3E51400C /* RxCollectionViewDataSourceProxy.swift */; }; + 81FC65E558B3CF7EFD2635E9B2D38478 /* SDInternalMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 8157ECA13835DD29BFB8AE4885DE404D /* SDInternalMacros.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 820C82AC96BB3513DB5BC2D00ABDB5D4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = EBDD2EBD07F29616D00D6743544912F3 /* PrivacyInfo.xcprivacy */; }; + 824AE53036AF89BA4BCD1B667B49C424 /* Glyph.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF71F4E4CAE92E4661A148450BC4B394 /* Glyph.swift */; }; + 824D4C02186994BB3F19D1C2BB25BB8E /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 088F69851DD20A7E2B4360E4B044A7EF /* PrivacyInfo.xcprivacy */; }; + 8256A78362EA6D8BCD88DBF2722A1EA0 /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0A90D1C88AE636E67296B135530FC21 /* Combine.framework */; }; + 825F44C02EEFC300A58BBDBD1B82A017 /* Do.swift in Sources */ = {isa = PBXBuildFile; fileRef = 964E1CEEC8EEF50447125EFF8F2C54A9 /* Do.swift */; }; + 826286B050F92B77538F437DA962D9B4 /* RxSearchControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9C1726151F48CC295DA74726E495B9 /* RxSearchControllerDelegateProxy.swift */; }; + 82ABC39C71A5425186FD4FE82E721821 /* Platform.Darwin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 543767B9CF81EDA9400B0DF8D3EEE564 /* Platform.Darwin.swift */; }; + 82DA7F3D5A287251DB25A4FC3F19FC93 /* CocoaMQTTTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 854D2B733043533D0537C10C8D8EE81C /* CocoaMQTTTimer.swift */; }; + 82DDB13ECAAF4BC08A115696162BED6A /* FramePingResp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE9017C4BF1888D86038C0AADE59478 /* FramePingResp.swift */; }; + 8307028B55BA31EE09799F208F709156 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = C0E35192C63708E12595F0EDB4626CC1 /* NSData+ImageContentType.m */; }; + 8330FD20F044A6BD4EE38D8E791E4FEB /* vp8l_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 375820DF14407C740784DFFB937AD921 /* vp8l_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 834807B583F5FE3035045614D90674A0 /* ssim_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = CA33EB72D1CACE2D1D5F62ABB5C0D627 /* ssim_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 8365B48A40FED7FB9CBBDD87D5062679 /* LayerProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D74D3A2081E4658E8D782F0DFB43C2 /* LayerProperty.swift */; }; + 838063855EB99B02E184DC49A4D1A2DB /* Cancelable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E7BEBCBFE4F4167333289DF14E0C550 /* Cancelable.swift */; }; + 83A4F2816C1B3F072E1A26A34C3BC4AC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 83B53ADB64DF7A2B6C7C51EDF92B44D7 /* Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04D5A1989D65FB214FF4699DF25DB42C /* Infallible.swift */; }; + 83BCE1D9A0402A956C96D8F2A370452F /* ControlTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E0C12AE7D6E705E0AB3F100E94BDB07 /* ControlTarget.swift */; }; + 83BE1DD5CA7DD2FBB5AE7012A78E405E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 83DD0AA04C87293B8F9578D7D2754187 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 8405137716A5EE714D2B9CB5880FA105 /* MapError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D59B8B70311C2BD0CBADA376182EF9B8 /* MapError.swift */; }; + 846291975C27066CBC64574C9A91ECFA /* SDImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = F4A0F3112C8A93C1B0BD8FB9E959BDA6 /* SDImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 849FF90CD07B763B0D53DD4656BDED61 /* DownloadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DD12149762F4B3855CF74E1E89307DD /* DownloadRequest.swift */; }; + 84D497365935DAADC3FA742E390E3EA2 /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = A830E1FCCBFF0E3E0CB9AC490BA68B14 /* SDImageIOAnimatedCoder.m */; }; + 84EE59925A7B0D31258FFE7568AE9646 /* LRUCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DD35593A8572CEFFF1D2C61579D97C6 /* LRUCache.swift */; }; + 84F295B31499AA8D1A5DF8170D194231 /* KVORepresentable+CoreGraphics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A88BF209F6202B0E730318470DDD8BB /* KVORepresentable+CoreGraphics.swift */; }; + 84F3F943906105FE27ADCB8177D997CC /* OIMCallbacker.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B0150E1B9B7AA3DE6394C130418B487 /* OIMCallbacker.m */; }; + 85178BBF04D011E1CF3E694283E7821D /* DotLottieFileHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE0AA3E0FC0B76C7509CA620EE4FC698 /* DotLottieFileHelpers.swift */; }; + 8581686902C37D5297216E88B7C16E7D /* UISearchController+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F2CAB5804E5C6FE12F21F2E73D0504C /* UISearchController+Rx.swift */; }; + 8584F672BB094EC9E50AFB6E4C8A686C /* CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED3122A7683DD455BE085F8C321705DE /* CombineLatest+arity.swift */; }; + 8585AF6DFD194A19DFDC5DA017C404C6 /* filters_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 52DF6CFFEA5B2F7347476A2524E03780 /* filters_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 85AB23275E9D19394969235E5DC2300E /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C2E42CF6F1C4002FCCDFCE682179B50 /* MJRefreshHeader.m */; }; + 85BAE6C5A2152C5027285C2FA1B94A76 /* WebPSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2406927749C80BFC19A506CF84AFFDC5 /* WebPSerializer.swift */; }; + 85FB57F2721CB076972098B50085D2D7 /* Transform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A8C2DD3A2C1D03AAA15596C4B5EC68C /* Transform.swift */; }; + 86130A7651FCB9F51CA1A66E9DD48D34 /* Date+Dispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 150E76117B97BF8CC0F969C82D1F8200 /* Date+Dispatch.swift */; }; + 863E7306199CE0AEF211451199BB3C75 /* lossless.c in Sources */ = {isa = PBXBuildFile; fileRef = AA7D8697DE6274197EF66543E7204F88 /* lossless.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 865204DCDCE67F9B7735B54BA393ACE7 /* SchedulerType+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6B17E7E86D3F8E7C697BD0F77163A15 /* SchedulerType+SharedSequence.swift */; }; + 8659421801012A5C8BCC0C73F8FF7334 /* sharpyuv_dsp.c in Sources */ = {isa = PBXBuildFile; fileRef = E740FA3F162A1BCAED41C634DEE0BBB6 /* sharpyuv_dsp.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 865C9E00F47572630D3FA6ECC1AFE3D9 /* SDImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = A49A6F4E09E1DE49F95B7C7B5F769716 /* SDImageFrame.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8668F10311E0363DC66344D807FE3A5F /* UIView+IQKeyboardExtensionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52ED7B4D2CAEA2EACAF3CAE743DB8D1D /* UIView+IQKeyboardExtensionDeprecated.swift */; }; + 866A2B75DB39B049EE20D82B29296628 /* Defaults+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFABBFE3E23539AC8A25CB8DF205E4E2 /* Defaults+Observing.swift */; }; + 868A9F524A7985BDA1EA124D9BF4CA63 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A73073075D10A568A023F1D190E7925 /* ConstraintDSL.swift */; }; + 868DC78BB40F54517815D2C0CA1754B6 /* CloseButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 754D0F51CD2EAF6A474BED8B1704DE6B /* CloseButton.swift */; }; + 8690DEC4B00EC34DC177644594F02817 /* CocoaMQTTLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BEB8AC75C51F307499646F3B4C0DF2 /* CocoaMQTTLogger.swift */; }; + 86942D1BF6EBC7C2BA9EFB492E6AB186 /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54C7EFF876F691F4BD0D240C539E241D /* AddRef.swift */; }; + 86B6A957BA4D1D0CAB44A4FF6D40A179 /* AppearanceStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A4FDAF241C16930F812761D74FCEF5 /* AppearanceStyle.swift */; }; + 86B7946E6E92C0BB75E233F860B24D60 /* OpenIMSDK-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EDA3D12EB0F19B293CD12CD014400BFB /* OpenIMSDK-dummy.m */; }; + 86CAB01D950C8BC35EDE0BDC01A2500B /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D933D12E317B5FD83E880AB561D94EA /* ConstraintView.swift */; }; + 86DD4292A20CC25944BDB99A7FF0C10E /* NopDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 227F5DE5D7F361C0109ECD6AD1FED581 /* NopDisposable.swift */; }; + 87237FAFB6D6B0EAC112691A9AE313EE /* PhotoPickerBaseViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8F15BFECC7481FF1ADA3A897CCD4172 /* PhotoPickerBaseViewCell.swift */; }; + 87560A1A80987B82CE618F24090C35C4 /* picture_psnr_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 747D0903BDC62FE4C5DA5E8AA4342FAC /* picture_psnr_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 8776A15F0B57061AD901F2C9FA6E378B /* SolidCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D94DD830C0433EF2212975E170A8EF05 /* SolidCompositionLayer.swift */; }; 878645F78806417B9366A830AAEDF303 /* RxCocoa-RxCocoa_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = 45528F89822ACD0BFE4789411E978828 /* RxCocoa-RxCocoa_Privacy */; }; - 87A86EA4BAA4D59D66A45DF0E43392CD /* SDWebImageCompat.m in Sources */ = {isa = PBXBuildFile; fileRef = 78936EC2DBF2CF8634C0CC3581635D28 /* SDWebImageCompat.m */; }; - 87BB8523D2E944F3AF973ADCF6AE6898 /* SDAsyncBlockOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B552EFCDA8BC74439CF19FF88D4BA03C /* SDAsyncBlockOperation.m */; }; - 88105040BB0E3998C89E898BF3362A36 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 883C4B3FA7C98CA11B121BC4E0092B73 /* OIMAtElem.h in Headers */ = {isa = PBXBuildFile; fileRef = A6169659CBED06CD788319B06F6437EF /* OIMAtElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 883EDEE1C699497CF2A77C3B8A32A790 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F17F7847C169C42CD6A56A88675DE83D /* ConstraintMultiplierTarget.swift */; }; - 884419C8494495094ABE64D75CC3F90C /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61F309BD5CF7919F2B29498052D9B98C /* Diff.swift */; }; - 884F5F55420FE62C12003DECE5661841 /* URLPatchComponentMatchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7373E895FB24690540181BFF56955312 /* URLPatchComponentMatchResult.swift */; }; - 885CC108EFE64571A6332D9FDD7A13C4 /* SGTorch.m in Sources */ = {isa = PBXBuildFile; fileRef = 884E6940DA4CC32666F2FCBF618682DB /* SGTorch.m */; }; - 8872BEB0954C0254A792469F4DBC9891 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 65CE898D2BC17EA493AD82D9EBA94F4E /* MJRefreshAutoStateFooter.m */; }; - 887ADED16D6F8697D2F654DBD6A24604 /* Binder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 486DBFE0E0D4096F665E6499011A443F /* Binder.swift */; }; - 88849EA98966A576058B9C1A27442A84 /* yuv_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = E1747F2179C0D6D74389870E47EF63C0 /* yuv_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 8899CFA2CF5684F53E5DA5A6ACC22A9D /* UISwitch+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83CB43A9B03D8918FD5DE9A913C744DE /* UISwitch+Rx.swift */; }; - 88AEADE841758CB25058FE66DEE9C8F8 /* PhotoEditorContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 628023983AC1634CE080F49424225367 /* PhotoEditorContentView.swift */; }; - 88BBEE036CD8E65AC3FD9E3947EBC30F /* Core+URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D32944BBFF391634E35F8A5B7F4936F /* Core+URL.swift */; }; - 88C759FC42F8AE58B0ADA29B25C01344 /* Image+WebP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17B31F06E373829C72507245A444656C /* Image+WebP.swift */; }; - 88E76DE06F81A6B173F029A37BD0BE7F /* Runtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22A61EEFB555B9222253E7202D107B0 /* Runtime.swift */; }; - 88F56AFF074B6F882778C33015C91E94 /* PhotoEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4EDC467901C4C5FD494CCC7C2C7D0C /* PhotoEditorView.swift */; }; - 8904ED8DEB77CA657A4EED2F86EB961A /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C6DF38B89C797731652AD83F26B9E11 /* AlamofireExtended.swift */; }; - 8929ACF6C9157182F8B76FB438F0D5D3 /* NullCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FCB1FD240155B644AD7582F70744DC4 /* NullCompositionLayer.swift */; }; - 898290F3B36D3CD51ACDC340A9672E24 /* lottie-ios-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFB860E83288CAFEBE347A6D5C2A748 /* lottie-ios-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89930437CF8C0483FAF6B9ABA5ED6449 /* EditorStickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 346BF7588267CADD317DE1D52AD7134D /* EditorStickerView.swift */; }; - 89B8DCB992493D64C31D0F2319C85CF2 /* SynchronizedUnsubscribeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D432C2ACB4146286EE959013FE5D35A /* SynchronizedUnsubscribeType.swift */; }; - 89C457ACFD60011F394C5BD42800BDC6 /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C809857309C827761D59B9706AD5589 /* ImagePrefetcher.swift */; }; - 89E31B923A29D5465F7BA83D2107345A /* SDImageAPNGCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B0442B2E380011F57D531EC0553CF0A /* SDImageAPNGCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89E36B8E42BD6542B8C8006612AB3163 /* anim_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 547E17D5968AAA672C509552228E9667 /* anim_encode.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 8A6AF1A1D8157273EEFE7E708A2C4C2D /* ValueContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B5154A7E3B2A7CADF24AE27A2BFB71 /* ValueContainer.swift */; }; - 8A75F90D7F25EB93D76AD8A672680883 /* AnimationKeypath.swift in Sources */ = {isa = PBXBuildFile; fileRef = 872E8E52ECD0CD6B77BAAB141EA3389D /* AnimationKeypath.swift */; }; - 8A779C3BCF19D53FEFC5BCD0C2EA0494 /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D1715A4AEA9E504CD864D3449B29041 /* SDImageLoadersManager.m */; }; - 8A8E0E33B81B3AB4930AABDED36097F8 /* cost_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = CEBFF121DDC08559C71E1B1D903EBD52 /* cost_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 8A9497651A0DB613191F10C6FCDC5D0C /* SDImageHEICCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DF48A0B567CF35580C11362739F02501 /* SDImageHEICCoder.m */; }; - 8ABE12CC6EECE1DD6B2F826F04FD4BD2 /* alpha_processing.c in Sources */ = {isa = PBXBuildFile; fileRef = 777510880AE0C0FEC2BF99AC49794494 /* alpha_processing.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 8ACAA83990FE291111877CE8251572F8 /* EditorStickerContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFC284EBBDD148F95EC62C58F49F6110 /* EditorStickerContentView.swift */; }; - 8ACE9296AA479804EFD2D3CC417DE801 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 8B16CD2D6E27FEE950C96E3DFD04DB54 /* quant_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = A23F8B3C6F7CCF478BCF4BAE56BD4DF9 /* quant_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 8B31BDB2762ED660B1D0A13FD3F0472A /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = B88D5DEAACE6FC226515037194E0A093 /* Archive+ReadingDeprecated.swift */; }; - 8B31CEDB2E6DCC2766E7DE11E1759B27 /* IndexChangeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D3D018125621B4BB8BD7ED705778350 /* IndexChangeset.swift */; }; - 8B7560712BC596AD4790CDCB38D629BC /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AE5897611BC8BD2C214F2E90A0320833 /* Kingfisher-dummy.m */; }; - 8B76C03618F5FFAB32834CC24C3832EB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 8B8DE512FB2E9193A16BC295E3BD17D2 /* quant_levels_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 087EB3E92C3CE9AEF4989DC32217260E /* quant_levels_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8B914E305D4CD1DABFEB039BBCEB24A2 /* GroupInterpolator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA735164364C8F331D4C9C21EA6F20C /* GroupInterpolator.swift */; }; - 8BABA32F7B94A25D8E9208C0A8D90B2E /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F64866AC624BC264E03015321237874 /* ConstraintMakerRelatable+Extensions.swift */; }; - 8BB4E1330084CFF09A5057180B4E624E /* EpoxyableView+SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E8F9DC1785CD80E71ADCCAC6918470F /* EpoxyableView+SwiftUIView.swift */; }; - 8BD5654E2662F6368895034E3983792A /* KVORepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A737601D8BFA149FD0B9B4EA32208D4 /* KVORepresentable.swift */; }; - 8BDDFED41302DD7ADF441B5E8D81E73F /* YBIBPhotoAlbumManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ACCCADC954162C87B199D3E8C5D94DA0 /* YBIBPhotoAlbumManager.m */; }; - 8BE4081312CA9A9E19E299210C143A69 /* decode.h in Headers */ = {isa = PBXBuildFile; fileRef = D313154C522FDF13B1B8BB1616A141BA /* decode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BEE7F56D2E1F2283CEC98F70ECD9E19 /* DDFileLogger+Buffering.h in Headers */ = {isa = PBXBuildFile; fileRef = 02295F2192B333D5143DEA4CAEEBEAEE /* DDFileLogger+Buffering.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C31B34CE864C7DAB9946012B3CEA688 /* AnimatedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A15E6769049B4159AC23B4E203B59A /* AnimatedButton.swift */; }; - 8C41EA954997897C3E30C5754010C05F /* UIViewController+ParentContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB04F626FFD85B894E25E3C7C4001505 /* UIViewController+ParentContainer.swift */; }; - 8C6C7E25C5A24C936F81823978190E96 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C7047394005D22EF48C06D0F8CD2813B /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8CBC72065F0261B373B958696985AF99 /* IQKeyboardResignHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A1F982C6186E1FDD481C50E8701D062 /* IQKeyboardResignHandler.swift */; }; - 8D416D8997FCE1C4EAAD230D39B817D6 /* AnonymousDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B29F79281A6FD2F1AB20A45A56FF699F /* AnonymousDisposable.swift */; }; - 8D4AA30F9BBB8C344C48D2DC8D951E43 /* DotNetParserFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B60F33DE3FA740B4B9EE0AD8B0619BC0 /* DotNetParserFormatter.swift */; }; - 8D51421FF478040E6383D24254900967 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F22AAF79A7B61FB53A870AA54CECA0A5 /* CFNetwork.framework */; }; - 8DB09720CD159CAE1DA1F9E2E6A0984E /* EpoxyModelProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = A132C1553C8DE2206B733C062A0E2D83 /* EpoxyModelProperty.swift */; }; - 8DDD172EA8E9E4548DFB15F6783E075E /* EditorConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 075CAD90D4B9F0A4CD5758A057138771 /* EditorConfiguration.swift */; }; - 8DE0169623626B1E8E25C98D15189E42 /* vp8l_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = B0785BC93A1F0C4CDC04A31E0BCA48C6 /* vp8l_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 8DF169B3ADBCBA100BE5D2CA34EDC31A /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB37AE0B23DBB1F9D609993CCEB82AC1 /* Combine.swift */; }; - 8DFF92F12F47B1D6B9F5EE78C46FE13B /* Star.swift in Sources */ = {isa = PBXBuildFile; fileRef = B496E0B79F00C67F9FFBDAA29BD68B37 /* Star.swift */; }; - 8E04A59BA6D460441F8AAFCDCE8E8FD0 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A5135277BD48056B6627693C1C65126 /* Archive.swift */; }; - 8E0754113F5AA8EF1DBB84D46F521EA4 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DD1638A7E851D89BA5A60B16C3122AA /* Photos.framework */; }; - 8E2CA0865DE0A2AAF339EE30A9B44B56 /* OIMManager.m in Sources */ = {isa = PBXBuildFile; fileRef = EAF1091660C6429B118149BE01714056 /* OIMManager.m */; }; - 8E549B308AE1B5B2FD6EA4435D5252BB /* PickerCamerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9013133C38E66F88D918BAA5D7105F92 /* PickerCamerViewCell.swift */; }; - 8E563B48B53CF54E65371203515A0D66 /* IQTextInputViewInfoModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF496A8009AFD9E84E8B500C581ECAC4 /* IQTextInputViewInfoModel.swift */; }; - 8E5A40EB2652D32EC7F38833C460581D /* ShapeTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = B37A3310A4C1CE6AF8477A9EDAF2E4A6 /* ShapeTransform.swift */; }; - 8E6FD5ED48BD0F55E0B72C5E0605062A /* ImageLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A75DA3631019C8E174047B15B8ABDEF /* ImageLayer.swift */; }; - 8EE1FB0285E02C433C5E762B13B33DAA /* FillNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C6988BCE07821C58551CEC828E29088 /* FillNode.swift */; }; - 8EF9E020BC7B8E2E9276C2F32408810A /* _RXDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E299BEB764B9A1DEC98EA66D620ACA5 /* _RXDelegateProxy.m */; }; - 8F2B26A032E5F2B4F6A15A8B15A5750B /* RxNavigationControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CCA7A792E4A6A2B6109301CC66A69A9 /* RxNavigationControllerDelegateProxy.swift */; }; - 8F420E9DDBD125163B97E8F489286F71 /* UIActivityIndicatorView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E167799FA0AC9BA04FEF298D51921F2 /* UIActivityIndicatorView+Rx.swift */; }; - 8F4AC5455CDD202655025DE431360AEE /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C90C40D569DD82664EC7B02F8B760153 /* ParameterEncoding.swift */; }; - 8F8EEB10D95D5FC6FBC08E87B2000EBB /* SDWebImageDownloaderResponseModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E8354D6F5407F2DBB7BAE63AF881072 /* SDWebImageDownloaderResponseModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FF7B6477BFA6E6ABA168E1417291D5F /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = AAED5794D1814F1E87DB3BBCE6FBE1B2 /* MASCompositeConstraint.m */; }; - 90264A40ACA3CA7A1F141D7DC7D17EBE /* ImageContentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB8B31FB69DD6EE93331C2441B9893E8 /* ImageContentType.swift */; }; - 903C0676C8543A3F851A6C7CB065921D /* YBIBVideoActionBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BCADFC48E2D3683403AE676EBB1FAB3 /* YBIBVideoActionBar.m */; }; - 90614006DEE2476FC563684DD2A504A0 /* AssetManager+ImageURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A1B6CDC1CCF4DEFD740A6FF78D001B /* AssetManager+ImageURL.swift */; }; - 90A5D35C6A35FE8B6FB2FAFAB8B8AEC0 /* AsSingle.swift in Sources */ = {isa = PBXBuildFile; fileRef = C19DD6665A13D1B7549BC7D51C85D9EF /* AsSingle.swift */; }; - 90AC39C3ADB425C5AC1E7F959BF384BA /* URLNavigator-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 193191BB278021F213BF3AEF417EBFFA /* URLNavigator-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 90B28F4F929AECD1B38177E9977B7F3C /* RxCollectionViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D50688D55F92F226672A561EA59EFC4 /* RxCollectionViewDataSourceType.swift */; }; - 90C6D6F36FC7F036060068E40C3FA0DE /* CLIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = BD4ADD434EFB26616EA32E6982267301 /* CLIColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 913A7FD6C80BA64EA81C7CA2B420D588 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 9170655A7E8C85E679CEC6A234C6EF03 /* RepeaterLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5F861507F91FE57B627EB903164472C /* RepeaterLayer.swift */; }; - 917246393B791C8A6CB643AAD3DC2364 /* KeyframeGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2445A2BFA4F1F72112D3E9B9BD1ADDE7 /* KeyframeGroup.swift */; }; - 9173CA8CE1020124CBCDCC83948CDB90 /* PhotoEditorCropToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49624603A0AE8BE4B18806F2DAD7B3D4 /* PhotoEditorCropToolView.swift */; }; - 91848ADD44CC1B974590F9FAD0D33F05 /* HXPHPicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 30BB18DD5E18152570847746CA122253 /* HXPHPicker-dummy.m */; }; - 918693042E70C68780908DD1BF122833 /* YBIBInteractionProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 6115E13375F7CD6D73AD6BF3A4D25C83 /* YBIBInteractionProfile.m */; }; - 918AD406999AAE718841B034702BF5CB /* TAAnimatedDotView.h in Headers */ = {isa = PBXBuildFile; fileRef = 112275B5F2DA020D1F5AAA0ADA2963C4 /* TAAnimatedDotView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 919299610C2CA6AB6B58C902F9FA91F5 /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FFB55FA3F07B1F7CDEF3C5945A8B171 /* AnimatedImageView.swift */; }; - 91AF661BB301FBDB2CCD3CED62072DAE /* EditorChartlet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F90E27702A8F171A62776D2F844F0A4 /* EditorChartlet.swift */; }; - 91B87C5B0A4D59D26CC93DA1001618F5 /* ViewTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1DB3CB1B0F9F8FBA6EB3FF0651D9C39 /* ViewTransition.swift */; }; - 91C27091CC5DCFA114186C0C7805E8C8 /* NSView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FD8E3AD2D74BE680D34541310F348A2 /* NSView+Rx.swift */; }; - 91CA63A8C62222E89FBB8FA2B7FE9CDE /* IQKeyboardManager+Resign.swift in Sources */ = {isa = PBXBuildFile; fileRef = C339600B8575DE34AFEDE149E0B30136 /* IQKeyboardManager+Resign.swift */; }; - 91D2F952AB2260566749C785C7584F29 /* DDMultiFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 661FEE91FA7BA21B21CE0C49E062F54B /* DDMultiFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91FA6EE5F4C6B9164271AE9205E12C81 /* AssociatedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = B893A474C858F5C4E36D48E3A0D8C038 /* AssociatedValues.swift */; }; - 923384554D67DB88905E486CC081620D /* DisposeBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC4D4B98E55AECCD92A3E8F03E8B4975 /* DisposeBase.swift */; }; - 924BB206EA770A1521FDEB1AC1C35E44 /* CameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9591005EF300740D15A68DC41F123102 /* CameraViewController.swift */; }; - 927FB34ED26E3AAC260DE630EC4B5862 /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 812CB0666B267F4A5171B774F6D0D99B /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9298CB7C2E4AC4E751E535DA15BEEFA8 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D5EC839402CC9058163D064D0B5E9CD /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92A43BFC165F5595D1CF24AD2C65D6C0 /* ImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D460BB20DEA54F4F1227BF8309D4153C /* ImageDataProvider.swift */; }; - 92D50FCEBF77BFACA64AB481BF6EB687 /* CallbackQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A4F33BE715AF8213D74710FD0599549 /* CallbackQueue.swift */; }; - 9358FC6C6DA728AEE250D8E7DD236946 /* MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B3F62938E971A0D73273E6ECF332744 /* MJProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 936503E8CE03C1985CC7F73B2FCD5D25 /* EmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D03C4A705D61C193A9538DBE31D5AA6 /* EmptyView.swift */; }; - 937E4C92B122C2049A0CAE2D16116B05 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 938A1624E7E0AA2C636073D50916A3AE /* SDDeviceHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 56C8858466B5059D32D3438BB36FF23C /* SDDeviceHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 93C6077AEFD0E46EBC9140156C32A15C /* PhotoEditorFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = B023E00F6097377AEE33C52783C2D1FB /* PhotoEditorFilter.swift */; }; - 93DD3438FA31B90F60BCC482878F1968 /* YBIBVideoView.h in Headers */ = {isa = PBXBuildFile; fileRef = C5B7E713872D1FF5E662E3E0EA2B6505 /* YBIBVideoView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94440F5D1A5B7F87009DD3EA604AD46B /* AlbumTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DDF4C5CB57A76EED48FAB3C5DE0F648 /* AlbumTitleView.swift */; }; - 9468675C9202DD78D32E8C7888DBC731 /* UIView+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D076B59FCDF9A92CE3960EA4ADC0446E /* UIView+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94CE2F8D9A996E797BBF4D37580CDA63 /* YBImageBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = CD18DA084428987D08B37C1AEAC65E52 /* YBImageBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94FF83A49128359842CBC062AE979EA7 /* ShapeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59AC7679378D0A2B32322B3D52CC590D /* ShapeAnimation.swift */; }; - 9534119EDE1FB3F9DECE76D8130D6397 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FB9C7E464A314BD63D92538B44F8A6D /* Storage.swift */; }; - 953FF696DD3B62FB3B39114A6A8FA0CA /* PhotoTools+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606B36089216BA9AAA95CC158D76FE49 /* PhotoTools+File.swift */; }; - 9540707F7AAB70EDE0369AE6E75A9CAD /* Infallible+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAE83CBDB804481CBE1626600EB92085 /* Infallible+Driver.swift */; }; - 9543FC7093A9F1F3E2A1E438DD179C13 /* UIView+Responders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FDFCFAED54B1A668030FBB5DAA027B8 /* UIView+Responders.swift */; }; - 954A8A86B59625A40BF76D00D8864C8F /* SDImageGraphics.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FE1BA63F690470C059660AF0B0F5AC8 /* SDImageGraphics.m */; }; - 955B87902E039163281C4F47C95DB851 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 95FBC83924660AF9550D968A6631AD5A /* MJRefreshBackNormalFooter.m */; }; - 95B8F2F4A82C78DFF16B127288DF8612 /* DDTTYLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = A3F2F6B8CB2B809BBF697237FB094086 /* DDTTYLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 95C73DF77BBC82BA09363C45E7B6021E /* YBIBSheetView.m in Sources */ = {isa = PBXBuildFile; fileRef = D7BAE3331BAA65418B42B63EB7A827D8 /* YBIBSheetView.m */; }; - 9612707F9DE302BF40FCBE970A9F859D /* YBIBContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 30D98D1A29F5DC6D072CD99F8B268931 /* YBIBContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 965ABCBF7A409A106D970E220F43F0D2 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 42B2824679F61129A99A02FB3B02A3D9 /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96AF24FDB989490637082038CF8EB93C /* Navigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 486C16E381473095D0AA5D90E00E5843 /* Navigator.swift */; }; - 97213AF9E83AFDA9B63697F584DFC456 /* ControlEvent+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3CB5318B015CED596B8976F167CB700 /* ControlEvent+Signal.swift */; }; - 9765D023EA9673C300F3621E73902B80 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - 976F2DEC006F1C7F8AEB874CE0018985 /* DefaultsAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAAAB6F1E8977B72F66A0CD9B335B76 /* DefaultsAdapter.swift */; }; - 97A13C75DA2BCECA29B0E7F6BA8EEC4C /* sharpyuv_gamma.c in Sources */ = {isa = PBXBuildFile; fileRef = 088A84604336D5130B62B245D8D225F0 /* sharpyuv_gamma.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 97BA4EACB3823937158991C170924719 /* ObservableType+PrimitiveSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B1E426822FE7CAA3703A573A0281F51 /* ObservableType+PrimitiveSequence.swift */; }; - 97BD0BC7A9938C464C3D919699CAE7B0 /* mux_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 45A82B7D82427BF1446499386E18E4FB /* mux_types.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9812D1624B70319D03262967BA53F1D5 /* AlbumTitleViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23627BEB011259D12B07A6DA62769D64 /* AlbumTitleViewConfiguration.swift */; }; - 9847DF292DB8ED979719B25E15224044 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 984AE6A5A39C7F95738C1D95CCABB10B /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5C635E55F5A6DFE07FD9D482A1443A7 /* DisposeBag.swift */; }; - 9869E7C419F4AA14557C287A77E6E7F8 /* String+Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8309D96FCEC99B33E677AF7698B74F /* String+Parser.swift */; }; - 9878BBBB5F72D65F065E1B2D097BBCA0 /* AlbumTitleArrowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8552E5A9E1DCA523D27BEF65DF4E6F35 /* AlbumTitleArrowView.swift */; }; - 98D2C5A94857D45C5E6476DF11659DD3 /* SGQRCode.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C966D75070D79B9D443364A819C0C3F2 /* SGQRCode.bundle */; }; - 98D4097922F78A49E02441100FF15AC3 /* PreCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2355152919250DBBD5FD5A9E31F11464 /* PreCompositionLayer.swift */; }; - 98E85707455AF1E27F8FBDA8CFB3B53D /* CustomLanguage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8EA635F6E6ACFAAD23856120F08C7CD /* CustomLanguage.swift */; }; - 98EFA246A2A845E74DEFF098CE60356C /* SDCycleScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 137B6C5117E166291507375196C29E1B /* SDCycleScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98F2777C7B7BA024CF0DEA263EBEE2FD /* _RXKVOObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = A96C05B637BDA477BEE511BDBAF925FE /* _RXKVOObserver.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 990A4E31ADF23A8BC1C5044ABD45B979 /* ImageContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83FC585A2073635F19A93B8712ADFCDE /* ImageContext.swift */; }; - 994DF47F20CED7B2C71E7F748972EC3C /* Maybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23BCD448D0D59E19E3DE5D1D80437EB0 /* Maybe.swift */; }; - 9957F0F1B355B8E1F8FAA917159E9199 /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E4D3017944C2D05C9DAE6514D3E169CD /* SDImageCoderHelper.m */; }; - 9981C32E56FF09688D9FBCBF45FB93B2 /* NSButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 622275BE3CDED43E4D4D52732AFB6ECB /* NSButton+Kingfisher.swift */; }; - 9983957076323822F4C0A8EA4CF352DE /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3341A7FC89EF4648B74656D78B47F6E2 /* Zip.swift */; }; - 99AB67489232A0D64E91577E068EBDDE /* RxCollectionViewDataSourcePrefetchingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F09681D932FC2A10A110AE909ACFCC0 /* RxCollectionViewDataSourcePrefetchingProxy.swift */; }; - 99D2D2129D75D3C07E0123C98C2A14FA /* TransformAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89A49B541760965E76940F9AFC9F361A /* TransformAnimations.swift */; }; - 99EF2A49CBC5CB056F28CB5BE9635468 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C8AD3E343425805782DD3A683C4AB359 /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A57392E0BC5A5E6A886134E855A9381 /* RootAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277586195FD85080AED690938D317998 /* RootAnimationLayer.swift */; }; - 9A748E06A1A0D4590C268AE3517D906F /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30F967339486C931FF72A91349018AC /* IQBarButtonItem.swift */; }; - 9A7E5CE23211E85C6232833EB3741A71 /* PhotoPickerSelectableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 462A0CFAB7382F9081365327D7F33267 /* PhotoPickerSelectableViewCell.swift */; }; - 9A7FB1E975A5955C896E6B195C521804 /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 456E97C9FEB89B1B0A86B831368F12E0 /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A994727773B0B2ECF0BF43B89ECA9D6 /* upsampling.c in Sources */ = {isa = PBXBuildFile; fileRef = 2696085F8CF53F46F0711050C0A10E07 /* upsampling.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 9ACCB282299CCC09F7018E6CA760C1D1 /* NSObject+Rx+KVORepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EB164560DE3677F1DA177D4DC5B5447 /* NSObject+Rx+KVORepresentable.swift */; }; - 9AD9BA7A311DF770828C4B304E63A9A1 /* OIMQuoteElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 63D81D87D9F9A845B326030633297628 /* OIMQuoteElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B81AAA7E1947A2A38DC7CDFD27B76D5 /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13248AF2B1E920AB3B30184BB73FE587 /* IQTextView.swift */; }; - 9B8F1984A1F831434EFB36B7BC03C431 /* SDWebImageDownloaderRequestModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AACEF2C953C3C0DBC735A19E819E97D /* SDWebImageDownloaderRequestModifier.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9BA535D00043A9D52063EFEB813E6278 /* Amb.swift in Sources */ = {isa = PBXBuildFile; fileRef = E102058F9539D17E8EEB15112A058EEF /* Amb.swift */; }; - 9BE9ABF100051ABF1961958C54100327 /* muxinternal.c in Sources */ = {isa = PBXBuildFile; fileRef = F2929AA63D82688BF8DA0D85380910E8 /* muxinternal.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 9BF10B033DE930DCB412101F17A2F9F3 /* Locales.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A84325CE3F960B48B1C19244D0063D0 /* Locales.swift */; }; - 9C4901CD6CC93184585BD5E765C9841C /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = DDAEE0D2FE71C52FD936AF6D2095F23E /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C5AD0CCE68EEAE2096052C189F3A948 /* YBIBImageData.m in Sources */ = {isa = PBXBuildFile; fileRef = 21D531AE86A9BDBC117C3BE120B6E7E5 /* YBIBImageData.m */; }; - 9C89110A7C655E5C39B3135E9020CBF7 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50BEB8D58D55B2FCF2EC6E5DFC90DAC7 /* Alamofire.swift */; }; - 9C975B2F72D067FD855FC9874F45A40C /* SDWebImageDownloader.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F5CFA1AE264D0A7CC41E863C86C294C /* SDWebImageDownloader.m */; }; - 9CA7295DFA502275B960E09DE8FA8BA2 /* SDAnimatedImageRep.h in Headers */ = {isa = PBXBuildFile; fileRef = 81EEAD77C593182D302DEC7E521078E3 /* SDAnimatedImageRep.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9CBDE95F15D7D2F7926F74170A23E8F1 /* common_sse41.h in Headers */ = {isa = PBXBuildFile; fileRef = 489954733A3E65665BFD9C14B718677E /* common_sse41.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9CE2B0DEBE0178D7BCA89AD9A7F0BFDF /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB9C1CC0C5611BE2E3A59B48E0E6260A /* MultipartFormData.swift */; }; - 9D02329C05D857C2BDD3089FB523862D /* RxSwift-RxSwift_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = 420D86B6DE49D1E1898C3A498E4F4195 /* RxSwift-RxSwift_Privacy */; }; - 9D10B4077239CD4A98091985A4A3F523 /* rescaler_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = AF7AAD023CD959C7D04EDAEF495E42D4 /* rescaler_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - 9D22F88B7F1AF054C2BF025DFB767154 /* IQKeyboardManager+ToolbarManagerDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5A5182C75AEAD0F757530B825BB3DA6 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */; }; - 9D3503AD6B9B4367B93A5B548AA24040 /* OIMManager+Connection.m in Sources */ = {isa = PBXBuildFile; fileRef = D1DB4F36A216F0FE7063760FC77B8302 /* OIMManager+Connection.m */; }; - 9D3C14C890F752864533DD41540D7678 /* Commons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F851682E599767E9AA044FB11D2D5E4 /* Commons.swift */; }; - 9D46306826317C2783B0A8255691E035 /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1089D62CEB1502272B582AC17278077E /* StringEncoding+Alamofire.swift */; }; - 9D7EBD01D0A527C34FD31EE1DBDCD650 /* DelegateProxyType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E519B15CCB12F735F0129579FF286E3 /* DelegateProxyType.swift */; }; - 9D8BF11B27F90EE2FEC8E030D8D324C7 /* OIMConversationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CC518F434B48E1EC17CB97405E4AAE6 /* OIMConversationInfo.m */; }; - 9D99119517C283B342844D8DA80A1F26 /* OIMDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = EE4A4FAAB99051ED36282D6DBBCEA552 /* OIMDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9D9E2C0A96E8F024ABEA21B652809FC1 /* VectorsExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C592FF44021E880C95CFE088D4C80A27 /* VectorsExtensions.swift */; }; - 9DDE9A4DCA7722B701E4BC61B2CD9D6E /* KeychainItemAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E93437C29905A7527D19EBEC710F418 /* KeychainItemAccessibility.swift */; }; + 87E6581111DF30DAB6BE39E2C5B9A86E /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8FA084404ADC4DAA8462C55C53C1E1B /* RecursiveScheduler.swift */; }; + 87EEDE0EC414BCF701CDCF1963EA053C /* yuv_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = FDECDECD34ADFC847CCA706F55AFC610 /* yuv_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 883C4B3FA7C98CA11B121BC4E0092B73 /* OIMAtElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 888BE989F91C6C44101C700B8DEBA649 /* OIMAtElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 883EDEE1C699497CF2A77C3B8A32A790 /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 378372F498F665F3FFD43D996BC74AD0 /* ConstraintMultiplierTarget.swift */; }; + 884419C8494495094ABE64D75CC3F90C /* Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 684A7422DA5D5676B52EEDD2E28FC657 /* Diff.swift */; }; + 884F5F55420FE62C12003DECE5661841 /* URLPatchComponentMatchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5593B53EE9179304F30998CE87A02732 /* URLPatchComponentMatchResult.swift */; }; + 885CC108EFE64571A6332D9FDD7A13C4 /* SGTorch.m in Sources */ = {isa = PBXBuildFile; fileRef = 9ABFFC2EF84C27BEA54CF8DD10F38B28 /* SGTorch.m */; }; + 8872BEB0954C0254A792469F4DBC9891 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = DE63E8D0A27679395591CD603D53B1EE /* MJRefreshAutoStateFooter.m */; }; + 8899CFA2CF5684F53E5DA5A6ACC22A9D /* UISwitch+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CDD47B22A2046775AB63801AE6381A4 /* UISwitch+Rx.swift */; }; + 88A6155330CCF69524EF9DDBD69E1B9A /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D0EC04DD6C08373446E1739FED2DFC3 /* ElementAt.swift */; }; + 88AEADE841758CB25058FE66DEE9C8F8 /* PhotoEditorContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B9CB5F944772CAB0E89F0484325B547 /* PhotoEditorContentView.swift */; }; + 88BBEE036CD8E65AC3FD9E3947EBC30F /* Core+URL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F75D1EC0E1C320D3F9EFC4E8509D719 /* Core+URL.swift */; }; + 88C759FC42F8AE58B0ADA29B25C01344 /* Image+WebP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF7E9B4E27E9DB75877750C9B8021F9 /* Image+WebP.swift */; }; + 88E0FD7941654F2DC21D27A34DD3CD56 /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 19AB346F664AF3BB68015BA96F15CA47 /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 88E76DE06F81A6B173F029A37BD0BE7F /* Runtime.swift in Sources */ = {isa = PBXBuildFile; fileRef = B39A92039C1C6E5A539881A3C30A3EFB /* Runtime.swift */; }; + 88F4CA6C1D8268726FB5EAFA1B8B60DB /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 45F9E01CB1B5AD57F4855BEAFABE70FF /* PrivacyInfo.xcprivacy */; }; + 88F56AFF074B6F882778C33015C91E94 /* PhotoEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 560267D27DA0FB5CD68E69E62A79BFF6 /* PhotoEditorView.swift */; }; + 8904ED8DEB77CA657A4EED2F86EB961A /* AlamofireExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06C8D5A6462C9B25ACD0B162347F8166 /* AlamofireExtended.swift */; }; + 89082AF17AF5C1B80EC64F39D659DAC2 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = D62C830395ABE984B932E2867CE13845 /* SDWebImageTransition.m */; }; + 8929ACF6C9157182F8B76FB438F0D5D3 /* NullCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB216BE0D8FC0CAFD94F4FBE9464267E /* NullCompositionLayer.swift */; }; + 893AE39673116061407A043A4E4DEA45 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 898290F3B36D3CD51ACDC340A9672E24 /* lottie-ios-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1358D7123BAC8C0A76B45D29BF04C27E /* lottie-ios-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 89930437CF8C0483FAF6B9ABA5ED6449 /* EditorStickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53184C1114CEE9521E8AB97A2DB43893 /* EditorStickerView.swift */; }; + 89B8FDF95E703B9B1D6D9B056906A1A2 /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 31095D3E6FF883967D59CFEE2575C384 /* dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89B9718F6328E69EB494F036512691D1 /* animi.h in Headers */ = {isa = PBXBuildFile; fileRef = 6939A2F658A7053D427D8CA0499EEA5F /* animi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 89C457ACFD60011F394C5BD42800BDC6 /* ImagePrefetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5377BAA90C9F75A3EAA5CF2746999E7 /* ImagePrefetcher.swift */; }; + 89CC589A21EE67EE5A904D350EA92A11 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager in Resources */ = {isa = PBXBuildFile; fileRef = 80A40EDA3AF0499BDBCFF09467BB49AD /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */; }; + 8A52D7C8D989FC845E323308C4A87D71 /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64FDE768BCD110D76CA31416FCD660DB /* ImmediateSchedulerType.swift */; }; + 8A6AF1A1D8157273EEFE7E708A2C4C2D /* ValueContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F7489B3075663D6DD35FC554D303EC6 /* ValueContainer.swift */; }; + 8A75F90D7F25EB93D76AD8A672680883 /* AnimationKeypath.swift in Sources */ = {isa = PBXBuildFile; fileRef = B36D5FDE715BA934BD34F8786C8DA5A5 /* AnimationKeypath.swift */; }; + 8ACAA83990FE291111877CE8251572F8 /* EditorStickerContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 155696EF7C4D692123629E939A4CFC88 /* EditorStickerContentView.swift */; }; + 8ACE9296AA479804EFD2D3CC417DE801 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + 8AE640439F0C94295E509ED320B648C0 /* MqttSubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71223FB6D980C715AF98D520D963B6B5 /* MqttSubscription.swift */; }; + 8B194760C4583AB3D5E17DB95679E3F6 /* CocoaMQTTStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE1D44D51C8A45FD369FE3952E1D2B2 /* CocoaMQTTStorage.swift */; }; + 8B31BDB2762ED660B1D0A13FD3F0472A /* Archive+ReadingDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8112BFCAD85A1901C75F5AECF9170CC /* Archive+ReadingDeprecated.swift */; }; + 8B31CEDB2E6DCC2766E7DE11E1759B27 /* IndexChangeset.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9552D22A9233631F84C168E3F12CBFA /* IndexChangeset.swift */; }; + 8B7560712BC596AD4790CDCB38D629BC /* Kingfisher-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 26B386FB80AD4FBC1955D5C4F245DDFD /* Kingfisher-dummy.m */; }; + 8B76C03618F5FFAB32834CC24C3832EB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 8B914E305D4CD1DABFEB039BBCEB24A2 /* GroupInterpolator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD075C270BA262E2E0C9C7E705229ABB /* GroupInterpolator.swift */; }; + 8BABA32F7B94A25D8E9208C0A8D90B2E /* ConstraintMakerRelatable+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D581489AF2D977E97DD236B6C4C9583B /* ConstraintMakerRelatable+Extensions.swift */; }; + 8BB4E1330084CFF09A5057180B4E624E /* EpoxyableView+SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5516434AFE89CDE1669E3995A27B09FE /* EpoxyableView+SwiftUIView.swift */; }; + 8BD5654E2662F6368895034E3983792A /* KVORepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 620866CE6F644E71DD360A0EFAC1D7D4 /* KVORepresentable.swift */; }; + 8BDDFED41302DD7ADF441B5E8D81E73F /* YBIBPhotoAlbumManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 23C5E159C4F71F067E60F69603441421 /* YBIBPhotoAlbumManager.m */; }; + 8BEE7F56D2E1F2283CEC98F70ECD9E19 /* DDFileLogger+Buffering.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D5F7D75A5F16DE8ED73EAB9D1681EE0 /* DDFileLogger+Buffering.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C31B34CE864C7DAB9946012B3CEA688 /* AnimatedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D00321F8E978E74F4F4D60B3EB34997C /* AnimatedButton.swift */; }; + 8C41EA954997897C3E30C5754010C05F /* UIViewController+ParentContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AACBABCF5B90F04C33A9FECD309A234 /* UIViewController+ParentContainer.swift */; }; + 8C64A7C9603A2B05E32A7C417F5D9CEA /* frame_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C782F6BBA9D908DF2ED57F50C12C768 /* frame_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 8C6C7E25C5A24C936F81823978190E96 /* ViewController+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ED6DCACD44E7EC0DE34BDE788A9AFB3 /* ViewController+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C7BD9F3D0BD5668940D9E18FA9AEABD /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 8168F54744B4E03AC915F62D17CB4288 /* SDWebImagePrefetcher.m */; }; + 8CBC72065F0261B373B958696985AF99 /* IQKeyboardResignHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86CE596122BF5B193D2C94C75BF941B4 /* IQKeyboardResignHandler.swift */; }; + 8D4AA30F9BBB8C344C48D2DC8D951E43 /* DotNetParserFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4739742911C8301AAE3EF467466767F /* DotNetParserFormatter.swift */; }; + 8D51421FF478040E6383D24254900967 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 376332B7BB7B62B68F0FF48144147A45 /* CFNetwork.framework */; }; + 8DB09720CD159CAE1DA1F9E2E6A0984E /* EpoxyModelProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5D66152891A6C0CFE6DE74BD7438631 /* EpoxyModelProperty.swift */; }; + 8DB634AD509A72F1980DCB26BABB92DB /* RxRelay-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = FFA5203579DE0199D1EEBA334E365319 /* RxRelay-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8DD1C035F8672F10066660417B5BAF12 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93AC70A2D46A8E4C52484F59DCF920FD /* ImageIO.framework */; }; + 8DDD172EA8E9E4548DFB15F6783E075E /* EditorConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B549342902CF998B972113E3FFF6A2A /* EditorConfiguration.swift */; }; + 8DF169B3ADBCBA100BE5D2CA34EDC31A /* Combine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9A16E733FC1E5FE0D380BACDD771918 /* Combine.swift */; }; + 8DFF92F12F47B1D6B9F5EE78C46FE13B /* Star.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86A0D05E1B1AF9C0E4BDE710355585D3 /* Star.swift */; }; + 8E04A59BA6D460441F8AAFCDCE8E8FD0 /* Archive.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4F1801A3E01D1794CA3E91A36D21155 /* Archive.swift */; }; + 8E0754113F5AA8EF1DBB84D46F521EA4 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0716716AD81AB2B2F5991A5E536BC03 /* Photos.framework */; }; + 8E2CA0865DE0A2AAF339EE30A9B44B56 /* OIMManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 31B8537D70EEE6E1BCF41B5917CDDC13 /* OIMManager.m */; }; + 8E549B308AE1B5B2FD6EA4435D5252BB /* PickerCamerViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35BDD75E89E9E5DD5191A7DBE6C746BE /* PickerCamerViewCell.swift */; }; + 8E5A40EB2652D32EC7F38833C460581D /* ShapeTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 248B06013737714E8413242881D097C9 /* ShapeTransform.swift */; }; + 8E6FD5ED48BD0F55E0B72C5E0605062A /* ImageLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59E0C671EF5B5B543DDE4A04023C67FD /* ImageLayer.swift */; }; + 8EE1FB0285E02C433C5E762B13B33DAA /* FillNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDA2360D1A6E94ECABACD3E1106335EF /* FillNode.swift */; }; + 8EF9E020BC7B8E2E9276C2F32408810A /* _RXDelegateProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B6298FFD801309A5E645D5E694C08F2 /* _RXDelegateProxy.m */; }; + 8F2B26A032E5F2B4F6A15A8B15A5750B /* RxNavigationControllerDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F7D27217E891C5F29A685C844B453C /* RxNavigationControllerDelegateProxy.swift */; }; + 8F2FF92C2ACB7B2551DE8D9C8E26E204 /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15B4330482D87D40C8FC65666CF75DD1 /* SwiftSupport.swift */; }; + 8F420E9DDBD125163B97E8F489286F71 /* UIActivityIndicatorView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B9BF634B186B10B3DEB036AF4CFC662 /* UIActivityIndicatorView+Rx.swift */; }; + 8F4AC5455CDD202655025DE431360AEE /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EF9D3B110D82B8135F84345D73A0B28 /* ParameterEncoding.swift */; }; + 8F77F520107C9BE9E88265F2B4B3D1D4 /* webp_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 846FD9A1A5BAE3A6EF9143279169E011 /* webp_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 8FBBE87E9886B5BE2B5B44D08812B43A /* rescaler_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C1D9B69A7128BBCC29DD780202F2071 /* rescaler_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 8FD8500C56E59D86AA72FC774FB3F2A1 /* SDImageFramePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 35095A89B3C9A2BF1B30A1C61D469BA6 /* SDImageFramePool.m */; }; + 8FF7B6477BFA6E6ABA168E1417291D5F /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 016496ABA78D6144AB7AD700001BE86A /* MASCompositeConstraint.m */; }; + 9010DB8F0F66A0EEB1A7DB5C96611654 /* IQDeepResponderContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5660094DA95120EE2B8164E7355B119 /* IQDeepResponderContainerView.swift */; }; + 90264A40ACA3CA7A1F141D7DC7D17EBE /* ImageContentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDCC82CDB4622F4F83A99EB2D2AE120E /* ImageContentType.swift */; }; + 903C0676C8543A3F851A6C7CB065921D /* YBIBVideoActionBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 1EC1B8C248D81410FDAFCB9BE646654F /* YBIBVideoActionBar.m */; }; + 90614006DEE2476FC563684DD2A504A0 /* AssetManager+ImageURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 458E91DE3D1A4CB674A1B648258294A3 /* AssetManager+ImageURL.swift */; }; + 907545A1764CE1C7724399E65237DC20 /* yuv_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 27A43B258704D27FDBD3E9FF44A51207 /* yuv_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 909C544B79175483251BC46FB225BEBA /* CocoaMQTTTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBB464629EFF24FC46445D5425B39D7E /* CocoaMQTTTypes.swift */; }; + 90AC39C3ADB425C5AC1E7F959BF384BA /* URLNavigator-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 546737B43CD88885573162690F1B1567 /* URLNavigator-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 90B28F4F929AECD1B38177E9977B7F3C /* RxCollectionViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6946053ADEB795CA6BF8DC00F6E9818C /* RxCollectionViewDataSourceType.swift */; }; + 90C6D6F36FC7F036060068E40C3FA0DE /* CLIColor.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8D9B8D105015C6EEF5E5C35E31DF2A /* CLIColor.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 90DFC2E073F83E7EE947EFCCB868B573 /* lossless_enc_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 33F42C258DDB2E31077B9DE98F72F3B4 /* lossless_enc_sse41.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 91057BB30A6A21F670FACC5D492C2447 /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 430D8BCB203E6FA33D34F430A850845B /* Dematerialize.swift */; }; + 915C0D7BCA417AE073CCEC9CCB77A8BA /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65867AB26CF8515F87512779D35AAFE7 /* SwitchIfEmpty.swift */; }; + 9162EF894ECC79E2524927E8EDD3A5F6 /* MqttPublishProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD6EB60D65042D6F79F8E621BF2E5BBA /* MqttPublishProperties.swift */; }; + 9170655A7E8C85E679CEC6A234C6EF03 /* RepeaterLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 640F3024D486EF2882424829BADB5957 /* RepeaterLayer.swift */; }; + 917246393B791C8A6CB643AAD3DC2364 /* KeyframeGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77D36BE38B7CA86985F86993EB76ED85 /* KeyframeGroup.swift */; }; + 9173CA8CE1020124CBCDCC83948CDB90 /* PhotoEditorCropToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 663A9AAB1644EDF5B89B050210D188AE /* PhotoEditorCropToolView.swift */; }; + 917F9BB22E1E892B4144A812C2F49096 /* IQTextView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7196CA4EF95950D8E1B0780E5CB73D1E /* IQTextView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91848ADD44CC1B974590F9FAD0D33F05 /* HXPHPicker-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DC1E150CEE2FA713EF8E77E76B5F0E06 /* HXPHPicker-dummy.m */; }; + 918693042E70C68780908DD1BF122833 /* YBIBInteractionProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 0736A9464846A7FFD4CD0741B9E475AD /* YBIBInteractionProfile.m */; }; + 918AD406999AAE718841B034702BF5CB /* TAAnimatedDotView.h in Headers */ = {isa = PBXBuildFile; fileRef = 3526170ED597B2F4DF1BF8DD590D5391 /* TAAnimatedDotView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 919299610C2CA6AB6B58C902F9FA91F5 /* AnimatedImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6563437DD714E4651A54D5D9827E41BB /* AnimatedImageView.swift */; }; + 91AF661BB301FBDB2CCD3CED62072DAE /* EditorChartlet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 909BD42DC3755A52936AECE9F677FAC7 /* EditorChartlet.swift */; }; + 91B87C5B0A4D59D26CC93DA1001618F5 /* ViewTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 801F815AE21CA3F75E4A08CD741E3FBC /* ViewTransition.swift */; }; + 91C27091CC5DCFA114186C0C7805E8C8 /* NSView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5758CE5A67AFA979046916DC97CC125B /* NSView+Rx.swift */; }; + 91CA63A8C62222E89FBB8FA2B7FE9CDE /* IQKeyboardManager+Resign.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0E21354913A22F0F4F3F224BF3699C6 /* IQKeyboardManager+Resign.swift */; }; + 91D2F952AB2260566749C785C7584F29 /* DDMultiFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 76E48E1B8ED8E32B9FD17F6AF5FD4C19 /* DDMultiFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 91D68DE854B45FB77508E2782F9D36F6 /* SDWebImageCacheKeyFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DEF1FCE593F12623DE48F3406DF7003 /* SDWebImageCacheKeyFilter.m */; }; + 91FA6EE5F4C6B9164271AE9205E12C81 /* AssociatedValues.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE234EDBBA854CE992A10F0073B4502C /* AssociatedValues.swift */; }; + 920C1A9E23C3CE15BF44203272B96908 /* lossless_enc_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 4F4493CF215BF661CDF160795093A360 /* lossless_enc_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 924BB206EA770A1521FDEB1AC1C35E44 /* CameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56CE73BB666FB1014D9B132720BD8776 /* CameraViewController.swift */; }; + 928FCF60E3649C39E281C1DD526CEF07 /* SDMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = BDE8C8E66FA082F46F1643FAC6D3F43D /* SDMemoryCache.m */; }; + 9298CB7C2E4AC4E751E535DA15BEEFA8 /* IQKeyboardManagerSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 852A16226F156C32AEDD3A6649B83421 /* IQKeyboardManagerSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 92A43BFC165F5595D1CF24AD2C65D6C0 /* ImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 914D1DC48410EEA11DC4146D823176F8 /* ImageDataProvider.swift */; }; + 92D50FCEBF77BFACA64AB481BF6EB687 /* CallbackQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C45BD99F26D6E924687C0DEF6BD9871 /* CallbackQueue.swift */; }; + 92F619B07D3D91F74CDA3CA4B000807C /* MqttDecodeConnAck.swift in Sources */ = {isa = PBXBuildFile; fileRef = A85C1FB7E970597CDEA090223148461D /* MqttDecodeConnAck.swift */; }; + 9321C9FC6EF91BA1E6DF974D0D8838CA /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FAC0E0BC6370F8AC09DFB8E21DCDFCC /* Completable+AndThen.swift */; }; + 932BC8C27900D27C048A5635E7231CA3 /* idec_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CD359CC21DFC73BA0F1DDCAF0486162 /* idec_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 9358FC6C6DA728AEE250D8E7DD236946 /* MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 57DACE5762DB2310A02D85503ED9DED1 /* MJProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 936503E8CE03C1985CC7F73B2FCD5D25 /* EmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9E2E94F5A368A73CC30515962A10A16 /* EmptyView.swift */; }; + 937E4C92B122C2049A0CAE2D16116B05 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 93AF8427CD5DBBE14C33946AB538F904 /* Single.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094C068E414026C8CB65CAC50AAE5C84 /* Single.swift */; }; + 93C3B1F0BE88C1985707ECEAE55E15A3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + 93C6077AEFD0E46EBC9140156C32A15C /* PhotoEditorFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D07C690BC24C555DF4B8EFE24DBD23 /* PhotoEditorFilter.swift */; }; + 93DD3438FA31B90F60BCC482878F1968 /* YBIBVideoView.h in Headers */ = {isa = PBXBuildFile; fileRef = 522607A5314BF8105FC7AA0003C2790A /* YBIBVideoView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 940622D3F968C7D89CD39D1E8AE97373 /* analysis_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = F671C802188EF41EED437EF1BD461D86 /* analysis_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 94193840525CD2BF5B5FE96B133D211A /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE64907BB7CB5497C4B31C6437EA2231 /* InfiniteSequence.swift */; }; + 942CE6472FD49042B9F22A946D86FF26 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3043900069A7BFFDBEFA4E3F38FBBC2 /* Errors.swift */; }; + 94440F5D1A5B7F87009DD3EA604AD46B /* AlbumTitleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C21C4FBD6D82FAF123B6FD4221EEC000 /* AlbumTitleView.swift */; }; + 94A1B8EAF5E302028F0E33406D1C2D2B /* SDWebImageDownloaderOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = CC704F85E6DECFEFBA3A0F282033AE27 /* SDWebImageDownloaderOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94CE2F8D9A996E797BBF4D37580CDA63 /* YBImageBrowser.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E558D8C6D3AFA14C61F24DA97C33E8F /* YBImageBrowser.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 94FF83A49128359842CBC062AE979EA7 /* ShapeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2D768229B35C3FE454C2B95DEEC7BE /* ShapeAnimation.swift */; }; + 9534119EDE1FB3F9DECE76D8130D6397 /* Storage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FC8E717DED2B35BD1F66E0A8B62D552 /* Storage.swift */; }; + 953FF696DD3B62FB3B39114A6A8FA0CA /* PhotoTools+File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0942915E855CACF30C7A5843464A23D4 /* PhotoTools+File.swift */; }; + 9540707F7AAB70EDE0369AE6E75A9CAD /* Infallible+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80F95906923E1515A2AD4F0F6690D8F6 /* Infallible+Driver.swift */; }; + 9542BC97F490CB6D4671C68776DC2B9A /* FrameConnAck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3353B782D463177D03DE0F388380825C /* FrameConnAck.swift */; }; + 955B87902E039163281C4F47C95DB851 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = A229AE0D21491B82D7E0DAE152DE073D /* MJRefreshBackNormalFooter.m */; }; + 957C254909D1EAC5C8A62D6AA468F6BA /* RxSwift-RxSwift_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = 420D86B6DE49D1E1898C3A498E4F4195 /* RxSwift-RxSwift_Privacy */; }; + 95B8F2F4A82C78DFF16B127288DF8612 /* DDTTYLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 27F320304CFB5F16992D6434DE4E65B7 /* DDTTYLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 95C73DF77BBC82BA09363C45E7B6021E /* YBIBSheetView.m in Sources */ = {isa = PBXBuildFile; fileRef = B85121EB950716DA0F583D20DABC268A /* YBIBSheetView.m */; }; + 9612707F9DE302BF40FCBE970A9F859D /* YBIBContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 50B2799B201F8DE8120BD7D5DF850756 /* YBIBContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9619919FD41DFBDB5760E158BAB8F295 /* RxMutableBox.swift in Sources */ = {isa = PBXBuildFile; fileRef = D4B1C2103D7684DB18D233B798D4561F /* RxMutableBox.swift */; }; + 9644417C8C310B2FC3EBDB998596F3C8 /* SDImageAssetManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E734FF2DDA8DAB55B08800FDD08E017 /* SDImageAssetManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; + 967D69215A506E8003D53AB825DBF8B1 /* IQKeyboardToolbarConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C8FAD9863B07762E14BEC17A1AD179E /* IQKeyboardToolbarConfiguration.swift */; }; + 96AF24FDB989490637082038CF8EB93C /* Navigator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1249BF2812DDEF7380FB54875C83716 /* Navigator.swift */; }; + 9703F00AD9B433ECD5A6290032A2C05E /* SDWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 687C03C1A0D5934231452CF86A151B5E /* SDWeakProxy.m */; }; + 9720D8169C83739350D3580924FFCB3D /* IQKeyboardToolbarPlaceholderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFD05E64CF85F8CA7E5A6576121884A0 /* IQKeyboardToolbarPlaceholderConfiguration.swift */; }; + 97213AF9E83AFDA9B63697F584DFC456 /* ControlEvent+Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E1B0A6502E32D023ACE68E9AAF41799 /* ControlEvent+Signal.swift */; }; + 9735FA2F9E5D53A10450D1BAEFA7612F /* IQBarButtonItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E36023FA5050A88E423759EE0EFCD497 /* IQBarButtonItem.swift */; }; + 9765D023EA9673C300F3621E73902B80 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + 976F2DEC006F1C7F8AEB874CE0018985 /* DefaultsAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED9291ABC29121BC7F4C0411D3DFCBDF /* DefaultsAdapter.swift */; }; + 979EE714FBC877B08294DDDAC01C1BDE /* vp8li_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = B652E29752B7E03ECA2EB9B62D3DB63A /* vp8li_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 97D740C37BC4DFC9691E9C6EF64B89A1 /* Infallible+CombineLatest+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5A050AD03631811ECB18C196A9D21CC /* Infallible+CombineLatest+arity.swift */; }; + 9812D1624B70319D03262967BA53F1D5 /* AlbumTitleViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD68B1602B9133E2816F156CB92881EF /* AlbumTitleViewConfiguration.swift */; }; + 9847DF292DB8ED979719B25E15224044 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + 9869E7C419F4AA14557C287A77E6E7F8 /* String+Parser.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A7A20E96488707B469EF7CBE0AEF37 /* String+Parser.swift */; }; + 9878BBBB5F72D65F065E1B2D097BBCA0 /* AlbumTitleArrowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E80DB3359336F605C30FE7B728A01618 /* AlbumTitleArrowView.swift */; }; + 98D2C5A94857D45C5E6476DF11659DD3 /* SGQRCode.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 40A7089ADE900B568CDC7B11FC4C263B /* SGQRCode.bundle */; }; + 98D4097922F78A49E02441100FF15AC3 /* PreCompositionLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCEA9AD6C802E052AB4F36F955C37E9 /* PreCompositionLayer.swift */; }; + 98E85707455AF1E27F8FBDA8CFB3B53D /* CustomLanguage.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA4B9E352F29C90F44D0244433AF8504 /* CustomLanguage.swift */; }; + 98EFA246A2A845E74DEFF098CE60356C /* SDCycleScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B4B42635EF69EE9862334DD24CC3566 /* SDCycleScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 98F2777C7B7BA024CF0DEA263EBEE2FD /* _RXKVOObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 144656E3F5F7AE2576B871406A869F02 /* _RXKVOObserver.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 990A4E31ADF23A8BC1C5044ABD45B979 /* ImageContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58257C6D930B04CA0CE4B0BC5E9FBA44 /* ImageContext.swift */; }; + 996ACA07E398381E297FE2D20EBAEAE4 /* DisposeBag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 569BA4EC75A7753E8E96D8A92267A5D3 /* DisposeBag.swift */; }; + 9981C32E56FF09688D9FBCBF45FB93B2 /* NSButton+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96139C1CDAA829E1C5C99CC966F3CB0 /* NSButton+Kingfisher.swift */; }; + 99AB67489232A0D64E91577E068EBDDE /* RxCollectionViewDataSourcePrefetchingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7E3FC6BDBCDDF8FE344D514AFA47BC /* RxCollectionViewDataSourcePrefetchingProxy.swift */; }; + 99D2D2129D75D3C07E0123C98C2A14FA /* TransformAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99865637FCFF7B1AA28FC0923C3042EE /* TransformAnimations.swift */; }; + 99F98734F451C3423D3CFE18BA45F389 /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = D5252618732B4F33066C92F6903EA17B /* UIImage+Metadata.m */; }; + 9A079D75446EE8455C3496BCCB758DBC /* SDImageLoadersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 03FE134A3FD2889614B4CC40FFEF3581 /* SDImageLoadersManager.m */; }; + 9A4ED09FF5F6C42B302E97D7BFFB5541 /* InvocableScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF0216C421365AD84F77ED22BEA23707 /* InvocableScheduledItem.swift */; }; + 9A57392E0BC5A5E6A886134E855A9381 /* RootAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC245604F36AD9FEC3CD87AA04F7C2F /* RootAnimationLayer.swift */; }; + 9A64AA527A1156361FEFF89E58AA8A43 /* FramePingReq.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D9D5041CB0B73D214303A39FE8ADAB /* FramePingReq.swift */; }; + 9A7E5CE23211E85C6232833EB3741A71 /* PhotoPickerSelectableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F976405F401C7E3AC0CEE5C7C2595458 /* PhotoPickerSelectableViewCell.swift */; }; + 9A7FB1E975A5955C896E6B195C521804 /* MJRefreshBackNormalFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = BB037BF10F9C4170C64093D37538877C /* MJRefreshBackNormalFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9AA1F63D85A53624D985D05569E80864 /* ToArray.swift in Sources */ = {isa = PBXBuildFile; fileRef = F723E0730199FB22CB10297CB86034E7 /* ToArray.swift */; }; + 9ACCB282299CCC09F7018E6CA760C1D1 /* NSObject+Rx+KVORepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DCED5C705FE63535A256328BB0E994A /* NSObject+Rx+KVORepresentable.swift */; }; + 9AD9BA7A311DF770828C4B304E63A9A1 /* OIMQuoteElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 06F77A9C4687FD3D84DFF005E7862759 /* OIMQuoteElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9B10D0EE1A1B362C382D7C32790D5F2C /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A2965AF467F1BD2E4E571F66AA1F8EA /* AsyncLock.swift */; }; + 9B5FB4D7BDEE150249FC25BAD02E4673 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 14F04172F80298AFE5BE335BF76D4501 /* UIImage+ForceDecode.m */; }; + 9BA717307CD936629FAE4A1515CCF862 /* SDFileAttributeHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 42A180547A0748580216D31947FCF91D /* SDFileAttributeHelper.m */; }; + 9BF10B033DE930DCB412101F17A2F9F3 /* Locales.swift in Sources */ = {isa = PBXBuildFile; fileRef = A989C2079B8C5E48A3BFE36041C1D718 /* Locales.swift */; }; + 9C5AD0CCE68EEAE2096052C189F3A948 /* YBIBImageData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6BD92912FCEB695DC98E049E3F1E663E /* YBIBImageData.m */; }; + 9C80A0175BF8E8B561F88F78FD8027C1 /* SDImageIOAnimatedCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F121A1AF57280A390FE624572D35BAA /* SDImageIOAnimatedCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9C89110A7C655E5C39B3135E9020CBF7 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F79F59C81E9BD55D2300957A95BFEE2 /* Alamofire.swift */; }; + 9CE2B0DEBE0178D7BCA89AD9A7F0BFDF /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57CD8A4DBF03A8134B3DF489CCC344E3 /* MultipartFormData.swift */; }; + 9D0684B3B738D7D21EAA1387D127C782 /* SDWebImageCompat.h in Headers */ = {isa = PBXBuildFile; fileRef = 188EA8631594375F44FE972823A25FAC /* SDWebImageCompat.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D22F88B7F1AF054C2BF025DFB767154 /* IQKeyboardManager+ToolbarManagerDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE969BF87DF6A4473ACCB1E8565BDF0 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */; }; + 9D3503AD6B9B4367B93A5B548AA24040 /* OIMManager+Connection.m in Sources */ = {isa = PBXBuildFile; fileRef = 25B0AFDE6F490BD489C84DE9AB7B623F /* OIMManager+Connection.m */; }; + 9D3C14C890F752864533DD41540D7678 /* Commons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EF8EEB5237176128E14B293533A72C8 /* Commons.swift */; }; + 9D46306826317C2783B0A8255691E035 /* StringEncoding+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5FE6488A1A339DC17ED5A3C860C6FE3 /* StringEncoding+Alamofire.swift */; }; + 9D7EBD01D0A527C34FD31EE1DBDCD650 /* DelegateProxyType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D3BAA59A5DF299D939954B1D0B6BAB74 /* DelegateProxyType.swift */; }; + 9D8BF11B27F90EE2FEC8E030D8D324C7 /* OIMConversationInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 380D33A71478D6A19360DAADF01641A2 /* OIMConversationInfo.m */; }; + 9D93C80F910C873F803391661A10336F /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0A90D1C88AE636E67296B135530FC21 /* Combine.framework */; }; + 9D99119517C283B342844D8DA80A1F26 /* OIMDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CB958102E3830756508C5AE67B201BE /* OIMDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9D9E2C0A96E8F024ABEA21B652809FC1 /* VectorsExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 837CE453DD68FD5980A53849C6B2FDE2 /* VectorsExtensions.swift */; }; + 9DDE9A4DCA7722B701E4BC61B2CD9D6E /* KeychainItemAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78F45D1A1EB720928FAD6EFDCCBE1536 /* KeychainItemAccessibility.swift */; }; 9E0045B41BFE697DB4ADE151228024D2 /* SnapKit-SnapKit_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */; }; - 9E0BFD43354B5C39E229B566380FBC7F /* SharedSequence+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AD087C00AE0A2CB66E870C10681C588 /* SharedSequence+Operators.swift */; }; - 9E1B9E12EB2FA47D31C61522122C6CF5 /* OIMManager+Friend.m in Sources */ = {isa = PBXBuildFile; fileRef = 30BCDBE3285AAC94EE2E1B2D935E8DCD /* OIMManager+Friend.m */; }; - 9E3A87603BC1BD80CDECEB3B52D3C592 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - 9E43D3C06CF64AEB62E7122847C15FAD /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D9CC311816278CAC539F9972CCF9467 /* SwiftSupport.swift */; }; - 9E46EF300E2FAE9C075C03534DECBCA5 /* YBIBVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F32E9C5ED25E45138C2B009244D8436 /* YBIBVideoView.m */; }; - 9E4FDDFBA5C3856E7C540B560910C2C0 /* CPListItem+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 054BFF3B2D649118B2DCBE549463B70B /* CPListItem+Kingfisher.swift */; }; - 9E8ABB2490C30D6462B91C63A60D4A03 /* OIMGroupInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 49B2C730E8574BF4D63DAF8204DC6409 /* OIMGroupInfo.m */; }; - 9ED92DDFDED091E3FB77221273D5F4E3 /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = E50D3CE2D0594CBF14EB8467CCA02548 /* AtomicInt.swift */; }; - 9F8FD4529C610082745C8C7B1F1961F4 /* SDDisplayLink.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D8BD69420673B5C0598B75F654685F3 /* SDDisplayLink.m */; }; - 9FBC6A5DB0E8F77EC6EC2D6B98C81BD2 /* SDWebImage-SDWebImage in Resources */ = {isa = PBXBuildFile; fileRef = CF1281E58AA1045D4B7F33FC56691C42 /* SDWebImage-SDWebImage */; }; - A002E77E30E8C6C20406535665186E0B /* unwrap+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3363755C6A144FD04CC1F79B7234245C /* unwrap+SharedSequence.swift */; }; - A029B635564A3A7C8174D69E444241AB /* Editor+UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB48C25BA36E7A3A90DF6A7ACCF696A7 /* Editor+UIImage.swift */; }; - A078A275FFFA48D620074790DA3CA6CE /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = E1470F23022327507435AC5D5E2E0048 /* MJRefreshStateHeader.m */; }; - A0B03E2E8B1952B3B64E2B26970089BD /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CC6895CB40EF7ADB0A3C945CEDFF07F /* SDWebImageDefine.m */; }; - A0B9F8C32DCAE928C8485766B4CAB172 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = E906AAEBF4DCC02DEAD03D193A8E8CC1 /* PrivacyInfo.xcprivacy */; }; - A0E4A9C2BF836AFF9EFD0FE0751287F9 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8D7DF632932C141A3A0BC1099B53183 /* Archive+Writing.swift */; }; - A0ECDE88D35F5D0348C2A533B07EBFA3 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - A11B53CD11370C968EC79A951D865E4C /* DDFileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 52E0374CED5B77EA1A9488888C3A901E /* DDFileLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A12FDB12DF3F9EB993A5CA6FA07754F7 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C2FF52A2AD4EFB49CA6B7904FDF26EA /* MBProgressHUD.m */; }; - A13546213743CF2610800864045B5D7D /* ContentConfigurableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E82B6099394C2F5A543E192B85CC8691 /* ContentConfigurableView.swift */; }; - A146D36DC8070733A58AD8D12D4E8E4B /* AnimationFontProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB9746CC3590A586C2503988C11BFE17 /* AnimationFontProvider.swift */; }; - A14CB138559202BF9783493A3B0A49F3 /* YBImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C871A85DF5F63890D0CDE0EB704B3560 /* YBImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1B70BEB9DCBE081F5B39F596F2596C5 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF7131C55E627FF8ABFED611ABA66AC /* RedirectHandler.swift */; }; - A1DC9EFDF50DF0EAF24D9D7C219AD2C1 /* NSObject+MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EECED2B41B3AE95453700ECC56AA3BB /* NSObject+MJProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1E29CD112385C90E29DDEC573E9CF44 /* UIView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 16193DA5A0D7C1CE6F0645E191E3B728 /* UIView+WebCache.m */; }; - A1E44277704AD68E867FD7C955A6632D /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D15A1A1C3D45C5DBC427A6AA27A1645 /* MJRefreshBackGifFooter.m */; }; - A203342FF8908BCE627B0AD03D4C6516 /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB070EEA28E7CED98A5D3FBC546B2023 /* Combine.framework */; }; - A20DBEF15B6A962DF4C548A26F00C8C0 /* TrimPathNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6278C6F6E095466FC0747AED3A82DBAC /* TrimPathNode.swift */; }; - A20FD3BD7888CA75CCBE32C513D7E076 /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C431CF55C1DEA301F7009AC22BAF420 /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A2144AB5DA94A4BDA2253B25CC069E3C /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DFC47471DC57CA8A3990D13F5421EC2 /* SDAssociatedObject.m */; }; - A21E48381D84E5A83C5139952CA955EF /* LocalAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30CA8E9E2F081102A0E466E3DBCA97C /* LocalAsset.swift */; }; - A24744A0D592244A51AE4FD145482C24 /* UIView+IQKeyboardExtensionObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 886EDE3EF4D2E04DC332BE8E363F892F /* UIView+IQKeyboardExtensionObjc.swift */; }; - A2BBF60D463B5DA1E57EB843B63DED87 /* SDImageGraphics.h in Headers */ = {isa = PBXBuildFile; fileRef = 65116B7F8B410E440874CCFA63662B20 /* SDImageGraphics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A2D48CC012DADC29CC924512A5F4513B /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F22AAF79A7B61FB53A870AA54CECA0A5 /* CFNetwork.framework */; }; - A39FE5F72261B202CC63722A7B357206 /* IQTextInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A22DC8E59A81000BBA63235416889042 /* IQTextInputView.swift */; }; - A3B37F7F50CB1D300D0B4F6210406988 /* HistoricalScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A28EAFBBFB2489AD46E0091B00B767E /* HistoricalScheduler.swift */; }; - A3EA39A13714B3103B82F4066A642F53 /* MJExtensionConst.h in Headers */ = {isa = PBXBuildFile; fileRef = C2EBF1ACC8534A22F5BE37FAAD051863 /* MJExtensionConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3EA40405F301013677F25D98B02737A /* RequestTypeWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE2AE28AB42D6BB69AEC9E7501336749 /* RequestTypeWrapper.swift */; }; - A40C5F28F224D47644D6642B2515A011 /* cost.c in Sources */ = {isa = PBXBuildFile; fileRef = 8587D011AA0593CFF7A1B84EEE2FB3F1 /* cost.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - A44ED4475C4343EE970814D8508A6490 /* Reactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A094F4CEA1C525291A1DA9D1530B5BD /* Reactive.swift */; }; - A4869D054B2AA3CF5F87BEBD031CDCBA /* StyledView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62AA6CBDC90F15752FBBFAD594E0DB65 /* StyledView.swift */; }; - A4D7ED63C57E58316780D9AC735C680F /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B403F5A8513C8A0A4EEC0650F17063FB /* SchedulerType.swift */; }; - A4D9CEEE49AA3EF5064EB426E05BF774 /* common_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AABA4A903D3B1748D2F7ABD73C518B1 /* common_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A4F402526B013CC1222E2324F7AB2DFB /* StartWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1D4C539840D1E04C5FFAAA34A578BC /* StartWith.swift */; }; - A51815518AFD2325631A5EF870F23BD3 /* and.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF6DF531579CE69496EA3326B6B5AB0C /* and.swift */; }; - A55FA53F690C15B96D16270FA0DDCA61 /* OIMGroupMemberInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 3031EF8A675A49AB3D585F9F2A638A62 /* OIMGroupMemberInfo.m */; }; - A57326C8E77245DB6680543B3426F381 /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 28028200CF5288C6709AF472B07A3E73 /* SwiftyJSON-dummy.m */; }; - A57C8E88F850C24574FF47756536392B /* LanguageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C30ECEB47A30F096C7A11DAFC977D503 /* LanguageType.swift */; }; - A57E2091853F8D22158738D995DE6946 /* SDImageFramePool.m in Sources */ = {isa = PBXBuildFile; fileRef = 386033983F3A03681989750FE5B69703 /* SDImageFramePool.m */; }; - A58136C9566B2242204F3F8EA3CD8D48 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D3DCF34621F9247483D8AC14424E3D9 /* UIView+WebCacheOperation.m */; }; - A58EE42EE3645E9A635B070F02E9825A /* SwiftDate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 10714B805F30205FBFC798B49F7ED8AA /* SwiftDate-dummy.m */; }; - A59F8F6BF639189A54750A0FCA385CBF /* TimePeriodGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCE90CA40DDCE3B2A7557F7300F48BDA /* TimePeriodGroup.swift */; }; - A5EF8F09A21D6A69E2DB05787B061D84 /* DefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71FD6427BA94D4884EC2B62E60E9E7A3 /* DefaultsKeys.swift */; }; - A5FD5A91303A2FB61CC314DEBF3CB08A /* Observable+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC93400A9949AF32E23616180B0B6CDD /* Observable+Bind.swift */; }; - A610226159AA69D1BEF935D66747ADFC /* ShapeLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4E269F1764BE1BC501E09F81012012C /* ShapeLayer.swift */; }; - A6226F26A69916F590663BAB95720286 /* Zones.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE27247B0F48B326AF1DDFF5E52E4127 /* Zones.swift */; }; - A6415BE5D50BA69358B8C31085045BD2 /* PhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53EE3FDC6BBE60EB6D5FD6C0201E710A /* PhotoManager.swift */; }; - A66EA62E1052F6AE1A384EE8932EDD85 /* LottieAnimationViewInitializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC27B316D383024F0A59D8133F0685B /* LottieAnimationViewInitializers.swift */; }; - A698A792F293BA997FE75C70CD18B022 /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B56B9C4446B4864B2E6EC9FA7AB1F4C /* OperationQueue+Alamofire.swift */; }; - A6D6518D73C66770F338CEFFCFEE9737 /* PhotoPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25DE73A1EA9F7ECF0E1D5E9F2897CA07 /* PhotoPreviewViewController.swift */; }; - A6F1EFC3CDA009A4BE6CCBB01248DA21 /* UICollectionView+IndexPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB3AF5015C0B68FB788983C3D31F518B /* UICollectionView+IndexPaths.swift */; }; - A723E474922D959654804A7822B2C9FE /* AnimatableSectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B47B0F33ADB52865D45F738C9337602 /* AnimatableSectionModel.swift */; }; - A74FD9C3A0D40BB2919EEF5E39879531 /* InterpolatableExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB34224D13F0A6C900F251943BDB8520 /* InterpolatableExtensions.swift */; }; - A75A9CEA5A4788D0651D7EF895679CFD /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD10C64367048249EB3CCA3A4728FF2 /* RetryWhen.swift */; }; - A776BB860CFEC83AFD8814D717A1F616 /* bufferWithTrigger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 326281CC28396A68E89160486CB6C8EF /* bufferWithTrigger.swift */; }; - A7E562FC9C10C5003534E91160C69330 /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F579D560A7BAEC27AA799B2A5CD1BBD3 /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7F8F8A2D8CDBC03F051E68E7F80926D /* RoundedCornersNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 146CAAD47B8060678F231FC28E0A3B60 /* RoundedCornersNode.swift */; }; - A7FF322DF74002F7C9F855A5F95B166A /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 037D39577B12B91D443CB163F5B8C2BA /* ImageFormat.swift */; }; - A81A06306F6CB52B6454B87AD1389688 /* random_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = B4181173D600C81E639DF5A03E52AEA2 /* random_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - A8437EFD962B3A3F812B756C76ADD87B /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9C59615FF8BA2E341509BA2898E468F /* HTTPMethod.swift */; }; - A84A1EFADBF970F63D187ECEC5A10811 /* DDLogFlag+DDLogLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D6A5FE25A3244C84E4059F96B41735 /* DDLogFlag+DDLogLevel.swift */; }; - A8609464778FBADF9D5C6800FB02AAA2 /* GradientFillRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 716D4AEC881C597AE0F28479D16E71AE /* GradientFillRenderer.swift */; }; - A86CC1AFDFDD692DC4EE66F57C0F39E6 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 62991FC09198149F6AADD3A172559A80 /* UIScrollView+MJRefresh.m */; }; - A88BBC15BE4C225B31AEE17F4D953A2F /* rescaler_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = A9EAC8FC1287A9C24DA5BC7D31F39F91 /* rescaler_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - A8A6C9D9D8B65ECD3056C232B62D70D0 /* SDWebImageError.m in Sources */ = {isa = PBXBuildFile; fileRef = B838E8CD32B3E7AF843A57E9E5C5B435 /* SDWebImageError.m */; }; - A8E186B1FE4B17DA0502C02E03CA8A07 /* YBIBVideoData.h in Headers */ = {isa = PBXBuildFile; fileRef = F06C8ABB058B9D2FEF1726930EB05BCE /* YBIBVideoData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A9148F1A43900CC2F92709355079A30F /* Driver+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74E963FDBB2A72AA3EB7D60BB0724666 /* Driver+Subscription.swift */; }; - A93F0AB3530D12C4DA9F4C4389C7F2B1 /* UIImage+GIF.h in Headers */ = {isa = PBXBuildFile; fileRef = EE69701659551D2EA95E581E43FAAE49 /* UIImage+GIF.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A96564D57DFFDCEB8237AC0009F19E91 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBBFEC0A19957F2E4DC6F87C398A3318 /* Task.swift */; }; - A97478529331285D5FE36B7A4FEF9FDC /* DefaultsSerializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41ABD5255F5B3887A1E6C0B3CD1A9071 /* DefaultsSerializable.swift */; }; - A983CCA5F6596F030EFCC1E27C1E766E /* UITableView+IndexPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = AADD4B026F6027AF572D51A25BD61D10 /* UITableView+IndexPaths.swift */; }; - A9B0233F2C7CD6365526CA2178F9215F /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05CFBCB3BAF48A65126967EB66B83905 /* URLRequest+Alamofire.swift */; }; - A9BD8B825EC61C85BD1592271DA93A01 /* FillRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C61CA1E7129FC9BB178D8C730B3B5A79 /* FillRenderer.swift */; }; - AA01A57B3D11D35C946824DC7E089F2F /* Completable+AndThen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A59E29643218DB83EB446596CF3A4210 /* Completable+AndThen.swift */; }; - AA08300A57FC853C833BD5E8167445B9 /* SGWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 51C1A964478BEE6F4C1DE2808C0CB83F /* SGWeakProxy.m */; }; - AA1847AA96F3BD93538769D1690A750C /* Enumerated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643E20DC003F67757DE48602D2A7C2B6 /* Enumerated.swift */; }; - AA28F4A2C9F5993AD2085D8F3D0A4366 /* NSData+ImageContentType.m in Sources */ = {isa = PBXBuildFile; fileRef = 453CA5B7C2555E48218CED21C1BC8519 /* NSData+ImageContentType.m */; }; - AA4CECA3798CE0C84CB7CD5F342AC4E3 /* YBIBToolViewHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FA833C33B5AC6E4CEC49F9D1321C982 /* YBIBToolViewHandler.m */; }; - AA5921D519E9769BC090DF9BB63A40C7 /* DataSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9361EDCF72DA935BC195CF2F2E7FEEB1 /* DataSources.swift */; }; - AA5BF2DFB10400AA27950626CF7948DF /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CD15BB092F57C56BCAA6B4B7F799504 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA94FD545FBCB2D0659264C82CA6858B /* AddRef.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83EDBA00E11125390D155B70ADD10B3F /* AddRef.swift */; }; - AA9883CA105A3DBEEC0EB4A4619D158B /* YBImageBrowser-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C413DA11BA0A2F7D5DE3F394B6B61F /* YBImageBrowser-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AAB1561F8BB17934C2858A14B7A16D3C /* PhotoPickerBottomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C32C8D313CE54C938117F79FB42909 /* PhotoPickerBottomView.swift */; }; - AABEF13464BA7F4621BD94736C1D057C /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2874A5748A76E6FF8D240C980346F2D /* ConstraintMakerPrioritizable.swift */; }; - AAC982194C2E64A6EA74BE58C7BF6B45 /* ValidationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05D4D13EF29C8F7DCE86020D32C8D588 /* ValidationType.swift */; }; - AAD885901A99D6AE01C8DBDB90C5C979 /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = E32BDB5F008E014DF2899A52778B0534 /* Merge.swift */; }; - AAE2016D45F550892E95C71837487A79 /* PhotoTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE0F2F0A1C318B0FFFF4DFE36D1A69C5 /* PhotoTools.swift */; }; - AAF1D044A1BFEB95FD91F7381DD2A5BA /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = B531F280DBAEF942F4FE6A28535EBE76 /* PrivacyInfo.xcprivacy */; }; - AAF9494BBBCBF94960369A5624E1DF5D /* SDAnimatedImagePlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C4A3B8F09E406012F86745357A1CD7D /* SDAnimatedImagePlayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB132905D478C48DEBA0FCB05051BCDB /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE111CCED1194464F57087895D162857 /* Concat.swift */; }; - AB1F732806BA88499D9556A1DF9C7147 /* DisplayLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5481E8B55B3E97A187B601A410FD66DB /* DisplayLink.swift */; }; - AB292EBA731CE0800CDA7DDEDAFD0E6D /* PhotoAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 988C977871E4F16B43124775C5442980 /* PhotoAsset.swift */; }; - AB4DDF5983551D7BAD74FE07187972F6 /* Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = F553CBDEE22BDB07390A5A1890961940 /* Create.swift */; }; - ABB23E61CFECC70CBC823E10333EEEF9 /* CurveVertex.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA285ADE8A6A7FDFFE668150218D3D8C /* CurveVertex.swift */; }; - ABC0BD510E360D3E43D3AFE11F000C4F /* WillDisplayProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7D638901CE9A00B98FD0FD8D2DADCB2A /* WillDisplayProviding.swift */; }; - ABE29701808E91BD6622EBD0EEBEC762 /* materialized+elements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C69CF0F0BF608B7192C8C2D478D58D4 /* materialized+elements.swift */; }; - AC22AD1E1EF9CD9D6E242F3630A9A012 /* IQKeyboardManager+ToolbarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43FB9E973A47305B19D631375B80A59A /* IQKeyboardManager+ToolbarManager.swift */; }; - AC4CA901E2320D4D147740E29CF08F1E /* CLIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = CBCF16C1D8B08EBF7F70BEF64DE8914F /* CLIColor.m */; }; - AC710813CB6A1DAEEE45914402F864D2 /* MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = E48DCE42501B7013F70D4B72A64A9C20 /* MJProperty.m */; }; - AC7E09D6855D27DD855A81B3D8C1CDC5 /* View+ValueChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6929D9112D6D2BA2861A61C822056E89 /* View+ValueChanged.swift */; }; - AC7E21CB29757E2CFC0A30211BE31248 /* PreviewPhotoViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF59DBF677935AFE11100B7BA87711D0 /* PreviewPhotoViewCell.swift */; }; - ACD8044C76783EF19755EFC8E911FD55 /* filters_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 06C9041561AE6E617D216D91DE531015 /* filters_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - AD3490FC2929561C622B20EEE38A20B0 /* RxTableViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC839CBDE62FBDF1FB0A9B6E583E159C /* RxTableViewDelegateProxy.swift */; }; - AD50B64828C23634D364DD46F5BAE1B2 /* PathOutputNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A744FA8696B38DECAED24C7D0829A18 /* PathOutputNode.swift */; }; - AD860938D35585A99549790933C165E5 /* HasImageComponent+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B38CA1B256C4DC4578E9BED9368B736 /* HasImageComponent+Kingfisher.swift */; }; - ADD4389B968C2739C37B789AD44D3ADA /* Picker+PhotoAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42313B5EA1C08DEBCB6B59020C9314BA /* Picker+PhotoAsset.swift */; }; - ADD657BDD83FC569FE0749205901878B /* SkipWhile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C8FFE3A4542A54D17DEA4F0A0654EDE /* SkipWhile.swift */; }; - AE224EDB6D044C0FE86B086E950FC2F9 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 342385D452E45822DD7ECD2003E65B56 /* Debugging.swift */; }; - AE745A25F12D4918404C5ECCE439FC2A /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = F1230DFA99D00D6DA8C2465727F22D30 /* SDAnimatedImagePlayer.m */; }; - AE7A69CD6CA5A7CD8B2DD0524F25CE43 /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 577E69204BACD94290D8AA0F05255858 /* EnumTransform.swift */; }; - AE7B02645B8F769CA5F215EE8F7CC5B0 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 111E59CE836AAFABF981BB302BED14EC /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE883C65A28D87087F1BD17AE1E6BEAB /* PhotoListConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45D6D7BCFDFDF29A6DBD06C86894A520 /* PhotoListConfiguration.swift */; }; - AE89340D37520E24ED75F2F2201263A4 /* Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F6D81725FC20BBBDBDAE2433DCC141F /* Infallible.swift */; }; - AE9E12B9AE82D5E8964A3BF8D2E83F08 /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE530A41C456C8942C48BEE1BC4ACB0A /* DataTransform.swift */; }; - AF1D366BDF7AA8C015A0283550C197AB /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4667C302EAFF74DF30B4071AAC48CA /* ImageDownloader.swift */; }; - AF28EF187B5278B9BBDBA36DE7452166 /* OIMSearchParam.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A43B984C0AF852A6F8AB9E25671AE5 /* OIMSearchParam.m */; }; - AF34FDA62958AD154C005C924C808165 /* Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D68BEDC9751B141065CF1027FED503E6 /* Delegate.swift */; }; - AF6EB132E2FE73EF2933818F91A86240 /* Ellipse.swift in Sources */ = {isa = PBXBuildFile; fileRef = F531DEF9CEEFBD2F35BEBFBF41D073F4 /* Ellipse.swift */; }; - AF760C78F1C7E11BF7CB9E9B29903530 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDD4F7BA6A5912E04B2CD34EE7001335 /* ConstraintInsets.swift */; }; - AF872DC1B0FCA5AF714EEEB0FE1CB581 /* VideoEditorConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF7AD9CDBAEA6134EE92F10730C7351A /* VideoEditorConfiguration.swift */; }; - AF8B4F3C9A868E54151E882AFF5972A3 /* CocoaLumberjack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DBD93D288BF1971680AC0CBFA87CEC7 /* CocoaLumberjack.swift */; }; - AFAC54AB9B003E85E8D1D3E076D2ACDD /* OIMNotificationElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DB99949480CB8A0B0DF10697A19BAF6 /* OIMNotificationElem.m */; }; - AFBECCF0A08CAD1096EE187621760B19 /* LayerEffectNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94D516F270368ACF9D94D50BA45877D7 /* LayerEffectNode.swift */; }; - AFE232EEDAC5B035CDB331A5CEA18E32 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDC964E4BDB8D2FC07223D96BD59013 /* Placeholder.swift */; }; - AFF9C62E7AE15ECE0FBA058A48C2C662 /* TagListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D51AEB7941D5096807E59C7B4F7596A /* TagListView.swift */; }; - B008CBC52C3135A6FCF0532177D46D43 /* UIButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = EA7F7E45797654B45F07848151665690 /* UIButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B008E06B51A57F11E9A195A14B80F6C2 /* webpi_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F817082B9C5EE4458A59A5A7804DEFC /* webpi_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B01BF1940094224E6A48D83E53BA6AC8 /* ImageBinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 773911D3EAAE3F33A663F7CC1EC09005 /* ImageBinder.swift */; }; - B03642C4490E4F61792A6BC3CDFF4C9D /* EpoxyLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86450CB64F3B277D05E16E3FCFBDDDC6 /* EpoxyLogger.swift */; }; - B03F71551FE251F44BDC790C91C850A0 /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9604381FEF2D16AD7ED3B5538527210 /* Deprecated.swift */; }; - B04007D5AC6F72BD74FDAA49029B5F6A /* mergeWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03AF9077A88CE3FDD85D74403482C1A5 /* mergeWith.swift */; }; - B048B31836F1E5A82AE520ADD74580AB /* RecursiveScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F91D8352B875D35E55568B695E6F368 /* RecursiveScheduler.swift */; }; - B0875E3AB8718E7DFE5C53497C02A15E /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DAD49D64090D08FBC52E7C52FFBFF8A /* ConstraintLayoutSupport.swift */; }; - B09A70A587400F738C138BB0487F08E0 /* OIMCallbacker.h in Headers */ = {isa = PBXBuildFile; fileRef = 722CBBE05AA45B4D4BCC2A8D48EC1CFB /* OIMCallbacker.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B09F08548ACA8379445F6525011EE219 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = FD486E62809B39EA2FAE17E7977B3C8B /* MJRefreshBackStateFooter.m */; }; - B0B6845271D9CB2ECE54665E4942D32C /* ISOParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC974D5440D46C2475A13210B5072DF5 /* ISOParser.swift */; }; - B0ED3A9AFF050F528F62FA62A2ED867E /* OIMSoundElem.m in Sources */ = {isa = PBXBuildFile; fileRef = F0C281DB20437F52417B71177BFAEE60 /* OIMSoundElem.m */; }; - B126EF2264809CA8F7A70EB1F227030B /* ExtensionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19008898D15EB1FBBCD1A15590CF8625 /* ExtensionHelpers.swift */; }; - B14EBD76B590189B2C83A6EF963D822A /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 06C6D818FF85158065EEB29C708DF89F /* SDImageCachesManagerOperation.m */; }; - B186A7028D06E8C1196CE78DC5CCBA97 /* OIMAtElem.m in Sources */ = {isa = PBXBuildFile; fileRef = E2664E5BCD9D8BA910C7D09EA6C2AFBA /* OIMAtElem.m */; }; - B1BD3BEC4738D96D11B1DBA31F71504F /* EditorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E5A66AF3F7558F7194F9003783F97B0 /* EditorType.swift */; }; - B1D23A68F13080F6DA6EC33CFB04B877 /* retryWithBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = 414EA10691F9648F2A822D776442BEE8 /* retryWithBehavior.swift */; }; - B1F7B96741F92ADC2F98417FFC33DB96 /* PHLivePhotoView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBBF1F672E38253186ECF2C0972D5FC1 /* PHLivePhotoView+Kingfisher.swift */; }; - B1FD607CDF2E95D05BA3B880BB410E7B /* SDFileAttributeHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 9421E603875C52CCF37AA01A75D831F8 /* SDFileAttributeHelper.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B20CF9BA80C38488F04F90EC817A3B23 /* OIMGCDMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = DD55E3EE49E45A74B40D393DA730FB1F /* OIMGCDMulticastDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B229312BD26C96CA7BBDD079EA82CA7B /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 52826A20DDBD116B62604609F4896887 /* cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B23B20F1C3E3BA41870F9137074F1AEE /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DF522262FD43A31939B404FAB1CDBF3 /* MultipartUpload.swift */; }; - B25C3DEE88FEC6E44A1FEF8F655130A4 /* First.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1DB25C161114385C7539D92C70848E7 /* First.swift */; }; - B26E12AF738E9902EC107EF28E667940 /* IQKeyboardToolbarConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D587347C55CFBF02E2405496E4C19F1 /* IQKeyboardToolbarConstants.swift */; }; - B27EB3E83EEF095CC2ADD635BFED1F2C /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 355C2A9EBE4A9B292FB4090BC017E1E8 /* UIImage+GIF.m */; }; - B29AC86CA5B5F21AB3E41AA9B62E712D /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01D238240F648EA7EA5C6EBADC6F1FC9 /* ObserverBase.swift */; }; - B30507428462F086F3129F625DF33A42 /* DelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = D16E2301CBCEED8AA04536AFC22CE901 /* DelegateProxy.swift */; }; - B3055D5399B97852355F98821ADDBC5E /* rescaler.c in Sources */ = {isa = PBXBuildFile; fileRef = 8C0A1312B50C17A4C611BA04975FA59D /* rescaler.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - B317F935509A2A6E0FA87FA52C95E88F /* Date+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC143A0F924BCC3BADED1EC0C737709E /* Date+Components.swift */; }; - B32135C2E38D3F46CAB71F02B695E1A9 /* bit_writer_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = DDDC822826BE0110F15C916A638B4E1E /* bit_writer_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B32473D5AC71620CB7266728ECDB133D /* IntegerOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD14CB3A9622BD754B4DDE7ACDA1BA7A /* IntegerOperators.swift */; }; - B325D41B7CB98EDA508C0F99AF0531E9 /* SDWebImageTransition.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C50D5AF6E97AE83A91CBEDB011B783C /* SDWebImageTransition.m */; }; - B327822BEE47C530A9E220A4164CE0EF /* DDLegacyMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = E0DFBFFC4098538E3CF30773ABBD972C /* DDLegacyMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B32BC6D67438172D5B58955EAB85D802 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - B3A873963105EEB40F98BD3F9F18FAC8 /* dec_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 00E1EE863C3A3C3630E7BBB6E807087B /* dec_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - B3AF4BD0E1246FDD4F23204C1EAAFE18 /* SDWebImageDownloaderDecryptor.h in Headers */ = {isa = PBXBuildFile; fileRef = A677DBA18E68A3B1473D33FD77407ADD /* SDWebImageDownloaderDecryptor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3B7D430ECBFB270DB1E8D1F17ABE8D2 /* SDWebImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 847FB0FA98CE4AC2E60D73CCAC2CF1AF /* SDWebImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9E0BFD43354B5C39E229B566380FBC7F /* SharedSequence+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56A5A309D34A2E484F6D17F00DAA899C /* SharedSequence+Operators.swift */; }; + 9E1B9E12EB2FA47D31C61522122C6CF5 /* OIMManager+Friend.m in Sources */ = {isa = PBXBuildFile; fileRef = 33A714CAD18FD98B82C934FCD845F5A4 /* OIMManager+Friend.m */; }; + 9E436802F5A5E80EEABE067709B78441 /* rescaler.c in Sources */ = {isa = PBXBuildFile; fileRef = 6427F96BC62F8B8E39CE8CBF47E01176 /* rescaler.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + 9E46EF300E2FAE9C075C03534DECBCA5 /* YBIBVideoView.m in Sources */ = {isa = PBXBuildFile; fileRef = CFABCB79861B27F18DA91612184F6887 /* YBIBVideoView.m */; }; + 9E4FDDFBA5C3856E7C540B560910C2C0 /* CPListItem+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EE8AEF48758E3AF539B73FD6DD3891E /* CPListItem+Kingfisher.swift */; }; + 9E8ABB2490C30D6462B91C63A60D4A03 /* OIMGroupInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DB1752A2DA09B80102258B1B4F99B43D /* OIMGroupInfo.m */; }; + 9EE5156B6860FA93358E2C0CD9990E43 /* InvocableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF535FBA7A17C38D87E054E77B938BC /* InvocableType.swift */; }; + 9FCBEBABD3BEC78A8C6C2016750AF263 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BA3D3A4D6E0BDD3AE5425664D8746EE /* UIButton+WebCache.m */; }; + 9FDC5D39EE8B3B84BDE0191BDE69A4AB /* SDImageCacheConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 72DF4AA01E687D7B5FA55FD57819D458 /* SDImageCacheConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A002E77E30E8C6C20406535665186E0B /* unwrap+SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66A31893F6C7863209C97E72EC09DF9 /* unwrap+SharedSequence.swift */; }; + A013D216E8894F541CF684EF88305EB3 /* SDMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 85A7CF7AFC03C91AFB98EF5022FB97AC /* SDMemoryCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A029B635564A3A7C8174D69E444241AB /* Editor+UIImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = A49D1842DD970A77A3B0D605617890B8 /* Editor+UIImage.swift */; }; + A0534AEA682DDCE2360B05C9EF82C8FE /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E644A02D107EFCE505936D2C494F0D2 /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A078A275FFFA48D620074790DA3CA6CE /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = FF39E4326B5C2C88D65E04B5814284C9 /* MJRefreshStateHeader.m */; }; + A0DC59D2A58D5BD6F3700FFE3FC295A6 /* CompositeDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C73EB33F3F32ABFF91A2BD8F436835E0 /* CompositeDisposable.swift */; }; + A0E4A9C2BF836AFF9EFD0FE0751287F9 /* Archive+Writing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42FEFD5D7BAEE2B475CA21E3B18847DA /* Archive+Writing.swift */; }; + A105754189EF99CFFEDEA8CCBE60D0C9 /* IQKeyboardReturnManager+UITextFieldDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3543AC184D347C03D551F192980FD16A /* IQKeyboardReturnManager+UITextFieldDelegate.swift */; }; + A11B53CD11370C968EC79A951D865E4C /* DDFileLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = F02800A4D7E74C83AF754FB80D50552A /* DDFileLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A12FDB12DF3F9EB993A5CA6FA07754F7 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 8ED125D7528257024B809AC5B68197AE /* MBProgressHUD.m */; }; + A13546213743CF2610800864045B5D7D /* ContentConfigurableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AF5A4FEF1EBB57D68D4832ED9C4B8C2 /* ContentConfigurableView.swift */; }; + A146D36DC8070733A58AD8D12D4E8E4B /* AnimationFontProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5727BECEE9618152FED1401FF57F6A0 /* AnimationFontProvider.swift */; }; + A14CB138559202BF9783493A3B0A49F3 /* YBImage.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C18EF459A92F67B78ABCB4D4C4B7DB /* YBImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1B70BEB9DCBE081F5B39F596F2596C5 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5DB288CA1735838DAB9C361892E54EA /* RedirectHandler.swift */; }; + A1DC9EFDF50DF0EAF24D9D7C219AD2C1 /* NSObject+MJProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AC8482EF4E24B214C0C7B9E49611EE5 /* NSObject+MJProperty.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A1E44277704AD68E867FD7C955A6632D /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 14D2737365898F5CAB68817BBFBF3E3A /* MJRefreshBackGifFooter.m */; }; + A20DBEF15B6A962DF4C548A26F00C8C0 /* TrimPathNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFFFE5A3E20A221292DEDE2DFCC56A72 /* TrimPathNode.swift */; }; + A20E40DEA40B323770F8419B508B828A /* TailRecursiveSink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 362ECCD2645D282758EFF964B9C6ABA9 /* TailRecursiveSink.swift */; }; + A21E48381D84E5A83C5139952CA955EF /* LocalAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBF872BB8015B50B7C30FC72B5542972 /* LocalAsset.swift */; }; + A243EC482D57F45F646DD0769BA8D5AA /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 98026ABD4730AD0D7DE536A7F513DDB3 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + A256118BC48CDEE51725AE00BA7352ED /* DelaySubscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34853EDCAAF81DB2B6643A784E02B2A3 /* DelaySubscription.swift */; }; + A29A43CF3053CFBF94A3EF7CF2324F70 /* vp8_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 63A3A7CA60BE4D32F36898432CE921D0 /* vp8_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A2D48CC012DADC29CC924512A5F4513B /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 376332B7BB7B62B68F0FF48144147A45 /* CFNetwork.framework */; }; + A332C0B8334B1F42C06DA96434ADED1B /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 4E62540E472572F4BB15B036489695F3 /* PrivacyInfo.xcprivacy */; }; + A34060A696287851E155DBF22FA07A8C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + A36C66423C63347C362000CFA6B39ADD /* IQTextView+Placeholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71CEC01D5366F1D7433565AE23908319 /* IQTextView+Placeholderable.swift */; }; + A39976E89E1F055CF12BC8BD0A16F9E7 /* cost_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 940C74F803A7278DA8A603C8A4C8CE5A /* cost_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + A39FE5F72261B202CC63722A7B357206 /* IQTextInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E0BB18C9D64642FF39EC8D976EF900D /* IQTextInputView.swift */; }; + A3AE0AE632B34C3FED84760D5BD8502A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 7C5F5574EA447F3EFFBEBB60DEA304A5 /* PrivacyInfo.xcprivacy */; }; + A3CF3A4EB88976FB0D5E989B4ED85C55 /* Infallible+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C9BE70FD7A9924081AB7126CF05E791 /* Infallible+Zip+arity.swift */; }; + A3E8A074E30BA84E989760E577267356 /* IQPlaceholderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7928401BE8E30C66EE3ADE8DD8F0B52D /* IQPlaceholderable.swift */; }; + A3EA39A13714B3103B82F4066A642F53 /* MJExtensionConst.h in Headers */ = {isa = PBXBuildFile; fileRef = E3620E9742F07E1E2733403D44E6B104 /* MJExtensionConst.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A3EA40405F301013677F25D98B02737A /* RequestTypeWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6D3BE472B6444F8EDCE6D9376908C0A /* RequestTypeWrapper.swift */; }; + A403C1C5410219C8C51B2C2F7EAC7FD8 /* lossless_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 5C3BD5F1BA48FA5E47E18FBCF7AECCA0 /* lossless_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + A42B44517A3A60DA308BA03F12A2EA92 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 751C8796E14CDA48CEFF8C95250759A9 /* Filter.swift */; }; + A43B51A077E9450423F6E23E3E3A656F /* SDImageCoderHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = B212767BD106E5330DDC1032B129ABEC /* SDImageCoderHelper.m */; }; + A4869D054B2AA3CF5F87BEBD031CDCBA /* StyledView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3333FB4826A1B7E11CD9D053ECCD0B71 /* StyledView.swift */; }; + A51815518AFD2325631A5EF870F23BD3 /* and.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8354BEF8A173F7C560C84148593F0CD7 /* and.swift */; }; + A55FA53F690C15B96D16270FA0DDCA61 /* OIMGroupMemberInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 020B0D8611C73B031357E9E91365C77E /* OIMGroupMemberInfo.m */; }; + A57326C8E77245DB6680543B3426F381 /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 944736B27436A346B72E1922E58C113A /* SwiftyJSON-dummy.m */; }; + A57C8E88F850C24574FF47756536392B /* LanguageType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B26EFE7D0D803E3B328DE5A7C05B5F30 /* LanguageType.swift */; }; + A58EE42EE3645E9A635B070F02E9825A /* SwiftDate-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 77A1006A98BEC8471B208887084BC2DC /* SwiftDate-dummy.m */; }; + A59F8F6BF639189A54750A0FCA385CBF /* TimePeriodGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5452FF8CDB97481CA818937F4AA899 /* TimePeriodGroup.swift */; }; + A5EF8F09A21D6A69E2DB05787B061D84 /* DefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = B95B13BB8C7EC7678CC95F016E6DB9D2 /* DefaultsKeys.swift */; }; + A5F0350C5D35B1A7A3685A17C4971080 /* color_cache_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = D6E9D7AF870E8D988924C6290B87CB66 /* color_cache_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + A60C37A57AF2C392F61D9CB30547C2C1 /* RxSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CF54465B2588A0521DFFB1FF4940DF6C /* RxSwift-dummy.m */; }; + A610226159AA69D1BEF935D66747ADFC /* ShapeLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763616BE3E35702DEF0239BC9469B331 /* ShapeLayer.swift */; }; + A6226F26A69916F590663BAB95720286 /* Zones.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076D230EE2230FCE5631F7FF4CE38942 /* Zones.swift */; }; + A6415BE5D50BA69358B8C31085045BD2 /* PhotoManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C84DB09A5FF186DAD4C96289F6032C61 /* PhotoManager.swift */; }; + A66EA62E1052F6AE1A384EE8932EDD85 /* LottieAnimationViewInitializers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FECF4078450642BEA0A9B39AB4BE98C /* LottieAnimationViewInitializers.swift */; }; + A698A792F293BA997FE75C70CD18B022 /* OperationQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = B75F8EA27F5A661B3123631BB2649458 /* OperationQueue+Alamofire.swift */; }; + A6D6518D73C66770F338CEFFCFEE9737 /* PhotoPreviewViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9E8F62AB5BBD697AAD9ED993626C03 /* PhotoPreviewViewController.swift */; }; + A6F1EFC3CDA009A4BE6CCBB01248DA21 /* UICollectionView+IndexPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEDFB3B7BB27DE01032FB09D870AD119 /* UICollectionView+IndexPaths.swift */; }; + A723E474922D959654804A7822B2C9FE /* AnimatableSectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85C8B51DA0770D817281FCCB4771C0A0 /* AnimatableSectionModel.swift */; }; + A72E718765315BFF3AF34D284006DE99 /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EE7CE374C8D7614210D1BBF61EE6A98 /* Map.swift */; }; + A74FD9C3A0D40BB2919EEF5E39879531 /* InterpolatableExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8E337169F44377E81115D90C19F1BC0 /* InterpolatableExtensions.swift */; }; + A776BB860CFEC83AFD8814D717A1F616 /* bufferWithTrigger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D5883A9A254761FD72FD4BD60F9207B /* bufferWithTrigger.swift */; }; + A7B5DF43B0752729116087D9A68C052E /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C4D61F01CE840F45DF6982F78033302 /* Repeat.swift */; }; + A7D3ED11692D0C8E94AB8FFC4EC4BDF3 /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2D30AFD0DABC502445D62AAE24594DC /* SubscriptionDisposable.swift */; }; + A7E562FC9C10C5003534E91160C69330 /* Kingfisher-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E69D9DD0B6099895F3D54842186DC5A /* Kingfisher-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A7F8F8A2D8CDBC03F051E68E7F80926D /* RoundedCornersNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B35DAB47F413C69F7A5ACA58DFE60344 /* RoundedCornersNode.swift */; }; + A7FF322DF74002F7C9F855A5F95B166A /* ImageFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = A84F997BE9F6903E8E03618EBBA3FB65 /* ImageFormat.swift */; }; + A837370033A5D6274750FFC197CD5517 /* quant_levels_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9823236B88743EB6A4D25D711237C722 /* quant_levels_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A8437EFD962B3A3F812B756C76ADD87B /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E4A8A666F6AF1C7AB6EF523E556900E /* HTTPMethod.swift */; }; + A84A1EFADBF970F63D187ECEC5A10811 /* DDLogFlag+DDLogLevel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E964CE79E7B4729FBA8FB44F8D76D8C0 /* DDLogFlag+DDLogLevel.swift */; }; + A8609464778FBADF9D5C6800FB02AAA2 /* GradientFillRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EEA8F70494527CB93A38C74F7982F83 /* GradientFillRenderer.swift */; }; + A86CC1AFDFDD692DC4EE66F57C0F39E6 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = C90D59230855356AC2C7ECAC0C2A6DAB /* UIScrollView+MJRefresh.m */; }; + A875ACCA7ED41CD1D12921290A386F5C /* ObservableConvertibleType+Infallible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 63A719DFAC9452911312006859FB59BC /* ObservableConvertibleType+Infallible.swift */; }; + A87F51B875525B9EFCF8E484CB3EEBA0 /* IQKeyboardNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 29DD63712BF5682DFBF582E1766154EC /* IQKeyboardNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A890CF713389EE9AE188A5B8CBD28DA7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + A8DE63C8D7C4A284E843DE63FED30A6C /* NSButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0D288497955329D2E2EEE0E11E4A4F /* NSButton+WebCache.m */; }; + A8E186B1FE4B17DA0502C02E03CA8A07 /* YBIBVideoData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4448D42457474E9CEFD9FDDB43FCDE90 /* YBIBVideoData.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9148F1A43900CC2F92709355079A30F /* Driver+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = F140B22CB4AB5F7F5608248DFE474EB8 /* Driver+Subscription.swift */; }; + A9506074DCA6117AAC10CCF38810EE3A /* AnyObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FD978A375670AC41396D2A0C366330 /* AnyObserver.swift */; }; + A96564D57DFFDCEB8237AC0009F19E91 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 263E0995DC5FBCEC84D7B86C4F00115D /* Task.swift */; }; + A97478529331285D5FE36B7A4FEF9FDC /* DefaultsSerializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C7BAAB90591C5F80AC0B54E492DC5FE /* DefaultsSerializable.swift */; }; + A983CCA5F6596F030EFCC1E27C1E766E /* UITableView+IndexPaths.swift in Sources */ = {isa = PBXBuildFile; fileRef = B33EEB175BF64F2AE39B373015729BB3 /* UITableView+IndexPaths.swift */; }; + A983DF87C622A2FBC2DC71F27911092C /* Pods-QuickLocation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F742F9BBDEE927B1CEBB85C83810BC8 /* Pods-QuickLocation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9B0233F2C7CD6365526CA2178F9215F /* URLRequest+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACD9E6D9D77A4F9B1BAA53135CC21EF6 /* URLRequest+Alamofire.swift */; }; + A9BD8B825EC61C85BD1592271DA93A01 /* FillRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56F63B4CF7F8651C02683E839A24EC1B /* FillRenderer.swift */; }; + AA08300A57FC853C833BD5E8167445B9 /* SGWeakProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 176B5986B4C5F9E607A7F9872F4E9DBC /* SGWeakProxy.m */; }; + AA4CECA3798CE0C84CB7CD5F342AC4E3 /* YBIBToolViewHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = C27A10A9A647A42B2B5BE3F24C1D6BB6 /* YBIBToolViewHandler.m */; }; + AA5921D519E9769BC090DF9BB63A40C7 /* DataSources.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54E4EED20E396CB065FE382ED36B44A1 /* DataSources.swift */; }; + AA916DADA92B6BF9B60F104C7C77518E /* UIView+WebCacheState.m in Sources */ = {isa = PBXBuildFile; fileRef = D3963C0BEB66BA33C14419B6AB8E504C /* UIView+WebCacheState.m */; }; + AA9883CA105A3DBEEC0EB4A4619D158B /* YBImageBrowser-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 19AC9477C2E6EE717E2515047C572475 /* YBImageBrowser-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AAB1561F8BB17934C2858A14B7A16D3C /* PhotoPickerBottomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0DB6C7F3D7CF810502FB403BE2D852D /* PhotoPickerBottomView.swift */; }; + AABEF13464BA7F4621BD94736C1D057C /* ConstraintMakerPrioritizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8DDCF4864693C73E1125B4AF69B2DA3 /* ConstraintMakerPrioritizable.swift */; }; + AAC982194C2E64A6EA74BE58C7BF6B45 /* ValidationType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75859D611A6F089B1FDC29D1AF73E27F /* ValidationType.swift */; }; + AAE2016D45F550892E95C71837487A79 /* PhotoTools.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64CAD2C8FCCCCFB901AD99338C69EE1F /* PhotoTools.swift */; }; + AB1F732806BA88499D9556A1DF9C7147 /* DisplayLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8E1A6C1868911E09185610292922398 /* DisplayLink.swift */; }; + AB292EBA731CE0800CDA7DDEDAFD0E6D /* PhotoAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 590BD5EE2F1B73CAD4BA76A24A89F755 /* PhotoAsset.swift */; }; + AB3D4041F79C0E504824AE124753F01D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 18091BE40C28018BF17A58A3B4E68CDA /* PrivacyInfo.xcprivacy */; }; + AB9078825EF42F1CF8E1865144AB3C09 /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7BC7D5D706A55CD1A71A40EB4D8F08 /* AnonymousObserver.swift */; }; + ABA94A91427B1911BD12BF9E63471453 /* demux.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CB02546BA5EAF3A87B631DFDF1A12A9 /* demux.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ABB23E61CFECC70CBC823E10333EEEF9 /* CurveVertex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7657F084D1FA639C2B0E06330CD5D367 /* CurveVertex.swift */; }; + ABC0BD510E360D3E43D3AFE11F000C4F /* WillDisplayProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7CDA2FFFAE2097689AF3F32BE7E21DE /* WillDisplayProviding.swift */; }; + ABE29701808E91BD6622EBD0EEBEC762 /* materialized+elements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 591FE62A8AED50273FB3FD3B80759AF3 /* materialized+elements.swift */; }; + AC22AD1E1EF9CD9D6E242F3630A9A012 /* IQKeyboardManager+ToolbarManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CC9F61619926E872D28D902C1AF880B /* IQKeyboardManager+ToolbarManager.swift */; }; + AC4CA901E2320D4D147740E29CF08F1E /* CLIColor.m in Sources */ = {isa = PBXBuildFile; fileRef = D10D891E1B9E58E640DDE11239776223 /* CLIColor.m */; }; + AC710813CB6A1DAEEE45914402F864D2 /* MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = FAF290DAFBACC9C13199D9CE5174EDA4 /* MJProperty.m */; }; + AC7E09D6855D27DD855A81B3D8C1CDC5 /* View+ValueChanged.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5E34F664A26E302A185A09496929E75 /* View+ValueChanged.swift */; }; + AC7E21CB29757E2CFC0A30211BE31248 /* PreviewPhotoViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DEA470D696BF33083541B017CF60B05 /* PreviewPhotoViewCell.swift */; }; + ACC5A64D2C9E36024DB07378F7118FB8 /* SDImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 86A7C1E882BC355EE233177C35BD2FE3 /* SDImageLoader.m */; }; + ACF245BEE605783DBA0E666FED8DBE65 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 21EB64BE1424FD67CBFD60640E5AC630 /* SDImageCoder.m */; }; + AD12190855956D547F04D5CAC6F6F1FD /* sharpyuv_gamma.c in Sources */ = {isa = PBXBuildFile; fileRef = 42AAC5C25F48FDAE17B347BE4BC0FB10 /* sharpyuv_gamma.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + AD3490FC2929561C622B20EEE38A20B0 /* RxTableViewDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 208FBB9974C322A514DDB9CF05374E5E /* RxTableViewDelegateProxy.swift */; }; + AD39CF4A2A15D137EE8908099B9FB9E6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + AD50B64828C23634D364DD46F5BAE1B2 /* PathOutputNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D8AE7E514A94049498276F4D7A2EA8 /* PathOutputNode.swift */; }; + AD7FBFF5398724D66EF831648087F043 /* bit_writer_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 335078A0CED7AAD0119A29BAF4421016 /* bit_writer_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + AD860938D35585A99549790933C165E5 /* HasImageComponent+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99A5D487DE1C7561340E93F71231A048 /* HasImageComponent+Kingfisher.swift */; }; + AD94DCBF00976709889890A22F960062 /* SDImageCodersManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BAC4832233C2EAA5A0A324B4FECE605C /* SDImageCodersManager.m */; }; + ADD4389B968C2739C37B789AD44D3ADA /* Picker+PhotoAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2679C547D6616063B0D9FC6E558EBA1C /* Picker+PhotoAsset.swift */; }; + ADEF5F16FEE9FCE6638ACC79A7ABF82A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 34D94319150FBBDA5DBC6B33CE2A3F42 /* PrivacyInfo.xcprivacy */; }; + AE0B3DCEC831425C787D002509B4C8F1 /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0592F073094483AED9C6687373CD3E98 /* UIView+WebCacheOperation.m */; }; + AE224EDB6D044C0FE86B086E950FC2F9 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A25B8A9E6FDF0123372C7099D17C0C5 /* Debugging.swift */; }; + AE7A69CD6CA5A7CD8B2DD0524F25CE43 /* EnumTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85BEE30BD1FC651C5184A49AFD512A6C /* EnumTransform.swift */; }; + AE7B02645B8F769CA5F215EE8F7CC5B0 /* View+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 06E85A137AD401FDF67AF3F231FCBFD3 /* View+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AE883C65A28D87087F1BD17AE1E6BEAB /* PhotoListConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C837B2221F8E0307B9986F0D7DE84AC /* PhotoListConfiguration.swift */; }; + AE98272854C73D89242B359616498EEF /* thread_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = A287BBD95D2A3CE560410E6AAEFD0C82 /* thread_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AE9E12B9AE82D5E8964A3BF8D2E83F08 /* DataTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAFECD5FCBEEF8FDD448C9D99E7875DB /* DataTransform.swift */; }; + AED546D422103E6E622C110FB58913B6 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A233DB53169F833FF0DC8F0A5692710F /* ObservableType.swift */; }; + AF1D366BDF7AA8C015A0283550C197AB /* ImageDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9D77B762A0231CE5705251F42F55AC3 /* ImageDownloader.swift */; }; + AF28EF187B5278B9BBDBA36DE7452166 /* OIMSearchParam.m in Sources */ = {isa = PBXBuildFile; fileRef = B067C57685FF3EDC8CC9D9022087A8D5 /* OIMSearchParam.m */; }; + AF2A94909F2C7470ABB6995ACDB756F6 /* rescaler_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CAD8E36D5A47E8FC472AD76480C5F1E /* rescaler_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AF2ABE6FDD3F70320024969E414C97AD /* MqttAuthProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = E2DF4020FB18B7407F948B895C5A055E /* MqttAuthProperties.swift */; }; + AF34FDA62958AD154C005C924C808165 /* Delegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 953DA43EB13E30AF8D9D972941D5826F /* Delegate.swift */; }; + AF6EB132E2FE73EF2933818F91A86240 /* Ellipse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67F2EC575215EF8F36FE3332C7B8FAB5 /* Ellipse.swift */; }; + AF760C78F1C7E11BF7CB9E9B29903530 /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE460D658E702CA2B530B22A735CDEE /* ConstraintInsets.swift */; }; + AF872DC1B0FCA5AF714EEEB0FE1CB581 /* VideoEditorConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5F108D6C13B18E7F0E70A6661D58574 /* VideoEditorConfiguration.swift */; }; + AF8B4F3C9A868E54151E882AFF5972A3 /* CocoaLumberjack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B0F792B49D07BDC668FEA0FEE1D35C1 /* CocoaLumberjack.swift */; }; + AFAC54AB9B003E85E8D1D3E076D2ACDD /* OIMNotificationElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 52E0CA4A9F089F647F586FB444DBEF13 /* OIMNotificationElem.m */; }; + AFBECCF0A08CAD1096EE187621760B19 /* LayerEffectNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA18A9D0FE32D587402920F04251F766 /* LayerEffectNode.swift */; }; + AFCA288AE0DE819FE6CE288067C9A82A /* Frame.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA032BABA117E2462E78153FD9CBD9F0 /* Frame.swift */; }; + AFE232EEDAC5B035CDB331A5CEA18E32 /* Placeholder.swift in Sources */ = {isa = PBXBuildFile; fileRef = D76CFBF1AF771B8A842900B6363C910F /* Placeholder.swift */; }; + AFF9C62E7AE15ECE0FBA058A48C2C662 /* TagListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 548902D1C1F1F472857640F1054B46CC /* TagListView.swift */; }; + B01BF1940094224E6A48D83E53BA6AC8 /* ImageBinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6198D280669473ACBA6A084A650DF4D8 /* ImageBinder.swift */; }; + B03642C4490E4F61792A6BC3CDFF4C9D /* EpoxyLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 442B1083EAD63EC2E04EE79B2C02102A /* EpoxyLogger.swift */; }; + B03F71551FE251F44BDC790C91C850A0 /* Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68E69BFAD345E18146F7E60EB1231743 /* Deprecated.swift */; }; + B04007D5AC6F72BD74FDAA49029B5F6A /* mergeWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = D387B9EF45C30A00D99BDDC504B89E42 /* mergeWith.swift */; }; + B0418EE57851D799582EC87D566AB8CE /* syntax_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 71A128A3C931B299C59408CB2AE87451 /* syntax_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + B0875E3AB8718E7DFE5C53497C02A15E /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7389364A0F9C4547DF6856032C109311 /* ConstraintLayoutSupport.swift */; }; + B09A70A587400F738C138BB0487F08E0 /* OIMCallbacker.h in Headers */ = {isa = PBXBuildFile; fileRef = 7983D53E055B37FF8E25038B02CC164D /* OIMCallbacker.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B09CA827B18A5EC0404B38B1F5351AAC /* SDWebImageManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D705995FC6E23FD467B4D98A67815ACE /* SDWebImageManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B09F08548ACA8379445F6525011EE219 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 715C3629D8ED7790147D9200459C63B8 /* MJRefreshBackStateFooter.m */; }; + B0B6845271D9CB2ECE54665E4942D32C /* ISOParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13E455DA64F34549C2DF36123E908D73 /* ISOParser.swift */; }; + B0D8D212F563CF188A5C51F99359E31A /* SDCallbackQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 17F4024785CE7E20270CB82E7E759217 /* SDCallbackQueue.m */; }; + B0ED3A9AFF050F528F62FA62A2ED867E /* OIMSoundElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 87D4B044B9175BC06CC0B9475C219755 /* OIMSoundElem.m */; }; + B105F27A3EC15746DDE121AC8A9A57F5 /* dec_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = B581780208A80C4FB8291D723C00EFDB /* dec_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + B126EF2264809CA8F7A70EB1F227030B /* ExtensionHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDB5DC8D1CA553235FAB3A2185D3646E /* ExtensionHelpers.swift */; }; + B147ECB892B7C79FE4B1B46436E885B8 /* SDImageHEICCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = CCDE73E0140C3BC9F72E28078BAB4C4E /* SDImageHEICCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B164FC4CCE6C47414B566E8CC277DE69 /* SDAnimatedImagePlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = A01FFB1189079876A3BE427E2D58D934 /* SDAnimatedImagePlayer.m */; }; + B1668CE388B75307E26FE3899736E5ED /* SchedulerServices+Emulation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB1931CF524B963B8848089EAC19A28 /* SchedulerServices+Emulation.swift */; }; + B177B54D22587EACF66B2AC074C5D053 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CD73578573AF5AD46B0F08EBEDF1A5 /* Accelerate.framework */; }; + B186A7028D06E8C1196CE78DC5CCBA97 /* OIMAtElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 26E12650ACBFCF10361CA3BE989938D9 /* OIMAtElem.m */; }; + B1BD3BEC4738D96D11B1DBA31F71504F /* EditorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFB269DEB8628E1799B027D9BCE9841F /* EditorType.swift */; }; + B1D23A68F13080F6DA6EC33CFB04B877 /* retryWithBehavior.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA2CD254B942B1A97437DFF6AA4C3B8 /* retryWithBehavior.swift */; }; + B1DEBD8F6B20A33C8CA774C87DCFA050 /* lossless_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = E0EA20F9C28C606A3D5D4FFEF8208E80 /* lossless_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + B1F7B96741F92ADC2F98417FFC33DB96 /* PHLivePhotoView+Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E6697D38397D54AD0F4753556ED8EEF /* PHLivePhotoView+Kingfisher.swift */; }; + B20CF9BA80C38488F04F90EC817A3B23 /* OIMGCDMulticastDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = F21FFCD8871B063FF323D4E6DEEBC240 /* OIMGCDMulticastDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B23B20F1C3E3BA41870F9137074F1AEE /* MultipartUpload.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DD2EEC1DF1BF388D4AF543887D09A83 /* MultipartUpload.swift */; }; + B25C6013B93EF08F819A23AAB22285D5 /* SDImageIOCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 08261D3B2E86FA4702201DA370E21959 /* SDImageIOCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B2840774DED49F3FA2E50D1F47964C60 /* Infallible+Create.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA95392BD8532D881A2B0ADE65F10F5F /* Infallible+Create.swift */; }; + B30507428462F086F3129F625DF33A42 /* DelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC1490178B4403F12075DA020083F475 /* DelegateProxy.swift */; }; + B317F935509A2A6E0FA87FA52C95E88F /* Date+Components.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E1182014BA99CB0BFD1ED56B36F4889 /* Date+Components.swift */; }; + B32473D5AC71620CB7266728ECDB133D /* IntegerOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCACD2069A5D045848CDC2E5FCB44305 /* IntegerOperators.swift */; }; + B327822BEE47C530A9E220A4164CE0EF /* DDLegacyMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = DBC013570B52683EAAC1DC3751BAE86A /* DDLegacyMacros.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B32BC6D67438172D5B58955EAB85D802 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + B3563172CE8252B7C899749ADDFAEA75 /* IQKeyboardToolbarManager+Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAA272F52E8ADAC35C395237086FBE2C /* IQKeyboardToolbarManager+Action.swift */; }; + B3D4D6744D0958B2ECA368B18B2DF24B /* VirtualTimeScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = ACCF599458E42F9D6A4C0F3BE13220BF /* VirtualTimeScheduler.swift */; }; + B3DE6FE1EC85A2D9631122D41AE6AB35 /* UIImage+ExtendedCacheData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0905AA9AF1C83106FBB5946C32226A04 /* UIImage+ExtendedCacheData.h */; settings = {ATTRIBUTES = (Public, ); }; }; B3E6AA7820DF935DB4D69B72CE4054E6 /* ObjectMapper-Privacy in Resources */ = {isa = PBXBuildFile; fileRef = FE6B8ABE5D0AD8A55BCFA48D21915C07 /* ObjectMapper-Privacy */; }; - B3EC2DE8A5B6FAF5ED30071E4A3D9BE7 /* DataRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB09968F5CF26869F7C209FA6BA9D6AB /* DataRequest.swift */; }; - B3EC3F7A87EF3C63DE72D179C82CBA3B /* Observable+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78512BDAE7DFEC4E0557ABA5FBC074A /* Observable+Concurrency.swift */; }; - B3F47B7393090017F4BD01635B052462 /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = ADFA2645467E0829AC032303FE5EA3B0 /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B3FCB3CE60F4C86B4E560EC64D1DD97E /* DidSelectProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88CF94B26432761AD7272FFDA7D98646 /* DidSelectProviding.swift */; }; - B3FE6E966F4807E217609F2F1BD307B2 /* DefaultAnimationCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8F3F7FD348306025BE447B96E130A74 /* DefaultAnimationCache.swift */; }; - B42C81138A67C0F5F5319692819E0F00 /* Pods-QuickLocation-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1F742F9BBDEE927B1CEBB85C83810BC8 /* Pods-QuickLocation-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4834C595092A16BC05744CB4D7E6CC2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - B48A975992E58328254C494F133DE467 /* NSObject+MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = AC86EDE9FF4EF53151A9DBC007517513 /* NSObject+MJProperty.m */; }; - B49B2D5BC6CD6BE522D76CC1B4B78B71 /* sharpyuv_dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 905D38CB18C6D7D4FCFE589AE6168BA5 /* sharpyuv_dsp.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4AF2DB1C39D8E8AD3A28DF1EB48D43B /* sharpyuv_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = CB5F439F4729CFD04024FF05BCA74AE0 /* sharpyuv_cpu.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - B4B5D09B6C943A88805B18833A836718 /* YBIBCopywriter.m in Sources */ = {isa = PBXBuildFile; fileRef = B10210F7003D8FCDC58E9897BF8F9A7C /* YBIBCopywriter.m */; }; - B4EC613823F8FACC3A49812C18BC5AF4 /* filters_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 45A6C83A799C0C051A71B753EBF2E0C4 /* filters_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - B5093BCC34D41354EC39E646BF28D580 /* Observable+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF349643C3A63B3C5D763016F77EF7F5 /* Observable+Bind.swift */; }; - B50CAB2E13D6CA8AA00F024343B9129D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - B53D9A285B3015EA413FA05765041026 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13E5190A07461E9AA35ECDE444AE8025 /* PrivacyInfo.xcprivacy */; }; - B5556D21308AA5BA79A0624047839955 /* InfiniteOpaqueAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7F0E8464FD7AF4F138EB5EAA5FA48F4 /* InfiniteOpaqueAnimationLayer.swift */; }; - B563C32EF8CF73F290ED561473CC681B /* BehaviorSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ACC2D2851101B7855064121BBFD5564 /* BehaviorSubject.swift */; }; - B56F252576BC6F84DE40D50006FC21E6 /* NSImage+Compatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 96A774383BDFCF0DCC96A12872CBD4BB /* NSImage+Compatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5858E60C0045D05C618A1007ED5599F /* PhotoEditorFilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AC1D8D7E70806DAFFF676321C42C9EC /* PhotoEditorFilterView.swift */; }; - B59E167A7323D3F0E727AAE4417ACA03 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DECC62F44E2E42AF9DA7B4D12D109AD /* Entry+Serialization.swift */; }; - B59E60FBC9665FC1061B88B8E6FD9FAF /* Masonry-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2641DD06874437DB484DC2A833AACEDB /* Masonry-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5A43FD19F22727998A5D4EC2D146DAE /* YYImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 71E50B64226D3560CAF37B63F959E322 /* YYImageCoder.m */; }; - B61DF7E3F4B364D1C76D967F71676C9C /* histogram_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = BE68E3C8423A0C2B3B2F147C351569BD /* histogram_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - B6456227FD0D52F4612587F38FE03104 /* KeyedDecodingContainerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E919CC6590A0AF2C026C7FA6371EFD8 /* KeyedDecodingContainerExtensions.swift */; }; - B666FAB7B1025CBABB994FABECC3E75A /* DotLottieImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2739ABA43794B9409EE2F3DDA37D1A7 /* DotLottieImageProvider.swift */; }; - B66E00F5B93F21B87D00BBFFED5D1E14 /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = E653E3EC2CFFB240C0B26C63037A8603 /* AsyncSubject.swift */; }; - B673D2E104D413AA84CF2924084B4596 /* OIMQuoteElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B160D855FFEF98949AC7D84DF900D91 /* OIMQuoteElem.m */; }; - B67EF56AA99C48A55752847C721D65F1 /* Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C13FACFBC79FA95702703916C3A64ECF /* Debug.swift */; }; - B680C2604BD8BC9644AE7C67BC46B9BB /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 38E3AB8EB5CD905844D10DD03E94B4F6 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B6C6293CADE3F065D6EFDBAFEDE7668B /* Generate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89242402665F619FFC3F3B24AE76ADD2 /* Generate.swift */; }; - B6E41B29F0070DC15F62FD34A8DFE647 /* KeyframeData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C4A9542376C040D061E6FE28C2DB9B7 /* KeyframeData.swift */; }; - B7411DFB7E022539E8D860F784CE165E /* UIGestureRecognizer+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3371BF35BC76F7D9FEB483B31F4A8082 /* UIGestureRecognizer+Rx.swift */; }; - B74FEE33ADD328185A51EE3A14BF754B /* UIColor+SDHexString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F8F9A75D00E6A2AE71D19B551AD747C /* UIColor+SDHexString.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B77AAFFFDADFBD968027A516A913C2A3 /* SetBehaviorsProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 249F08F366A61A80DBF012BB16BE82AC /* SetBehaviorsProviding.swift */; }; - B7B1143A40E02A017FC3A5337E196138 /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60011C2C50FFAEAC7F35E0F62890FDD6 /* CombineLatest+Collection.swift */; }; - B7C4190C4B24D435ACDFF3495EBA2DC6 /* YYFrameImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 6815C778E5D2D39FDC2284C3868D2F07 /* YYFrameImage.m */; }; - B7C57A55A892301550A7BEFF1C9E6754 /* YBIBVideoData+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C0DB89854D24E5D70FDE2EA792BBCE4 /* YBIBVideoData+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7D4A8BCA9A76AE4952E96EEAC908D20 /* cascade.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0A2D3C3FF94DFA55B6240A4E3F7EF71 /* cascade.swift */; }; - B7FB51D80B098D03F81DF426A2F80142 /* TargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9A7F9B1E648B27FC9190CFEA462392A /* TargetType.swift */; }; - B81BDE79894EC150074DDE2B45B32093 /* OperationQueueScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEBCF31BB53A7A17C21471A5D93034A1 /* OperationQueueScheduler.swift */; }; - B8541120F3126DC519E6E26FD850AAF2 /* RxCocoaObjCRuntimeError+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A5BAB2182C418AA259E530EC867EDDB /* RxCocoaObjCRuntimeError+Extensions.swift */; }; - B863E4ECC1232754CF9ADC11898A8259 /* TakeWithPredicate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBC4752255378F245AD160803FB5186D /* TakeWithPredicate.swift */; }; - B899D80B7E9444646D3EBF6B0084CBB1 /* SDImageTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 680A88CC00CB2961A0B5247C9F2AFDEB /* SDImageTransformer.m */; }; - B8C2356F35304D8A9AB06A3AADA00C4E /* upsampling_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 1AD3C64E24C009607CBD92AC885EF423 /* upsampling_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - B90209EF771CACC6796001936D684F96 /* ViewType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E60DA40527A43576DB5B9BD90EF96BE /* ViewType.swift */; }; - B903049E7C1BED7918DAB208754107C7 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB6180AA64A729F29163E3E4DA72B8DA /* ConstraintMakerFinalizable.swift */; }; - B933657988FFD0044335D648936B6B3E /* YYAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 366510E521C9064578CB795725F0EF55 /* YYAnimatedImageView.m */; }; - B94F1F1193404C2E45C1E34D1745406A /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 80A87EEF8234577813707C2B05EA16DC /* DDASLLogger.m */; }; - B9AD528414906CA2F7EFC29C105A4835 /* YBIBScreenRotationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = C7B41E31317DB329D97E70B6AE1B3AAC /* YBIBScreenRotationHandler.m */; }; - B9C4A527640636F2E81CE6B3DAA86A76 /* SDAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = EB7E2AEED7BA2AEFE99F0369B0A398E2 /* SDAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B9E2DC5B8A62D07383AE695D13A30CBE /* OIMManager+Conversation.h in Headers */ = {isa = PBXBuildFile; fileRef = 65AF056AC49D66AA67CE8E4CC5F7ABFC /* OIMManager+Conversation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA2133874033B6E2A7DB5F7900DBFC00 /* SDImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 50ED832AF109F2B258D94F54C004E6F6 /* SDImageCoder.m */; }; - BA2BF63F7311BB19D1584B948436162B /* IQTextInputViewNotification-IQTextInputViewNotification in Resources */ = {isa = PBXBuildFile; fileRef = F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */; }; - BA2FB695DEB0D179253EEB8DFCE3578B /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4301E59E401F1C6F4638E1B62F53C1DD /* SnapKit-dummy.m */; }; - BA630891DEED7C86255D158198B277A0 /* IQKeyboardToolbar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BA4DAE10AD47725EEC376152E05E20C /* IQKeyboardToolbar-dummy.m */; }; - BA904ABA8ED36CC4E5EB2B2004CA1F18 /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = B8BB502A0A93569100EFA0D73E3A13AE /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA9ECBC5C994B303E135BCAE0A5A5047 /* Combine.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB070EEA28E7CED98A5D3FBC546B2023 /* Combine.framework */; }; - BAB98DDCE1A65F6F377E0318A4782874 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - BACE03596343C2C83670A3996164D2F0 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DC7E49D8AEF596CCFD395189A1C41EC /* RetryPolicy.swift */; }; - BB06C36A7FC540F344FE52110DDB261B /* IQTextInputViewNotification-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E67302D9EB7537412F3092EFC7E74F0F /* IQTextInputViewNotification-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB1AC47D956946D637412FF465A81839 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E794613B7B4967B7E315E58575C19E8 /* FileManager+ZIP.swift */; }; - BB2655E6FFEB70EAD084C745DA7D46C2 /* ValueProviderStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A2A7C5D27987780C1AD46450EB28461 /* ValueProviderStore.swift */; }; - BB38C83C7216E02ACF4EE149FD2ABC71 /* rescaler_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D2B336DD1382EE765ACAE769343CFE2 /* rescaler_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BB8854955B704BFF79EDD38538B9568B /* OIMManager+Login.h in Headers */ = {isa = PBXBuildFile; fileRef = 00A34944CB3A07DB54E4A187735E5EDB /* OIMManager+Login.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBBCA687743C57954AF34D4FA17B0CDD /* Repeat.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABDF1BFBE98F3670973FDD3336644BFE /* Repeat.swift */; }; - BBF31B50E3CEE27B78E54554DDA3052A /* TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAEC149E660F72FBA6F717D362ECF1F5 /* TestHelpers.swift */; }; - BC2F9B1D6986FEB23B4FB1288B512538 /* MJRefreshNormalTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = BF48EC27DD64ECC464ACB1471E51E2EB /* MJRefreshNormalTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC99EADD6CA621D15EE88F4124E03F67 /* nwise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D5CC7490D18D68B024892F6BD86A7B6 /* nwise.swift */; }; - BCA597780C9ECA993B3E2754BE10BD91 /* TAAnimatedDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = F8E0F9310F8F3E8573FC448EDC98B78C /* TAAnimatedDotView.m */; }; - BCAC5285AA980D6A1970FD5B675BE970 /* libwebp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D7E275A9F465A83ACE378819BCFC362 /* libwebp-dummy.m */; }; - BCB96268C31A7DC83278A57060F1C1BE /* PropertyWrappers.swift in Sources */ = {isa = PBXBuildFile; fileRef = B26E10D04B2569140F59199A5C55C891 /* PropertyWrappers.swift */; }; - BCDAD53CD04F72114FCCBBDAE04D98C3 /* AnimatableSectionModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B13474C01D1C0B90896134215E5A5CEF /* AnimatableSectionModelType.swift */; }; - BCDC570FFC8ECF182211F38D61380307 /* Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87ACE2C6A3A01ED7E5CD2D9E5B2B24CD /* Empty.swift */; }; - BD0554EA3BE2DF1255C6EE1ABFE654CE /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 094C71050294A146BB656949DAC3B8D6 /* SkipUntil.swift */; }; - BD30193C1E3D7B1F17B1B1F3F08BE655 /* UICollectionViewLayout+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F9DAB514C5BF79351540417F249261B /* UICollectionViewLayout+MJRefresh.m */; }; - BD716C672AC697BF23137D2E8E0F04E5 /* AnyEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2BF88E4E6955245A365CE72B7B29331 /* AnyEncodable.swift */; }; - BD867501B9A45D71635E695B52E57BC3 /* UIImage+ForceDecode.m in Sources */ = {isa = PBXBuildFile; fileRef = 872036297568467805CDE1401346D2B1 /* UIImage+ForceDecode.m */; }; - BDA5C7CC91E86448237CF40954FAC5AF /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C04BCB613C18841E80E12AD65B54EB5 /* ConstraintMakerRelatable.swift */; }; - BDBD6CA03A46A81DA14E6D71A58C762B /* DictionaryInitializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E5D68AE59A4587387B9319DF7CF3358 /* DictionaryInitializable.swift */; }; - BDCA442F91AB58B88ACB311DF4A4B6EC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B9B2BED448FF6B8E278E87D6D430A3 /* QuartzCore.framework */; }; - BE05FF3437D5037E064F74C06AF9299C /* IQKeyboardReturnManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC48A026B01DBA97EE27FE1A72019A8 /* IQKeyboardReturnManager.swift */; }; - BE166E4649CBB47AD13D7ECE120B756C /* ElementAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = B32EBE3B8C04AA6B4171868801375329 /* ElementAt.swift */; }; - BE36C6B3898E3E82A7881FC4DE33A115 /* lossless.c in Sources */ = {isa = PBXBuildFile; fileRef = 924741FD99920A8D329E493A5868847A /* lossless.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - BE3D084BFA4E05F1BEB1E1B5264C965D /* UIImage+Metadata.m in Sources */ = {isa = PBXBuildFile; fileRef = 27D9BE3D24E10967CFE1D61E94371D91 /* UIImage+Metadata.m */; }; - BE84D546F834D2102993E61B0D2997FF /* SGSoundEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 612B3D3A7C5E1084E5EF5EC8A5C44A27 /* SGSoundEffect.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE8527AE8767A7B99250200F93B54A02 /* OIMSearchParam.h in Headers */ = {isa = PBXBuildFile; fileRef = 54840BCE2FF7D34360F15C8D7EE872EC /* OIMSearchParam.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BEC53EA209B4092B02F378CDA0345F24 /* TimeStructures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C26C5D03455E309DF3A4CCB403C5CB1 /* TimeStructures.swift */; }; - BED118EF040F7D9B701E1749380AA3FC /* OIMPictureElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E2F7CCC851477208D59289153C67F97 /* OIMPictureElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BEE2FE4E2322B71556DF0C94E641E84B /* InfiniteSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = D73E24376EF4CAD3A86EF871E59DA6A1 /* InfiniteSequence.swift */; }; - BEE8E9644E23F619F7E3885D01D9F8BE /* SGPermission.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DD2273F4ADC8FF6EB64FA7E9A31E108 /* SGPermission.m */; }; - BF0C3D2782FE1425C2F1F8827132A94B /* MJFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AAC2C1B32FB6621960C9A8DA2B3F93B /* MJFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF1AE4D97E813B95C43EA4A298B973D1 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44AA35264925F43D3EC251BF229096B1 /* LayoutConstraint.swift */; }; - BF22D137EF6324675FA50080C5D93C00 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35E8846F57F00F87FD95FD897542C502 /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF5243244DA073DE56BE0B098B12E015 /* CachedImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36F5425BDC1B6DC62C60458D483CDA77 /* CachedImageProvider.swift */; }; - BF925AAB97F5FFC66B472FF8B068BEFD /* DotLottieCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = FFCED4E784FD6B990CD666FDBBA0A426 /* DotLottieCache.swift */; }; - BFBCF008C63FCC212437B59E8146181A /* VideoEditorCropView.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED63C76DB0E4B5BC896EBC92A06916DC /* VideoEditorCropView.swift */; }; - BFC91BBC42B944C2D7117AC8DEB6E364 /* DDContextFilterLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = CAE3B4042285FE77961E90A1CFBB8D5B /* DDContextFilterLogFormatter.m */; }; - BFD960743F2B1CB1FA7B3808284DE99F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; + B3EC2DE8A5B6FAF5ED30071E4A3D9BE7 /* DataRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A22DBEDA2395191F537EFCBEB528C98 /* DataRequest.swift */; }; + B3FCB3CE60F4C86B4E560EC64D1DD97E /* DidSelectProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1238DCD625C5D81AC5BBEBBA05973B84 /* DidSelectProviding.swift */; }; + B3FE6E966F4807E217609F2F1BD307B2 /* DefaultAnimationCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0D804C76B78471CEB59B3283599A1A /* DefaultAnimationCache.swift */; }; + B4834C595092A16BC05744CB4D7E6CC2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + B48A975992E58328254C494F133DE467 /* NSObject+MJProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 69B4A7FF944AD82C79E440C8DF908199 /* NSObject+MJProperty.m */; }; + B4B5D09B6C943A88805B18833A836718 /* YBIBCopywriter.m in Sources */ = {isa = PBXBuildFile; fileRef = C677F1F6911AEB8A0B1C0078557F254F /* YBIBCopywriter.m */; }; + B4DE36E030A0E5870E03A7BBD5B6701F /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C577C2D8E39F304146E0343775615D10 /* Queue.swift */; }; + B5093BCC34D41354EC39E646BF28D580 /* Observable+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071040A220C8B1B13643EADE3387CE25 /* Observable+Bind.swift */; }; + B52287026E457779C0D5D379252381D4 /* VirtualTimeConverterType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8C4C72BC795A5A37AB73555B0E71B23 /* VirtualTimeConverterType.swift */; }; + B5467510620EC8C411023B2C49B040BD /* YYImageCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = EB4B6E74F07CE1CFA6740CC7367A9A59 /* YYImageCoder.m */; }; + B5556D21308AA5BA79A0624047839955 /* InfiniteOpaqueAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1114FFC890A3B15EDE446EAEE06B9F2 /* InfiniteOpaqueAnimationLayer.swift */; }; + B5858E60C0045D05C618A1007ED5599F /* PhotoEditorFilterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81270878AE486291AC7784104E82FF1B /* PhotoEditorFilterView.swift */; }; + B59E167A7323D3F0E727AAE4417ACA03 /* Entry+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3ACFB997E95585F568A813FF855B02A2 /* Entry+Serialization.swift */; }; + B59E60FBC9665FC1061B88B8E6FD9FAF /* Masonry-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CE033DD89D2C7F468E6CF4145EF8AB3 /* Masonry-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B5BE51A4B56D53A453BF0090448E8CE2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + B6456227FD0D52F4612587F38FE03104 /* KeyedDecodingContainerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88405DE450E285D5F5B8F3AA9747866 /* KeyedDecodingContainerExtensions.swift */; }; + B666FAB7B1025CBABB994FABECC3E75A /* DotLottieImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 992563FFA7421581C3FDF8EA91BA1F9C /* DotLottieImageProvider.swift */; }; + B673D2E104D413AA84CF2924084B4596 /* OIMQuoteElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 935291735FD863A36C3BB6A8BDF7A2F9 /* OIMQuoteElem.m */; }; + B680C2604BD8BC9644AE7C67BC46B9BB /* MASLayoutConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = 082BB2C211CC761AE7176E1C91AA3E68 /* MASLayoutConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B6B29C558DA1B544550B5C1985FBA705 /* SDAnimatedImageView+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 87CF4E5FA9EF74820C9D72AF08A6E3DF /* SDAnimatedImageView+WebCache.m */; }; + B6E41B29F0070DC15F62FD34A8DFE647 /* KeyframeData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 826DA11AB28DAD5B0EB7826B29CFC100 /* KeyframeData.swift */; }; + B714E9245E38008BAE86E8DCE9852153 /* IQTextInputViewNotification-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 997167D7CBCAD446D8B3CDD072502918 /* IQTextInputViewNotification-dummy.m */; }; + B7411DFB7E022539E8D860F784CE165E /* UIGestureRecognizer+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C1D497158B767F77BFA5E0748C677F85 /* UIGestureRecognizer+Rx.swift */; }; + B77AAFFFDADFBD968027A516A913C2A3 /* SetBehaviorsProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0EDB4D93155CAEB727C0AB45713F6D5 /* SetBehaviorsProviding.swift */; }; + B77BBF03AA212B2E36FF222796FD5A65 /* BooleanDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A89F0017E752468FC04ED5B3CB8071A4 /* BooleanDisposable.swift */; }; + B79256A42976EC65C45648B7AE06478C /* IQKeyboardToolbarManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6A149B6BBD06C2232430F6ABB7B1407 /* IQKeyboardToolbarManager+Internal.swift */; }; + B79597B425FDD864097AB365CE8E43D8 /* Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27DD104205E990BA251147A8755AEFCE /* Zip+arity.swift */; }; + B7C57A55A892301550A7BEFF1C9E6754 /* YBIBVideoData+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = EA7C9A78827F0C1A7A33C41BAAE00C77 /* YBIBVideoData+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7CBF06317A4D75FAB6B9A0E9463E6A0 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0E1989088B503751B4F0FDA7441A4656 /* PrivacyInfo.xcprivacy */; }; + B7CD4F8DF0A1CCC8E238605BC22C053E /* SDWebImage-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D2C52DC8C30B74D4C622E1D2D88BAE /* SDWebImage-dummy.m */; }; + B7D4A8BCA9A76AE4952E96EEAC908D20 /* cascade.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57E872926A9F0A58259D98D0E6C8AD28 /* cascade.swift */; }; + B7F113A612A1048CDC190D435D1F7CE1 /* Skip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B9D8C163A245DEBF92CAC1EA5471D36 /* Skip.swift */; }; + B7FB51D80B098D03F81DF426A2F80142 /* TargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = B583A8D3B15E63BC12FB32D1F96844FC /* TargetType.swift */; }; + B8541120F3126DC519E6E26FD850AAF2 /* RxCocoaObjCRuntimeError+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41497B385EDAC9F73A4855C08692FDB1 /* RxCocoaObjCRuntimeError+Extensions.swift */; }; + B86CE44BAAF1C2379BE06AE0C9C3835A /* SDImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 930A966769BFBCE4E38BBE706B3106C9 /* SDImageLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B876DC1AD722CC2597B54B608293FA84 /* NSButton+WebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 365D92843D9B2C992588045959368206 /* NSButton+WebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B89593FC8F1FD6132EECE6FF20013CBD /* ObserverBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8CF20E73C6434D4119C8CA90DE8CE77 /* ObserverBase.swift */; }; + B8F36C55BE219F6B7E9960D5580C72B6 /* upsampling_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = D330042F8A70A7845C60AA7BDA165452 /* upsampling_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + B90209EF771CACC6796001936D684F96 /* ViewType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C36DE6C3FC332032CD0B60D0BDA7563D /* ViewType.swift */; }; + B903049E7C1BED7918DAB208754107C7 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA81E3B3EDD71C5E60450FB07D07DC17 /* ConstraintMakerFinalizable.swift */; }; + B924B23E166C657CD6799A9ED008E55D /* SkipUntil.swift in Sources */ = {isa = PBXBuildFile; fileRef = D27DD767F6F3E75D625CE059F48E6518 /* SkipUntil.swift */; }; + B94F1F1193404C2E45C1E34D1745406A /* DDASLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DE06532E7C05F4532ABBECA80B3BFBE3 /* DDASLLogger.m */; }; + B9AD528414906CA2F7EFC29C105A4835 /* YBIBScreenRotationHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 0EE24F78A7AEEC8FF75CCB9FA0A47036 /* YBIBScreenRotationHandler.m */; }; + B9E2DC5B8A62D07383AE695D13A30CBE /* OIMManager+Conversation.h in Headers */ = {isa = PBXBuildFile; fileRef = 387A1E82C97FC165F805C0A885316D08 /* OIMManager+Conversation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BA2FB695DEB0D179253EEB8DFCE3578B /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 02E757561295961F2661E2AEDADB230A /* SnapKit-dummy.m */; }; + BA47662F9A5020F099D17EA1CADB05BE /* huffman_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B59F6D2D32C4EEE3ECDEF9CE11B50D4 /* huffman_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BA76235961947F402695F8A346265B6C /* FramePubComp.swift in Sources */ = {isa = PBXBuildFile; fileRef = C093540FF30E4F3FC0F5546E3FA8958C /* FramePubComp.swift */; }; + BA904ABA8ED36CC4E5EB2B2004CA1F18 /* MASCompositeConstraint.h in Headers */ = {isa = PBXBuildFile; fileRef = C31A05C7D26DBD0A551AA3C91D73FEFF /* MASCompositeConstraint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BAAAEEF4190DC0417746E6F71736409A /* filters_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = C4822263D21DDDA08A1EF2995BBE39B7 /* filters_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + BAB98DDCE1A65F6F377E0318A4782874 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + BACE03596343C2C83670A3996164D2F0 /* RetryPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FD67ABAAE7C891D12DD57D0E9D1D83 /* RetryPolicy.swift */; }; + BB1AC47D956946D637412FF465A81839 /* FileManager+ZIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 524B28EBB88699EA3D332A42A3619B8E /* FileManager+ZIP.swift */; }; + BB2655E6FFEB70EAD084C745DA7D46C2 /* ValueProviderStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39139551D157EE1146CC15CFBEAFC945 /* ValueProviderStore.swift */; }; + BB6E8486F92FCD3E177730B8E01D0BDF /* Bag+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD45EF31979AA82A13DD5D21DD34ADD5 /* Bag+Rx.swift */; }; + BB8854955B704BFF79EDD38538B9568B /* OIMManager+Login.h in Headers */ = {isa = PBXBuildFile; fileRef = A8E0AFB41829ABCBA41B2E4A12FC1FF8 /* OIMManager+Login.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BB9663727F1154B67FE78531F9D27411 /* ThreadSafeDictionary.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58040DF6D7E6F543B8DB10D3E910311E /* ThreadSafeDictionary.swift */; }; + BBF31B50E3CEE27B78E54554DDA3052A /* TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = B92051DFD1B8964C84F2CCBDEA5D52B1 /* TestHelpers.swift */; }; + BBF958606E2F274F7FEF9F54B7A8308B /* YYAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EC813ED21BF52910890B2D6E3F54ECD /* YYAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC0830F2A2C68B289F2B438F1E3A9FA9 /* upsampling_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 055298DA034E8AA9E33D79D490271D2D /* upsampling_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + BC2F9B1D6986FEB23B4FB1288B512538 /* MJRefreshNormalTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CF92AF5D8DFCE759BF000B71F0DA02E /* MJRefreshNormalTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BC99EADD6CA621D15EE88F4124E03F67 /* nwise.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6153CC74CC2C4EA27387FCAB1619F3C /* nwise.swift */; }; + BCA597780C9ECA993B3E2754BE10BD91 /* TAAnimatedDotView.m in Sources */ = {isa = PBXBuildFile; fileRef = 46401BF2160F11FED118E9A0C76EDE18 /* TAAnimatedDotView.m */; }; + BCB96268C31A7DC83278A57060F1C1BE /* PropertyWrappers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 836002A544C87F9B72FD7E93C2F30BB1 /* PropertyWrappers.swift */; }; + BCDAD53CD04F72114FCCBBDAE04D98C3 /* AnimatableSectionModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78C01105638592D5D6B38F6C58CC2EE0 /* AnimatableSectionModelType.swift */; }; + BD30193C1E3D7B1F17B1B1F3F08BE655 /* UICollectionViewLayout+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C7AF6A4A7D873A5927E9BB5781FC818 /* UICollectionViewLayout+MJRefresh.m */; }; + BD716C672AC697BF23137D2E8E0F04E5 /* AnyEncodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 365A6611E9FB12240170EE665EF48284 /* AnyEncodable.swift */; }; + BD7649E3EC6317949AFC2234998F0F91 /* ScheduledItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2ACDB20B7A0F28B516DC1D2EC6212E5 /* ScheduledItem.swift */; }; + BDA5C7CC91E86448237CF40954FAC5AF /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C17147FB45C2F91E3F4E0561AADD510 /* ConstraintMakerRelatable.swift */; }; + BDBD6CA03A46A81DA14E6D71A58C762B /* DictionaryInitializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B24AB5AFB6F42668409FB20FBF37EFE4 /* DictionaryInitializable.swift */; }; + BDCA442F91AB58B88ACB311DF4A4B6EC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2C997ED187FDEF21DB00D42F13F8ECC /* QuartzCore.framework */; }; + BDFBD6034EE2B4CBF1161BB7C5E9E6B2 /* dec_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 3D695561A56C2DD9E3D9132C6DF66CAA /* dec_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + BE587FAA51EAB21A65120F5FBB61AAB3 /* ReplayRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57392B079508E1A952EB83F397A6AD5B /* ReplayRelay.swift */; }; + BE84D546F834D2102993E61B0D2997FF /* SGSoundEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C5F06A8E927D1486C8E2BE4C3CEF5B2 /* SGSoundEffect.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BE8527AE8767A7B99250200F93B54A02 /* OIMSearchParam.h in Headers */ = {isa = PBXBuildFile; fileRef = D79DA9ED5F22B3153EAF6FB853B9ABCE /* OIMSearchParam.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BEC53EA209B4092B02F378CDA0345F24 /* TimeStructures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 15CF4020595F378B3FBC56EF16E33756 /* TimeStructures.swift */; }; + BED118EF040F7D9B701E1749380AA3FC /* OIMPictureElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C69FE3005EC8FA3F9D8FCEC50F6CC8 /* OIMPictureElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BEE8E9644E23F619F7E3885D01D9F8BE /* SGPermission.m in Sources */ = {isa = PBXBuildFile; fileRef = CF88F372EC85C9D417C7FD9226BE7F3F /* SGPermission.m */; }; + BF0C3D2782FE1425C2F1F8827132A94B /* MJFoundation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D7D7A97A7089AEDDA405B472981349F /* MJFoundation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF1AE4D97E813B95C43EA4A298B973D1 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBBBC8E8624440C8A9F3BC5407C904DD /* LayoutConstraint.swift */; }; + BF20215DA2E88848DEBB33D1A4CDBC32 /* ObserverType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D526378FA358EC2F96BAC5D581EFC75 /* ObserverType.swift */; }; + BF22D137EF6324675FA50080C5D93C00 /* NSArray+MASAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 130A9347ACA3AD097CD3B70D8B774B49 /* NSArray+MASAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BF5243244DA073DE56BE0B098B12E015 /* CachedImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD86A09242BE8D4BF03B42D158E5C0D9 /* CachedImageProvider.swift */; }; + BF60F24164C7F3F7FA05A86398D9D967 /* PrimitiveSequence+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BEBC5BCFD6362440D9D4603E86772C0 /* PrimitiveSequence+Concurrency.swift */; }; + BF925AAB97F5FFC66B472FF8B068BEFD /* DotLottieCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94C3D7F5F5DD3200C6843026A2749F7E /* DotLottieCache.swift */; }; + BFBCF008C63FCC212437B59E8146181A /* VideoEditorCropView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06875FDB4D66D9C998AEF230FEF92724 /* VideoEditorCropView.swift */; }; + BFC91BBC42B944C2D7117AC8DEB6E364 /* DDContextFilterLogFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 1692A7D7BE4DE1B7E024C490612EB31B /* DDContextFilterLogFormatter.m */; }; + BFD45DCF81CA6FAE63F89D08066830EC /* IQTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF134D80E9619348A65BBB751BB70BBF /* IQTextView.swift */; }; + BFD960743F2B1CB1FA7B3808284DE99F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + C00938977A12337E087F0515C3F95647 /* quant_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = C30C54F5FE080C171CB0A8068F86BE2F /* quant_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + C00F636B88A0D45DDE34552361077A86 /* Using.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8260423FE880738627BA58E39088AE6C /* Using.swift */; }; C02CB58228C5C63ACB718E85C69AC71A /* lottie-ios-LottiePrivacyInfo in Resources */ = {isa = PBXBuildFile; fileRef = 62060F5D524AE8173817ADD9482A0FEB /* lottie-ios-LottiePrivacyInfo */; }; - C06E2597B414ABD8F769C8BE7E132DF3 /* ObservableType.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD4BBD0CD593005DCB8ECA0DEAF875E4 /* ObservableType.swift */; }; - C07CB3E9A4D1BF00F841E4285629A2B2 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85DC559A3ADB0AF3A0CC24573A6D4F03 /* ConstraintRelatableTarget.swift */; }; - C08BB02A69A559B80327D76DE7B45BA1 /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 38A2C4F42AAAE1661BF9821201515A70 /* SDWebImageDownloaderResponseModifier.m */; }; - C08F4B423A39CCF69136F7ACFA5FFB4C /* Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C66D833F862144506D82243BC20CBC /* Driver.swift */; }; - C09B37223BCC5B22BF7B29CFB1C68F8B /* RenderingEngineOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BB44B5239CC920575CAF69072F84164 /* RenderingEngineOption.swift */; }; - C0A27AF8E1BA202D8015FC341C905C25 /* SDCycleScrollView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E058257A7D0F02E7FB8985089EEC6E1 /* SDCycleScrollView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0AD493AE4A8DC8FF960D753D6D971E3 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C1D99CE01FB6BB6346D7EBEF5BF9DFF /* IQKeyboardManagerSwift-dummy.m */; }; - C0E5BD34620B57EC98C5ADD30CD3D01E /* Trim.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340B01518155A1C6DF9490C3B5583041 /* Trim.swift */; }; - C10B1478C4AB3693D886D94ADFAEFDFB /* KFImageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDD4EA270A2514B7D7491E50CF6BA4B /* KFImageOptions.swift */; }; - C11354C639B096969AAA9734F14D0836 /* _RX.h in Headers */ = {isa = PBXBuildFile; fileRef = 75AB146FA8EACB2D7B8898EDB3F75A16 /* _RX.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C141940201901A38A684AB8A2426F099 /* YBImageBrowser.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B7DD4E4308B543CDB2A0B96FD8FD5AD5 /* YBImageBrowser.bundle */; }; - C14F10B663FE2898EACAB90C202B3F50 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C17C21B8184E139AF017777649C7942C /* ConstraintMakerEditable.swift */; }; - C1860BBFD363FE0FDB416A80F004718F /* LayerTransformNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C415CE5B3DA27754A005F1E2626DEB /* LayerTransformNode.swift */; }; - C19F5F3FD38FA35CAA4915D576E7761F /* Core+UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67BB983FB1DF61CE58E767CA5AACA670 /* Core+UIDevice.swift */; }; - C1A5F0FC8A3482F772329209BE755714 /* CoreAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 687267D7FB090DB33AAF5A62DA1D0495 /* CoreAnimationLayer.swift */; }; - C2068AEACC2D9C7F1FFE41AA25B12A68 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CA207F1841764F2BDB2505E309C0D98 /* MASUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C20ECE96A97688090D5FE186DCF7B5D9 /* IQKeyboardManager+Resign_Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5400BB1D506451A1F627BEE91353F39 /* IQKeyboardManager+Resign_Deprecated.swift */; }; - C22290501532385B349FA0DA58710DB9 /* AnimationSubview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 522FFC7277C7384DC812F49DAC6A2BD7 /* AnimationSubview.swift */; }; - C22DBBD7FBFD295C00185B5F614B74B7 /* thread_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 56C83FF28405BC4C60D1E897F48C954F /* thread_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - C2504EF0A847BB416ECE80CA2F9BC2ED /* lossless_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 65CC9309308C3EFA965298882EABE106 /* lossless_common.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C278A03B4975812C48A280BA391C23D9 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD26ACB38019F95EF4C9767072D150E /* Data+Serialization.swift */; }; - C2A21354D5DB755E780A9ABC1752E74A /* PHPickerResultImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64F41A2745AE91DEE1543DBD286390F /* PHPickerResultImageDataProvider.swift */; }; - C2CD0223F067656A2FC851B7612916E2 /* YBIBImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = E0979D045CAFD37581816EC0C09D3F4F /* YBIBImageCell.m */; }; - C2FE60A10C792613E45031AE6E851ECB /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 91E03E21D00A0CFC8BB4829B9104C22F /* MASViewConstraint.m */; }; - C2FF0AFBB1853A8459AC0432E6AD85A0 /* URL+Moya.swift in Sources */ = {isa = PBXBuildFile; fileRef = 571DADB16DAF9DD3606BAC0AD82E99A9 /* URL+Moya.swift */; }; - C303A4E0C86C512F7DA7A841C5BC000A /* LottieAnimationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC7510690F9C1195797935F509A996D /* LottieAnimationView.swift */; }; - C324848DC9989E558C88F00CBF82C95C /* DecodingStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86CDC89A868B6D3092C6F3EE456FC553 /* DecodingStrategy.swift */; }; - C3297A7121B4CBEBBC8FDAD4279118AD /* LottieViewType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C664CD013CBAA23F9525F2EC6C50AC09 /* LottieViewType.swift */; }; - C36F0742777344AE9C9EC5B393E39A66 /* PhotoPickerViewController+SwipeSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCF8F600071E7B3102920CAB6FF48BAF /* PhotoPickerViewController+SwipeSelect.swift */; }; - C37E014356FAFD96EF5488586DBD6E11 /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DF51400637F64015372A2214FB9C7DBC /* SDImageCachesManager.m */; }; - C387C8843E8133D38863C2B409539913 /* PhotoEditorMosaicToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41F90D943D1430057060CE7D0D884CEC /* PhotoEditorMosaicToolView.swift */; }; - C3A2D804B1EF219B56E7EA71585CB148 /* NSButton+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCD3A21323E36012C189C0952F31DAE8 /* NSButton+Rx.swift */; }; - C3DE4CA7617C9BC6EB538E0A23303DBC /* DDAbstractDatabaseLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8062C80A2CDAA60C796028D49DDD5B04 /* DDAbstractDatabaseLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C4005FC583ECAC0694F5042A24F8B663 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C77D66DCCBD20AA11966F53C867FF4FB /* Accelerate.framework */; }; - C405A16EDD5CB5C1FC7EEA7856D73DAC /* PhotoEditorViewController+Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8203A43BF6030189020CD4BD6F61CE28 /* PhotoEditorViewController+Animation.swift */; }; - C41750A380D75A5B08EB714F5236FF0F /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B05BAD2FED8BCAA8BC346D23A2E4C934 /* BaseViewController.swift */; }; - C437FA9AF753C87C55F0849F7E1E176E /* UploadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00F55D2694BB24CBDD85533DCDB7FC2F /* UploadRequest.swift */; }; - C462F17EDE150EF6837F0524C632A64B /* YBIBImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B2FF70490B2E1F91F3313E405F04F864 /* YBIBImageCache.m */; }; - C46464010E864ECB7A1F16073A402380 /* Optional+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 345CFF4C2DE56AFB5B6B340E3433F8F5 /* Optional+Extensions.swift */; }; - C48A9E2CABF2ABD7D954BC1FBB6D3C77 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DAF97AA6C3E4088F2E9F27E50E1B400 /* RedirectHandler.swift */; }; - C4CF908B22439772FC5FA601B3C481B2 /* AssetManager+LivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DAF66AF9A10C8CE260ACFC74496E828 /* AssetManager+LivePhoto.swift */; }; - C4F42EBCA4302C49201476B324A8E679 /* TransformLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B281FF7A2ADCDBC7ABCD018AE61A7C48 /* TransformLayer.swift */; }; - C50703A0335F75D79E28A40A1A533D8B /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84364ADC8106E744D74626D2D0AEC0B7 /* MobileCoreServices.framework */; }; - C51F243E04F7B1B1D8B6A0D8B5E5B940 /* EmptyViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECB898FD774D9886C3F4389AF60B275C /* EmptyViewConfiguration.swift */; }; - C5320CD53E83230B2207534005DDD183 /* SDWebImageTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = 57C5F40A9D38F5D71424CF3307F62112 /* SDWebImageTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C57B18D85E8D7A47D74E16B95F37C88B /* once.swift in Sources */ = {isa = PBXBuildFile; fileRef = 705E874F6D90A41BB91F8827850D08E5 /* once.swift */; }; - C59E3FD52D5408C08FDC0E6FE6266C3B /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A9024578942964BD08F0109992B3280 /* Source.swift */; }; - C5C81E89EA185839DE018B2C1FDBEF37 /* TimePeriod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 533D9571D1EC332BF0EBA2C3A4F8E994 /* TimePeriod.swift */; }; - C5D1719D9646B00FF98E064E46508BE8 /* HXPHPicker.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 02DBF5316B8E0D522ACE204CE91F2E5C /* HXPHPicker.bundle */; }; - C5F059E06474BFDCE4964679841A8484 /* CGPointExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAFDBAA1B3E4639B806A656741AAC875 /* CGPointExtension.swift */; }; - C5F4341339351B5E870AECED2E537EE3 /* UIView+IQKeyboardExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7FD01CF991B2947E8743F34F758F00A /* UIView+IQKeyboardExtension.swift */; }; - C60DB44F719853DE3B7157960DAF9270 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = FFC1B522A7D474FA4DAA6C62A6BEFB3D /* MJRefreshComponent.m */; }; - C6728BEB2195DED53EF713DB08BF8166 /* PhotoEditorCropToolModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F982914D28918E5ED7DABBD318AB9CC /* PhotoEditorCropToolModel.swift */; }; - C6A4302ACE006C4E2CDD481287E2916B /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80DEFE3B1718E8C2DAB2BE3561944DAD /* Typealiases.swift */; }; - C6E3DE7ABFB88E546E2A83435E48ED44 /* cost_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 1C65529B177CF37DE07312C17C19A0D6 /* cost_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - C6E542DE6D61F7CD41340049F2D8FFDE /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 728805FD0FBBD9E7F0C8D7E8AA79948C /* AuthenticationInterceptor.swift */; }; - C6E75AF470A88DCA0D63040F5F34879A /* UITableView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3911F180E1B0182AC1A84D0FE3E4A4B /* UITableView+Rx.swift */; }; - C6F35BEA16F9EEEA1297311E01100AF2 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8217A6F4149F4322FC3BFDAF3B20D784 /* Signal.swift */; }; - C6F45595676957ADBEC18EB3F23EAEC4 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BBC5AF8C3A9691541305496A8731034 /* LayoutConstraintItem.swift */; }; - C6FBF1708A9597C929A9848E48F3EF26 /* TextAnimatorNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5110D595F02FD67EECD601B158E606C1 /* TextAnimatorNode.swift */; }; - C71F72A5BEA7E7E2DA06517FD28CD703 /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 11E4FA4C2B1EA9C47652450BD97F5DAC /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C72F37CACEC780E304BA0B9D1077EFCC /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = A57FD2A0791CC337715FFD68EBC59025 /* Response.swift */; }; - C75A276978CD42CE5FB7F99244E07808 /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889EAD92A301DE400B16BA95A2544CF0 /* ISO8601DateTransform.swift */; }; - C75C0D0545CF6B8B2A4B51DB97C57561 /* SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93EAA2A959A3EA70624A72F2FB588943 /* SwiftDate.swift */; }; - C7715123861E25EAB3E44E72397CECE5 /* CallbackProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 56B8A080F84269FEB98617E83C0454DC /* CallbackProxy.m */; }; - C7C6F1AD0C44C79C4A3416FCB32B0233 /* IQKeyboardResignHandler+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A53DA679B0F0E0C5A4B89F6FDDADC73 /* IQKeyboardResignHandler+Internal.swift */; }; - C7D693676710714878F4633AE77C881B /* OIMUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = AC8A56E876CE12D362A2C2E78A8D3CCE /* OIMUserInfo.m */; }; - C7EFB87F8415D2B0D1654745230578AA /* URLMatchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DB6990AB0882562E03133DB23E906A8 /* URLMatchResult.swift */; }; - C81D645A697C6B9782CABFD8F06A93BF /* RectNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A5D9C68C0A84DD8FEDB37BAD59E8E7C /* RectNode.swift */; }; - C833FA17344A15EA1969FD585E7F4970 /* RxTableViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85AB9F198071F4FFFD3967362E9EDB76 /* RxTableViewSectionedAnimatedDataSource.swift */; }; - C84BF5FCC4846F6CA4C505BD25E266C2 /* quant_levels_dec_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD95C19D05E5141AD09F08757FE2699 /* quant_levels_dec_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C85231B99C1BE80767753C368304A730 /* DateInRegion+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C22CE4CD1F8C21C3216ED7B7D0E2880 /* DateInRegion+Compare.swift */; }; - C857B8D2D0BAA5A8A764F9E1C4B85807 /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E9EAC640CE6D964C3A01D2AD0D9CA661 /* ViewController+MASAdditions.m */; }; - C8EC35DFB0945DBE2F2FF9ECFE6D9711 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = D2F6C3141B01558E41612E3CB9A5B3F5 /* NSLayoutConstraint+MASDebugAdditions.m */; }; - C8F8EF7F872F391808687A0875D07F23 /* vp8i_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F733D4160D39073D45BC056455B855F /* vp8i_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C937AC5DC84D468EBAB678025048B400 /* OIMFileElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E23A30B365807329D25B8ECAF0D6DF3 /* OIMFileElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C945CB4EC42271D435BF23E7749BE6BF /* IQKeyboardConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D7480D6550C594F75C2C72FDFB92E91 /* IQKeyboardConstants.swift */; }; - C95C753AE30159950F8DB7308DDF77BD /* MoyaProvider+Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 100BB5555346B3CAD8AB3EEC096C649E /* MoyaProvider+Defaults.swift */; }; - C9DC5FEA2934DB98043A547AAC973C97 /* CameraConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6268CFADCC4FF23E0CF60396A20648CA /* CameraConfiguration.swift */; }; - C9E19D164C26414115CC969ED9A303C1 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 73AAE64514CF9375B037045D901E983C /* MASLayoutConstraint.m */; }; - C9EBE0AD508E6B3A780A8FA0DBC68427 /* YBImageBrowser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C537FE6F5932E4CC8555D24BCEFB66D /* YBImageBrowser-dummy.m */; }; - CA05084D970F9A48B7EC4F8027D386AB /* SwiftKeychainWrapper-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BA8CD97A30916CD9C77856C59D4A8993 /* SwiftKeychainWrapper-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA140EEDBA04CCD8B9024CEC07C84A37 /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = B27D930CCDFA0E100210ECA696F0A212 /* CompactMap.swift */; }; - CA1CCD9DEB99136EDB8B3D33285BC802 /* SubjectType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A746BA66E73C424E8AAAA83B4F93FEBB /* SubjectType.swift */; }; - CA1FC14C840300F053C820C135E43161 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B9B2BED448FF6B8E278E87D6D430A3 /* QuartzCore.framework */; }; - CA27CEC4815701402243AC17FF3D8209 /* sharpyuv.h in Headers */ = {isa = PBXBuildFile; fileRef = C2EBA132392950FF3765D57D57796814 /* sharpyuv.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA31FEFC92EF7C84991037F938677068 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F7376569D3C3F89560606F792EFCAE3 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CA4CC5E18364E775EE169E4EE7A86FE7 /* yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = A95AA6726D0817E43DE36A9CDFFAF8DB /* yuv.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - CA535DB1DBA1F7EE58FEC1A282360FF8 /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBF5747CA453C4BA37E67B413EF9E878 /* AsMaybe.swift */; }; - CA5FA2BC7F938675BEE80B531422ACDA /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51BA12DF890414FF3DD09E9C68FA652D /* AssetsLibrary.framework */; }; - CA84D49AD6BC133A4CAC8238DC52E971 /* RxTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 059A00052A1FE8803E236797E5854769 /* RxTarget.swift */; }; - CB16D0B14DC2C1B1600F20B5AA3A7249 /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06EE3D85DB7CA93CAA94FA29AE45BFDF /* Observable.swift */; }; - CB25521BB6A401C4A6753F35624E179A /* mapAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 986D3638256A93D202D509D2EA916718 /* mapAt.swift */; }; - CB556EC39E590FCB9AF7EE22F5877FF9 /* DropShadowEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6A1B9FE2A7F11E3B46CD429C4BA078D /* DropShadowEffect.swift */; }; - CBC092378ECE1466F7B48E7DA94E8F32 /* SDWebImageOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = D77A6E5E115865516443F9DA796B6091 /* SDWebImageOperation.m */; }; - CBFC7E7CC7AA70EC3A3635B0727979C9 /* SGSoundEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = C8317EDB1958C164EFD8B633A18F397F /* SGSoundEffect.m */; }; - CC2CEFEFB392E2AA75040A63D04B2400 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 831ED1AC3678AC789F64583BA59A14C5 /* Atomic.swift */; }; - CC63E9DDAC7230E3EA8ECB73B9E0DA13 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE8173DD24489D8BFB8A788C54567E2F /* Filter.swift */; }; - CC70B453E389190B300C8CB7AB6A788E /* RxRelay-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DB08296A6F18F928A00EC7AFDB47E3C1 /* RxRelay-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC8416A27D23F24BCD2E857BE0F7D050 /* Vectors.swift in Sources */ = {isa = PBXBuildFile; fileRef = E31B8E2DE2928272DE12C9F3AA9BF334 /* Vectors.swift */; }; - CC9889C11425435533883AC0C244153A /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FD85B1B451A0D803EAE3B5FA0006115 /* Materialize.swift */; }; - CC9CBC1F47B2FBA33DD0203ED7E1CF6C /* OIMMessageElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CF512563DEBEF3926ED04F7296DA8B0 /* OIMMessageElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC9E38183A1E0569E132A6DA920A9E48 /* SDWebImageDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = F98D9C1BCC770B8E7D5CE310E26D0F4D /* SDWebImageDownloader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CCBBDEEFB29B358197D273C27B2FE6EC /* PickerTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC0ED2914A2752C49E36A33BF535265E /* PickerTransition.swift */; }; - CCCF77F411C28C0C0D8B6624E4ED184B /* GroupedObservable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EFFF31201EE4BC724B9C92EB8A90677 /* GroupedObservable.swift */; }; - CCCFCDB26235AF88D2796246E5CF01E9 /* KeychainWrapperSubscript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5761947A8E5C4B96B80D8634E5181BC3 /* KeychainWrapperSubscript.swift */; }; - CCF13D8B4B07E8E4495DAB63FD02D402 /* Signal+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = D63215EDBB31AA1C7927001384586CCD /* Signal+Subscription.swift */; }; - CD137CB9D84195D6986D97B2534AE8FF /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0C85E19DE72AE17DD1F8E275523B4BF /* DefaultIfEmpty.swift */; }; - CD925EE71D8E482E486D2E5AEA77E0FD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - CD9E606578C993F9315256561691A76F /* Core+UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D0E6975AA68BF82B50479B31188714 /* Core+UIImageView.swift */; }; - CDBE2CF1ADA30DC0A71C28250D08EA42 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - CDD07E44801C6B18EC5FA656DE04091E /* SubscriptionDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F425869866B28E3E578068ABC712AA7D /* SubscriptionDisposable.swift */; }; - CDDB6156405F579B06D7A801C664D48E /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 937ADC586D7A9572D0499B091531BB27 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDF42ED6AF2C0252840DF2A724375380 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66632D9CC4BD0C730CF397F56806EA89 /* SessionDelegate.swift */; }; - CE57985823A81264B942F51EF4771A86 /* URLMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DAE16684B183BA733C62C1A5D862E6B /* URLMatcher.swift */; }; - CE58C177ED6AD34ADB5596F4FBBA0A0F /* common_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A1873E1B4111D07E4764F077BE2840 /* common_sse2.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE593943A9E7CF83822CF60304BCAD43 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 937BB6E663A5DDF84A196EB20804E1C1 /* ConstraintConstantTarget.swift */; }; - CE60029474DA7D27FF1CA1EAD1548E47 /* ConcurrentMainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F42F145897CD3CFBDA60FB0264DB501 /* ConcurrentMainScheduler.swift */; }; - CE7A7E5ED9E14B271B909410D101C483 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB7D268FBB10E0D836B97C3928B5321B /* Data+Compression.swift */; }; - CE8BB3B50C1DDEFF60DD465EABC40A50 /* OIMManager+Message.m in Sources */ = {isa = PBXBuildFile; fileRef = 41B686351F84A98FEEC222FA207E8D99 /* OIMManager+Message.m */; }; - CE9060F0B56A20DCF8151A74C7EBA537 /* TextInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E37A739569DBBD3BECE189F4986936E1 /* TextInput.swift */; }; - CEC0AC2A77B3F8AE285DCF61F2F46E5D /* NodePropertyMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 350390ECD2B359290A8084CB7DDCEF31 /* NodePropertyMap.swift */; }; - CECA8162BFE05143ECD1DE4225B82B9C /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = A91F2AA5FE62815A42F8020A333595DE /* CachedResponseHandler.swift */; }; - CEE4E58F8C30B928A9CB1C045F169211 /* UIImage+MultiFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 3081092804875B0A054049768857C958 /* UIImage+MultiFormat.m */; }; - CEE64CF0F327167627F8CC70A982EEAE /* RxPickerViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08050C89BDBFDA62A3F6EF30F6743FD6 /* RxPickerViewDataSourceType.swift */; }; - CEE6D85668589F0B8602190856BE1C59 /* AnonymousObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 829687B94722C4B27AE1F6A929C38A8A /* AnonymousObserver.swift */; }; - CEED6F206BAE30C78F98B47385609688 /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FE4D3EFFD11310558DF46FD1F4BC3E8C /* UIButton+WebCache.m */; }; - CF1EC62E8A77D354F29EE22D25829C16 /* IQInvocation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 750F89B19E3F2994003AEED155F64886 /* IQInvocation.swift */; }; - CF48E8DB6B85FEEBB58FB4AAD3F04D63 /* UIViewPropertyAnimator+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF168F773685B0F062B7011CD49245B /* UIViewPropertyAnimator+Rx.swift */; }; - CF4F390AD14CD99E57253BE9D96DB274 /* OIMFaceElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 91C802E651BCE006BD4115AB9D594543 /* OIMFaceElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CF5F437F7201F79D3CE3BDE9D879F3C5 /* Region.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5751CB4FB7042A2EF15A1E430570581E /* Region.swift */; }; - CFB40BBCFE9C4381E5B367D25AB33B2A /* Cancellable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB2959D3499F806D0273059BF3598F6 /* Cancellable.swift */; }; - CFBA04B4F951AC600813F7C6735C1A4D /* IQKeyboardToolbarManager+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67E2AB0EB78B87ACFCF842238DC339AC /* IQKeyboardToolbarManager+Debug.swift */; }; - CFDB27ACA68B4C18C6DC1E51998D7623 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = D33902803F47DEADED2DFA7B7C947887 /* HTTPHeaders.swift */; }; - CFEC116AEDE187E92C82DDDB62782D15 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 8839B71D73943CF891974FAA99B0A1FC /* PrivacyInfo.xcprivacy */; }; - CFF0F29D9670B80E247CF63035F01759 /* PhotoPickerControllerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A8670B27DF4CBC108E75715DC9B290A /* PhotoPickerControllerProtocol.swift */; }; - D02739628E3C87FA50F6BC94BD08C6DD /* Multicast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91FB2EE0D18C43ED23BA513E80509BEA /* Multicast.swift */; }; - D033FF8E0AE3251DE943B341D59D756F /* ImageLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F93EC958C215B385E15337C6289B91B /* ImageLayerModel.swift */; }; - D0382AAC74EAC957E55B1C0FAF9EC897 /* enc_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CBC7A052D892803E76D2FFEAC1C3E83 /* enc_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - D03BD90BE0856C6DAD452338935F1F39 /* IQKeyboardNotification-IQKeyboardNotification in Resources */ = {isa = PBXBuildFile; fileRef = 120BD4C670EF00F4D5A40AA4B863A7AE /* IQKeyboardNotification-IQKeyboardNotification */; }; - D04A7B430798BB15521E4D2DBF41854E /* SGScanView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6491D6CBC9BF383CD1D2778BB5EE5732 /* SGScanView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D05D499E426C4CEEAEA63704CF36569C /* bit_reader_inl_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F09F941B55860CCB56708CB4F1FDA5F /* bit_reader_inl_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D0BF696EF4334C8FBB5B80CA337FE3FA /* AnimationImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55FD0B6A9D6EEFE6A1C9B281B105F80F /* AnimationImageProvider.swift */; }; - D0D8491DF011B4E4EADEA80B20229F69 /* PickerResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA4B9D8BFF9CF3F65AD2916D9197DF2E /* PickerResult.swift */; }; - D0F33C234F469FDC4BB67C6651759826 /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1733D116F00BB7860C14898B3F57690C /* Endpoint.swift */; }; - D0F6FDC7286BCC69C228CD0FBB45B2A9 /* RenderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B10279D7918F58546A902DD776F193D /* RenderNode.swift */; }; - D11C5FB6E97D1D93FEB7C07241BCC721 /* EditorImageResizerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C148AA1C2819A5B7DEAC0ECF49DDB109 /* EditorImageResizerView.swift */; }; - D1B32297F53DAC71DC34649E3A48CF32 /* BlendMode+Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5D7AA96F4C384FFC61ABBD9C65C7F0A /* BlendMode+Filter.swift */; }; - D1C08C6ABA5A78800C160E54BA22FA50 /* UITabBar+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C08DCD50DDA4F71C414AA7077CC96A96 /* UITabBar+Rx.swift */; }; - D1D3D33D88845292F2024C488E0D6A73 /* ControlProperty+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC75994F054E5C98A812D17C7527B6E /* ControlProperty+Driver.swift */; }; - D2134585517FBCB5CD2463B4DBEE8E84 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = ACA84D9FD7A30E84D64FDD5B306DE077 /* PrivacyInfo.xcprivacy */; }; - D23A8B089BE2FEAACF5AFFA9451E7139 /* AssetLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB7856D2A89B795002794BEF5165A081 /* AssetLibrary.swift */; }; - D25CE6003CD20B30B691ED7372087613 /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72D229FA5EF1F07B5006BB07983E73F3 /* RxPickerViewAdapter.swift */; }; - D2854184492AB0652C029448967FE129 /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3099CDBCAB77ED24E860C30FE72F7E92 /* ServerTrustEvaluation.swift */; }; - D28C6561309CE8EFCE535410C20898DC /* LegacyGradientFillRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C16BCB8E73F50157A1D93FED070EE1D /* LegacyGradientFillRenderer.swift */; }; - D298D386913468C9712081456C60D77C /* GradientRenderLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7381A6E52759A60F4F9B92C1DE3B2E15 /* GradientRenderLayer.swift */; }; - D2A5F87B90C178639FECC0A3CB42978D /* RxDataSources-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 57E9017AEEC33B5ECECDD10EAB6C564E /* RxDataSources-dummy.m */; }; - D2AF9A7FD73B95960FDA4FD06C4BED08 /* NSObject+MJKeyValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C25F3519ADD38A0760C364F56755FA4 /* NSObject+MJKeyValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2C6284381E6492284EBABC8369CF5AF /* Core+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113A6CE4C212D09BCD02D88EBC5EACC6 /* Core+String.swift */; }; - D2CAB6C0EDD7A68CE6C7926A1B665726 /* IQKeyboardToolbarManager+Action.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1413AD37773953D3ABCC8A24322AAB02 /* IQKeyboardToolbarManager+Action.swift */; }; - D2D20DB2826B591D39A66F05E59AC05D /* FloatValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADEB27CA669C4121E999811969AC33BB /* FloatValueProvider.swift */; }; - D2D85A3965444DE82DFACDAF2DC42D19 /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 433934F1DC56FCF3A68958D44ADBFE90 /* RefCountDisposable.swift */; }; - D2F694ED8F2C032D38470A9A2EF24969 /* apply.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99DBBEE27AA60246E2BFF5947C21C49F /* apply.swift */; }; - D32B9186272E22BE3BD2B51CFC481173 /* LottieAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB7FA079A6480E26839E652C739D968A /* LottieAnimationLayer.swift */; }; - D349A9DB4770091311275B3791EDF129 /* Differentiator-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B5A37D6C6DD50F2C36D62037BC7142EC /* Differentiator-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D37E5FCE8CD9E5458533FF847C6CE6FF /* RxSearchBarDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C508E91145FD5398716837106BE87EED /* RxSearchBarDelegateProxy.swift */; }; - D39ADDADBD9EBD47CC36026EA6F1633E /* YBIBCellProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = E0CE0ECA12ED2394C3ED2CEEE96A2BA8 /* YBIBCellProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3C863454612C752A1A4133C64972A5D /* DDContextFilterLogFormatter+Deprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = 959731C5E318724CF5BC5D4444F684D1 /* DDContextFilterLogFormatter+Deprecated.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D4218DA55B2BA45937589200CC0DF1FB /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DAE279F4B34773AA505A877C76A03B1 /* ConstraintMakerExtendable.swift */; }; - D437CCD86DC6E52502FB1EAA60B58991 /* tree_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = FF07CBD86423A03E1F891EF47BBD0D56 /* tree_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - D43B99296130183FFF11E193E38C42F8 /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F033F3D3DD2BD7F88B3CFEBDF396ED5 /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D4B981D7F517394A1CBA2BCDE4B01A01 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - D4F5C37FC3D64648FEC360903AF1FDF4 /* RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1B1B6D7D2E92F184F846249072A1E0F /* RxCocoa.swift */; }; - D524921E7AE9C9CF9326E7DA8F80A034 /* EpoxySwiftUILayoutMargins.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEC5AA73C23F8210E1D7C888097942B0 /* EpoxySwiftUILayoutMargins.swift */; }; - D548E4E0D9121E18DA31F2150791F9AA /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = E98072F9E435CA10388C986C4EAA96F6 /* Image.swift */; }; - D5758BFED1514C39F76D3845AD320DC2 /* backward_references_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 43409DB5BB90B590069DBF410D50DD04 /* backward_references_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - D5A2B190C4A0490CAACAD3C4FC76531D /* Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EDF22B2F7710B68BEF42DBD7960FFD2 /* Concurrency.swift */; }; - D5BC75187BC76C9D39D22066FE4E2A83 /* YBIBVideoCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 25786E146AAE30629FEFFFCD7FEF1C8A /* YBIBVideoCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5DEA67CF8E95AB0E51A175E91769482 /* YYSpriteSheetImage.h in Headers */ = {isa = PBXBuildFile; fileRef = C1B302C4A61CD77057994883E8AE64C5 /* YYSpriteSheetImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5E8C734FD5A89DE65990747FB71E3D4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - D60D3D1BA7E494175E719D674E43B0AD /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 443DB1392864611F254C77FA4329F1D1 /* Bag.swift */; }; - D622FEEF75BE9D0AE9655CD5BB644E74 /* DashPattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ABC2B69AA7FDD403BBA66A483AA50B /* DashPattern.swift */; }; - D62E8EBC82FE2A4110091499EB72C052 /* TAPageControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A82911D5CB0F6C7A32A79C0374FCDBC /* TAPageControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D63AACB28313CEB9B9465C50A5A23892 /* OIMLocationElem.h in Headers */ = {isa = PBXBuildFile; fileRef = BF0E479511C18ADD53E88F03961CB9F1 /* OIMLocationElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D655E5D2240DAD66E04E1EEC16BC6EBB /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3FC69F2F25AD2A73471B55D72EF3D88 /* RxCollectionViewSectionedAnimatedDataSource.swift */; }; - D663837F4347AF58660EE6F7FD426ECE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - D6748A967D1B41C6C74B8987F21CE201 /* OIMCallbacker+Closure.m in Sources */ = {isa = PBXBuildFile; fileRef = A3AF198343EDA479FAEFF07AB3155C1A /* OIMCallbacker+Closure.m */; }; - D6B15F2F110BC58F7635A9FD7A985C79 /* IQKeyboardManager+ActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE7291A0D9ED471F9754D1FD9D58F0F4 /* IQKeyboardManager+ActiveConfiguration.swift */; }; - D6C50646DF1E6DFE90F59F1DD2EF6104 /* SGPermissionCamera.m in Sources */ = {isa = PBXBuildFile; fileRef = 977D96FA02CBC7EE86913380335CAEE9 /* SGPermissionCamera.m */; }; - D6EFA9EAA562143F338EB164836B7837 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */; }; - D75BC36D268EC4D6E1493FC5B6E5F329 /* SynchronizedOnType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0788BAC406F45A6FC2BF3C22638DAB6C /* SynchronizedOnType.swift */; }; - D78511BCB71209310E67BFD758101868 /* VideoCroppingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C4A63F49D323F784BCA69785BB2D563 /* VideoCroppingConfiguration.swift */; }; - D788BA4B9E8186271BA75CA52B30502C /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3372B0460260FFF150042F100790D87B /* View+MASAdditions.m */; }; - D7AA816442FF639772077023CB7CB106 /* lossless_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 2721B15D69AAC9EDC592D8D91DE15A30 /* lossless_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - D80112F19F528A1C41741B121ACB18C4 /* dec_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 99DADE9DE147112FECFE409CD724C123 /* dec_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - D82A0ABF3F863CDDE336FA92E16862D7 /* DefaultsObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 196C119B4B99656411031B27E64A2D95 /* DefaultsObserver.swift */; }; - D868C392BDB9CFABF97973A998C5AA56 /* SectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4218E7AB0F97FEEDD00E4E037614FB34 /* SectionModel.swift */; }; - D87ACEE630B7A52130B62DFFE5D00488 /* IQTextView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 04D575F8A3ECAFDA90EBA0B26E34F657 /* IQTextView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8B1F69BCF2B8262D5E9E576E59ECBE9 /* NetworkLoggerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CC8DF74CE848DD89C1543B98FF1568C /* NetworkLoggerPlugin.swift */; }; - D8C1C36499AAE21BC329AC0313715AB3 /* AnimatorNodeDebugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9889E1671FA4909135510BCB410874E /* AnimatorNodeDebugging.swift */; }; - D8EDAE77B19B3E8930DCFF4E9EDBF136 /* Mask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46FA4E5C6AB9828AA051B5295DB7401A /* Mask.swift */; }; - D8FBC2059AFC33C299D3ADAE97C9A431 /* PreviewLivePhotoViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF6EA89B3D938E7704E068A325DCF64B /* PreviewLivePhotoViewCell.swift */; }; - D904C2369FD78185284B5B4125D2CF71 /* IQKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AD9B8FCF4FD89F4D5143063C5E7A0D0 /* IQKeyboardInfo.swift */; }; - D90607B4E56247B19B14462E487BA86E /* MJRefreshNormalTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C6F8597CB530F782630CE04406C2C19 /* MJRefreshNormalTrailer.m */; }; - D90DED0F5638B1C44F4B6C62D600D240 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = EB19BE65B98A0E3ED0F4558833C481CC /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D90DF1376DF5E2EA644313BCD2E03058 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4B8D141C5CB92565EBE4E408187A268A /* MJRefresh.bundle */; }; - D9623705421AB179348D0B44B85D8CF5 /* picture_tools_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CA871A837C87D6CD87F1EF2EC8ED612 /* picture_tools_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - D96A36BA5D4435B9B249FDA8358A0BFD /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60BB1F68A42EFD825729CE824368D4A7 /* Archive+Progress.swift */; }; - D9D0A2F87519BD84F4B2B2D5732B0AB2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - D9F3D624752DB3F5F2736076F8F1B116 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - DA04AE61AF2464F87B87303CB25A8E8F /* Core+DispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89A5CE11CC57889F540004F21A563342 /* Core+DispatchQueue.swift */; }; - DA07A5D6764940E785E70EDD08C5E1B0 /* Plugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23DADD0A8F4BC93DE27A54C99980A205 /* Plugin.swift */; }; - DA2766F1FE150D6B0E5FF6559675F9C1 /* SDWebImageOptionsProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 736BB63679A232597C9253B4A0B634D1 /* SDWebImageOptionsProcessor.m */; }; - DA43427CB705255E964D1E41B7CB9665 /* sharpyuv_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 80F00122FF7CD557F71EDB6CD73DCE0D /* sharpyuv_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - DA70ABA313645BADFB5BC13FB995DCBA /* DDLog.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B95A9E68D6B1BFC0187CCA4BC88B13 /* DDLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA77D72DA1A4D08A1241EE9DA11D4F12 /* SGQRCode-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F0B7C25AA2F40A4E6FFD122B936E9B5 /* SGQRCode-dummy.m */; }; - DAACB6C433D86B6C98D2F66375D35A79 /* YBIBImageData+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = D68C40790FE6F29278192AF58A55C115 /* YBIBImageData+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAEC2E2F152FAB589719CC460085DB00 /* RxPickerViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37195C83073D00C327F9B6C8E49E6096 /* RxPickerViewDataSourceProxy.swift */; }; - DB1708B7C82FA44676C239921B21209E /* mips_macro.h in Headers */ = {isa = PBXBuildFile; fileRef = BA0C32A8612AFBDAB31E407FBDC7FC06 /* mips_macro.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DB17C9319D2226DB80AFB60844D61209 /* MemoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDE553DBFD8986CB772D81F3EA41D6F1 /* MemoryStorage.swift */; }; - DB19161ADD3C766572D982E840738225 /* LottieAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F4DD82FA503C00D1869D0680B76A86C /* LottieAnimation.swift */; }; - DB269D8700C7F90AFF5D0BAB45B0F8C4 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050847A31B5BFFB8A95DC61D0BE1E3A8 /* Data+CompressionDeprecated.swift */; }; - DB7A88426F3F939727266BFD3AC87283 /* IQKeyboardReturnManager-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DC56A5F60C8E478C362670C1A1CA774C /* IQKeyboardReturnManager-dummy.m */; }; - DB8A9051CC18A860342CA0B573718EC8 /* RxTableViewDataSourcePrefetchingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE9E03A2577727310935A5A9E4A2B30B /* RxTableViewDataSourcePrefetchingProxy.swift */; }; - DBA4803F4765E1650B8C6841157F5D73 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56AE43789F036F7E37E7C78CE526A331 /* ConstraintPriorityTarget.swift */; }; - DBA9500CBBA5FF6FCBBA115AE4D12152 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C82451206DF153E55585157CFB2164B /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DBABCEDF64733C48553D3A417B869E4E /* SDWebImagePrefetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 52F73D847B989EAAA31283582D8074C4 /* SDWebImagePrefetcher.m */; }; - DBAC6B1D8C54FB2B16D1EB2D41715F4F /* lossless_enc_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = B4EE7A0CB2B38A64ACC0428F57AEC7E8 /* lossless_enc_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - DC016D326725C8F66C7F8382A0A65EE7 /* dec_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = E747366903F9ED5B7CBB1D60E84BB103 /* dec_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - DC06A1D5ADAFEA4996B96A0FF2812066 /* muxi.h in Headers */ = {isa = PBXBuildFile; fileRef = 66E1CD8AB08972115F770800608A1BDC /* muxi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC10982107A29E4A8626F5C720927380 /* cost_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = EE764BBD21C61C43683701E3F5FE2FAE /* cost_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - DC116AC0C3BC808A198B9C1704FA8C84 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DBF29A5234553C463B88860B18F477F /* RequestInterceptor.swift */; }; - DC1380F89C13E6AD588136A434F3A572 /* OIMFriendApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = CB5268316387EAF511FE3FDA946F4C23 /* OIMFriendApplication.m */; }; - DC23ABA9F3B310276C216C3FC92817BA /* WKWebView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FD48EA2FBFB0058F98D944DAAEBE7C6 /* WKWebView+Rx.swift */; }; - DC3EF9ED530ACDBAD56AC2C72449546D /* SGGenerateQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 837E21014C5382624DE0924B4AA99FE0 /* SGGenerateQRCode.m */; }; - DC50C14598B1CF4EE405912D086A2058 /* LottieAnimationHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABC97A3BC2FAB2610A09174860B90436 /* LottieAnimationHelpers.swift */; }; - DC74FE4A54ABC1014D4F43EE30D080B9 /* AlbumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CDDF5A118E717FCD167B130920711D2 /* AlbumView.swift */; }; - DCBCF1B3F76B2B74EAA05867FF15DE3A /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9DCB3383235EDBA4F3C971A96B27409 /* PriorityQueue.swift */; }; - DCC91EE07AF8DA97BEB7C13435F86DCA /* AnimationTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775230A1FA491738DF687BEEB0E36177 /* AnimationTime.swift */; }; - DCDF1EE1680BD843F511BF67F227FAE9 /* PhotoEditorViewController+Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47C1FF137DA42CBB07A1EF1B8D4A2D29 /* PhotoEditorViewController+Request.swift */; }; - DCE4CD952E671E4FD854F1F6699CFAFD /* DefaultsBridges.swift in Sources */ = {isa = PBXBuildFile; fileRef = 850578387A0EBC9B04FB5459FE3B3212 /* DefaultsBridges.swift */; }; - DCED4E4B0F4985056B32DF79783981AF /* format_constants.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DE933906B9742E508D8D788A1D9460B /* format_constants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD169E134718B3EBAB25987CE95481AE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - DD1E5022EE05E040EF088DB41010E5E2 /* lossless_enc_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = FA38134483F784E7A4AA180ABE16C06E /* lossless_enc_msa.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - DD46BA20B478F77DA75007964216F86F /* SGScanViewConfigure.h in Headers */ = {isa = PBXBuildFile; fileRef = 87661C0964375E9E5AE8195C668A957E /* SGScanViewConfigure.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD576D4E4F1144C2D1429D071DF11D32 /* LottieColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 722701F61A9A66CC4971FB3EA06BD853 /* LottieColor.swift */; }; - DD57E9FEF4EC5F5CD871D642F1EEDDCF /* SDImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = A90426A3569DFD849BCC6A1F9C5CCD8D /* SDImageCache.m */; }; - DD7D38B1D11219F1882E3E9DD5FA2E0E /* YBIBCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE22C52F3EFE4A4578ABF3C37C14741 /* YBIBCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD907809DEEA2C3EAC6FA3F150AB9893 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD572E7B11147DD4A8222AA6C45D15D7 /* Timer.swift */; }; - DD953C7254A2F9DCCF3758D6AD00F29E /* Rectangle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09E8A3E05EC079477747443AD301E860 /* Rectangle.swift */; }; - DDBA4D50BFCFA2AB8F7955CE701A7867 /* palette.h in Headers */ = {isa = PBXBuildFile; fileRef = 04296A362C3407E0A85FD5DB9C3E1EDF /* palette.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DDC1718E80C5A12699A652A0EA10CACC /* PhotoEditorMosaicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 693F8ECA090561B610BA6FF8274178DA /* PhotoEditorMosaicView.swift */; }; - DDEDEE8B19E94E46A2D70C78127236E5 /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = F49C1B5C54E03ED988C89B6FA16BDB5C /* Kingfisher.swift */; }; - DDF61BEA9AFF4E1CFD53D4B84D119DF4 /* AuthenticationChallengeResponsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD658EEF20E9119CE663C6D7FC68A348 /* AuthenticationChallengeResponsable.swift */; }; - DE50BB83890C5693CFF24F29B5FAF6DF /* VideoEditorPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 120ADFE75C0204A5F6266DF89EC4FAF2 /* VideoEditorPlayerView.swift */; }; - DE553B8C80DF65038D90C24727ED63AA /* UIApplication+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5C77BBEF52E60A948A676A9BDB60109 /* UIApplication+Rx.swift */; }; - DE98ECCCA7106A4EA575EF34830D41FF /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4846DEBD1B88739515A29CBE64DAD34F /* MJRefresh-dummy.m */; }; - DEC54B892123D7FF8A5149EB54FC4BC8 /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03EBA45F8498DF53F666FD4E75823E8C /* Delay.swift */; }; - DED9ADFC8CC65243FC54E008A853742C /* MJPropertyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = D8D05105D891E4492E3064011BFFBC55 /* MJPropertyKey.m */; }; - DEE9768C736DE29A649C5EB71C4869C3 /* CollectionViewSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E834870E6150A5FFB1FCE3D10C8A1A67 /* CollectionViewSectionedDataSource.swift */; }; - DF041B324D1AED0B879B8F3101A5A590 /* PhotoEditorBrushColorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AC4B8F50BFE837EACFBE3C44B0388D1 /* PhotoEditorBrushColorView.swift */; }; - DF09A95BFB1D9368C68F9395315F65F7 /* UIScrollView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA95F4A4BFFFE59FACF449B9D2D50CE3 /* UIScrollView+Rx.swift */; }; - DF207BC23177F7FAF26DFAB9168B6216 /* MeasuringViewRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A598A01BE8C27F0423DB78EB55F82E42 /* MeasuringViewRepresentable.swift */; }; - DF28F9B66D46D3CE0A315A19E135C16A /* PhotoPreviewViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = E20299373650F59323E2017B3AFF9EA4 /* PhotoPreviewViewCell.swift */; }; - DF2B15402CE105F5A8CE48BBDCFFD5DD /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 54D4326B12078EADA37433D8A7688F45 /* MASConstraint.m */; }; - DF4BD662CEA133642C134CD18C65CD4F /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64955DB2B6BD9D4B02B1D00905645B96 /* Window.swift */; }; - DF7DC58EB9217CBF2B6DA9EB3B4F5F6C /* OIMFullUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = BBDC785D271CA5318A067B81436E8352 /* OIMFullUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF9B34E19C0F13BCFA58F0DBB348E008 /* SDWebImageCacheSerializer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8472C6305564D304D3D3D434D7191E22 /* SDWebImageCacheSerializer.m */; }; - DFAE5F0CFCD5B6A5DB0E2F66A9E0B64C /* NavigatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78EDEE5E177BF6DF888E2F685ABDAF79 /* NavigatorProtocol.swift */; }; - E0069EDC3753BF4A03707B9C82F5802D /* demux.h in Headers */ = {isa = PBXBuildFile; fileRef = B9394C0414AC1F9427C4E7C0BC1863ED /* demux.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E00FCA3D1D8EB62A399FC73F0095E0E8 /* WithUnretained.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46C3470E48B1D31E09FFD503615D9BB6 /* WithUnretained.swift */; }; - E024308BE172CDD2B5057109BC5A5F5D /* EditorImageResizerMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1106559DE680E75DE166E285D84655EC /* EditorImageResizerMaskView.swift */; }; - E03D4CB7A199F25F35C98875B44AD563 /* distinct+RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA9CEA59AF7E8F2341E1A92B8FB97E66 /* distinct+RxCocoa.swift */; }; - E04CDA04CEF8860A01D1C3FA4D3B96DB /* ReplayRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 001B292321BC5B049194157ACD963619 /* ReplayRelay.swift */; }; - E080E4E10F9EE84CF6A4EF650744131C /* OIMGroupInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5318EE889AE2ED47F81CC78C2069CB35 /* OIMGroupInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E08450720F1754962C0C0528ABDAFE7C /* EllipseAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 471AA0E6419BEC2F99BC28C13F677E88 /* EllipseAnimation.swift */; }; - E122F98E77B93BE2E6D39CC3A0816028 /* GIFImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD4BB25B01C11AECAA30B2010211F454 /* GIFImageView.swift */; }; - E133D5294A2132BE10DD88FDA067DFEC /* SwiftyUserDefaults-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CD8E93CCDB5866098FEF8856FFB20F0F /* SwiftyUserDefaults-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E143494B69E3B18FE61C76A73A5EE775 /* DotLottieConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C184E760724FA58B37DE2A4F77BFEFDC /* DotLottieConfiguration.swift */; }; - E1734E56DB48E6F238408C9A232C7051 /* UIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE7D3EF3525CECB919C94B7CBAAEB8D /* UIView+Hierarchy.swift */; }; - E18541685B292228D035343813E12E12 /* LayerFontProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA521EA6BA5447EBEE592BCF358F83F9 /* LayerFontProvider.swift */; }; - E1CAAC3585EB1C15CD85EC2F1491E04C /* SDWebImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F5F87C6B5FD4C86E35043453DB746469 /* SDWebImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1D5E750D0967821FCC5E697AAA2CDE1 /* PickerTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25285C5E626F30148926D9D6A6202443 /* PickerTypes.swift */; }; - E1DD651C52693F6D44F67698D02C7D82 /* SDImageIOAnimatedCoderInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = E92A2F23BD154B929E5D231A46F3FCA1 /* SDImageIOAnimatedCoderInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E1DE69F6BB6235A6EDB6C99A184BEDB4 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = ECDCA6BEAFD67BE73F5C9BDE8C1B4D50 /* UIScrollView+MJExtension.m */; }; - E22B29F35FA7B9A571C95C500C12F120 /* sharpyuv_cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DE1CB79BCC5D870E0A0F8AE2B4A1461 /* sharpyuv_cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E23C5187D22F3D7207BF940BAE80EF33 /* alpha_processing_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 27F811FC60FE7171767A66AB5F507804 /* alpha_processing_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - E24730B2A18DC39C2BE4997ADD4A7598 /* PhotoPreviewContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0E23FC914AC918A3812AD96D4739ED3 /* PhotoPreviewContentView.swift */; }; - E270921E974E7D5ACD5BCCF42936AFD6 /* DidDisplayProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09C9FFCB4BFE694DCB6775DB83FA38FE /* DidDisplayProviding.swift */; }; - E274BA92F9C6AA938EF04CE7EA38CEAD /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD52698FB0F645D5FEACA1C0F6F5C222 /* RequestModifier.swift */; }; - E2D61561302F31F37F4AC7010B4C665B /* ViewProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3735BF48C165F1FF3722190A8D76CEAB /* ViewProviding.swift */; }; - E34C329C1184FB2A2327D471B5ED48E2 /* IQKeyboardToolbarManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = C70AB659BC6BC3C3EF51AB32BBF7BD2E /* IQKeyboardToolbarManager+Deprecated.swift */; }; - E35F47135B73F9286B07B267CB98513B /* NSTextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E2D9445ABDD01E2EAF6BCF2874BCAB2 /* NSTextView+Rx.swift */; }; - E37671A03B4C17A1CF3766A6125833BB /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E9CDCE5F0043FB2C6DB3BCFEA9F9D6C /* ConstraintDirectionalInsetTarget.swift */; }; - E3D779DEE753C0B0D33BA8E73A980265 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D116F3B6A0E7D4C7816BC8AF483B3EE2 /* ConstraintLayoutGuide+Extensions.swift */; }; - E42496F55B6B2C772D40F457B7C98154 /* muxedit.c in Sources */ = {isa = PBXBuildFile; fileRef = CBD645FB492CC8ABAF8474214E280CC7 /* muxedit.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - E42A5C1780E7E37B3383F387DE14C3AB /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 065D063BBA4E2E76DE8E4F0FC55DEC82 /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E4300B4836DC8B47F8D09A90DBD71587 /* YBImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 91C711A1DC0B3F501774D59914B427DF /* YBImage.m */; }; - E4A29F8C3ED424A7BC912DB796D03AFB /* UIView+ParentObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C298B2A388307DD5D979FAA27BF366A /* UIView+ParentObjc.swift */; }; - E4BEE8283802F8F8B17F1A1BBBD3CDE4 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC6CFC68DC5E71DEF88306F0089B2448 /* Session.swift */; }; - E4D62C8F5788C16CE8FDD00107251863 /* vp8li_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = F43E549B88EA208A82D3DB6250CB8993 /* vp8li_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E4DE6EEDF2754E430385AC1CF42D8413 /* RoundedCorners.swift in Sources */ = {isa = PBXBuildFile; fileRef = E24C7A21B6750630893FB2EA5D1EFFBA /* RoundedCorners.swift */; }; - E51D1D6DB3179622992C91A1DFE90D5F /* GradientStrokeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97F0DF9B08CCA8D2A5749BBA40C04F42 /* GradientStrokeNode.swift */; }; - E526D55AE9365CCCFBBE86334C17765F /* ObserveOn.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3C657C177D6F9668EE4037A7757222 /* ObserveOn.swift */; }; - E533265B7ABFF5AB2789FC86D9D196FB /* Infallible+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = F584805C537CD1CBA84D5491040BA7C1 /* Infallible+Concurrency.swift */; }; - E54A7350798B1D45616E86D64DCAD262 /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CD8F90D2331966421E416907B75E2FB /* ShareReplayScope.swift */; }; - E54BF0D07C2708D631DC6EC9D9A6F752 /* NSSlider+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07082B8A4C4290E5D4C81099E14B1045 /* NSSlider+Rx.swift */; }; - E56D42E6D9C9787C503C0D041B375E64 /* IQTextInputViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0654D9122788EE00CAED6C0FFEE73F77 /* IQTextInputViewNotification.swift */; }; - E5B057BC87284367918B2DB9CA084B4E /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E2DA31BB5B71385C2113C242EC8B930 /* MJRefreshAutoGifFooter.m */; }; - E5B8C9B69A522F320113821E8981F74E /* filters_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = B2CFD3CFB14AFD520EDB9E11593AF849 /* filters_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - E5BD9E38260CFB54191D2F4DE6C993B6 /* DateInRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6661F713463BAE855AF1063C2C8C4ADB /* DateInRegion.swift */; }; - E5EF977D40793FCCFDDF4CDC7E2BB865 /* SDImageIOAnimatedCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 60EDA73CDAB249744F8D82D94147C9E2 /* SDImageIOAnimatedCoder.m */; }; - E650CA91216B98D166FDDA405561CEF1 /* CocoaLumberjack-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 865E473975582293F0FE384ACE2EC425 /* CocoaLumberjack-dummy.m */; }; - E6531A60CC8B48F320DDD76C480102BF /* PhotoPreviewSelectedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D92D190853671E509BAA5E005AAD97 /* PhotoPreviewSelectedView.swift */; }; - E69689D02F65E151584D4699213E0763 /* SDCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 85CEF0B57610430DC6C0900DC77AC6F5 /* SDCollectionViewCell.m */; }; - E6A94F529B95809112533914EC89CF36 /* OIMAttachedInfoElem.m in Sources */ = {isa = PBXBuildFile; fileRef = ABAA3CDFB336842D51FBF95ABD577DDB /* OIMAttachedInfoElem.m */; }; - E6AC3AF0CBAA1843B13F34AB5CA491E7 /* OIMManager+Friend.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DFA11B23F0F29B0B8105FB002C0BB1D /* OIMManager+Friend.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C03633BC24D5BADF7D8EEB3ACE631666 /* alpha_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 979C891C173C4B89C451458A3F545DCC /* alpha_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + C0763E17DFCC612339CA455AAAB24188 /* NSBezierPath+SDRoundedCorners.m in Sources */ = {isa = PBXBuildFile; fileRef = 729C335AC4480787A0D8A171C363F055 /* NSBezierPath+SDRoundedCorners.m */; }; + C07CB3E9A4D1BF00F841E4285629A2B2 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF05CC8BD4D487667590A69116766F94 /* ConstraintRelatableTarget.swift */; }; + C08F4B423A39CCF69136F7ACFA5FFB4C /* Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24A12D238EE2AFDFD11A5BF137C767AA /* Driver.swift */; }; + C09B37223BCC5B22BF7B29CFB1C68F8B /* RenderingEngineOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BF72D624C3A129C90AEC6EC4E3E5E41 /* RenderingEngineOption.swift */; }; + C0A1130442B239AC2610C6878C2C6869 /* webpi_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FA1F9EE893754FCB88034C3F53B9134 /* webpi_dec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C0A27AF8E1BA202D8015FC341C905C25 /* SDCycleScrollView-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E31ABC3FC220CB286BD36808983A58C9 /* SDCycleScrollView-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C0AD493AE4A8DC8FF960D753D6D971E3 /* IQKeyboardManagerSwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ED2169A587A329F11F373D2C50FD832F /* IQKeyboardManagerSwift-dummy.m */; }; + C0E5BD34620B57EC98C5ADD30CD3D01E /* Trim.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E2020960628625BDC018E48BA326EB2 /* Trim.swift */; }; + C10B1478C4AB3693D886D94ADFAEFDFB /* KFImageOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 98AD5468026B6327AC1AC789C55E2B66 /* KFImageOptions.swift */; }; + C11354C639B096969AAA9734F14D0836 /* _RX.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CB8C613628313363644BD09AD359103 /* _RX.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C11C67B63B259776A719E711DC1735E1 /* yuv_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = E14EB83C1DB19335E77096319A0E2693 /* yuv_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + C1300DFF8872E46FD85689A4D06A5C2E /* UIImage+MemoryCacheCost.h in Headers */ = {isa = PBXBuildFile; fileRef = 76D165A54C30392DFC0BBA605E58B93F /* UIImage+MemoryCacheCost.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C141940201901A38A684AB8A2426F099 /* YBImageBrowser.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6842A0E2A2DB80154F5F93850EF93F27 /* YBImageBrowser.bundle */; }; + C14E0151206B52F3D0D9F7812847F16A /* buffer_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = F537EF39FAE967FAFFB3C95ADE5A3B62 /* buffer_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + C14F10B663FE2898EACAB90C202B3F50 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17C72523B93134AD24AD27FCC1289EBD /* ConstraintMakerEditable.swift */; }; + C172FA436525F74E81209875947595E7 /* Disposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 917B5AE204AB6A982EF8CB9D8A5555E1 /* Disposable.swift */; }; + C1860BBFD363FE0FDB416A80F004718F /* LayerTransformNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8459D7FBE1CE367D86924BE49985C9 /* LayerTransformNode.swift */; }; + C19F5F3FD38FA35CAA4915D576E7761F /* Core+UIDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB49502221C6831562B6F3334074EEB2 /* Core+UIDevice.swift */; }; + C1A5F0FC8A3482F772329209BE755714 /* CoreAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7AF6E104842D1D774F95573E8ACDFC4 /* CoreAnimationLayer.swift */; }; + C2068AEACC2D9C7F1FFE41AA25B12A68 /* MASUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A065AF90B68633BBEC46B5E72F9476B /* MASUtilities.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C20ECE96A97688090D5FE186DCF7B5D9 /* IQKeyboardManager+Resign_Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F61591FF5B1753F1EDA95DD7F1F221 /* IQKeyboardManager+Resign_Deprecated.swift */; }; + C22290501532385B349FA0DA58710DB9 /* AnimationSubview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D56323B451627192BECC5104B3D81BC /* AnimationSubview.swift */; }; + C2369277810812BDB6306E99925587AE /* SDImageCachesManagerOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A932087ABB9A35400DD7C526A39F7CA /* SDImageCachesManagerOperation.m */; }; + C278A03B4975812C48A280BA391C23D9 /* Data+Serialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F8B1507A4C52B30BD509386B591FD6 /* Data+Serialization.swift */; }; + C29048D82709E1E770DFE0EDE18A350D /* SDImageCacheDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = E2B7730E3EDC09E9C27731F9211A03E2 /* SDImageCacheDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C2A21354D5DB755E780A9ABC1752E74A /* PHPickerResultImageDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF2C24B67E5E17219B18B1D700847444 /* PHPickerResultImageDataProvider.swift */; }; + C2CD0223F067656A2FC851B7612916E2 /* YBIBImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = ACDBB4CB21A0172744F834F4091673B4 /* YBIBImageCell.m */; }; + C2D8DE91BD230A156FD26EF3E11CD2F0 /* lossless.h in Headers */ = {isa = PBXBuildFile; fileRef = C6E63714E5163D46EAEF91865D01ECDC /* lossless.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C2DDA326B57E522D0CDF88CE69827F18 /* Platform.Linux.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D750F4A680320BE56EF1BDB092B3066 /* Platform.Linux.swift */; }; + C2FDEABCE0D089AF0E4EC0875D998E66 /* Concat.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDC69EBC09E79F4820A84FF0EE4B000E /* Concat.swift */; }; + C2FE60A10C792613E45031AE6E851ECB /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A3C23B1D72202683F00B447B922927D /* MASViewConstraint.m */; }; + C2FF0AFBB1853A8459AC0432E6AD85A0 /* URL+Moya.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CA7E77AA99A3B25E82ACB1C03DE1AFF /* URL+Moya.swift */; }; + C303A4E0C86C512F7DA7A841C5BC000A /* LottieAnimationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C7EEF7FD983ACD669C21EC0404713ED /* LottieAnimationView.swift */; }; + C324848DC9989E558C88F00CBF82C95C /* DecodingStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72766BC56FB33D493A0DA75B5189A566 /* DecodingStrategy.swift */; }; + C3297A7121B4CBEBBC8FDAD4279118AD /* LottieViewType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4538D166A896DAD1AB3BFE037F3EFE5C /* LottieViewType.swift */; }; + C36F0742777344AE9C9EC5B393E39A66 /* PhotoPickerViewController+SwipeSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5DA1CF8DC7F54C5F4F0B7DAC3650369 /* PhotoPickerViewController+SwipeSelect.swift */; }; + C387C8843E8133D38863C2B409539913 /* PhotoEditorMosaicToolView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A58B86B87E69679760C7B7E8604BB766 /* PhotoEditorMosaicToolView.swift */; }; + C3A2D804B1EF219B56E7EA71585CB148 /* NSButton+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6290E5C0F32B2229537B63C8028A89CA /* NSButton+Rx.swift */; }; + C3DE4CA7617C9BC6EB538E0A23303DBC /* DDAbstractDatabaseLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 0975E1214B64C5AE57633B4489CBE5F2 /* DDAbstractDatabaseLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C405A16EDD5CB5C1FC7EEA7856D73DAC /* PhotoEditorViewController+Animation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C94875BC7BE284051E55C4BDC8BA513 /* PhotoEditorViewController+Animation.swift */; }; + C41750A380D75A5B08EB714F5236FF0F /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 677FF7B4A892D4EB3B2AD9BB1F6B7379 /* BaseViewController.swift */; }; + C437FA9AF753C87C55F0849F7E1E176E /* UploadRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9E6296C6B08253BA23FAA38899D184E /* UploadRequest.swift */; }; + C462F17EDE150EF6837F0524C632A64B /* YBIBImageCache.m in Sources */ = {isa = PBXBuildFile; fileRef = FC5AE789DAF559A15696D20E295016D5 /* YBIBImageCache.m */; }; + C46464010E864ECB7A1F16073A402380 /* Optional+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7255A222C9A1437D1F742C8CBFEF988B /* Optional+Extensions.swift */; }; + C48A9E2CABF2ABD7D954BC1FBB6D3C77 /* RedirectHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 846DE591BA61F5776BFB4F91E09C69AE /* RedirectHandler.swift */; }; + C49CBA7D57BFBE1D3297A18813D1067C /* lossless_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 69C94D551311BF96B246137BE18B4214 /* lossless_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + C4CF908B22439772FC5FA601B3C481B2 /* AssetManager+LivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C3E4424C9BB47614486B556FEF7AEA /* AssetManager+LivePhoto.swift */; }; + C4F42EBCA4302C49201476B324A8E679 /* TransformLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A821688C0C584B0F53FDAD23FCBF38E /* TransformLayer.swift */; }; + C51F243E04F7B1B1D8B6A0D8B5E5B940 /* EmptyViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28853C4F1F0BE8910FC831A9312857F8 /* EmptyViewConfiguration.swift */; }; + C565A821906F24C86701339A18D69D7B /* tree_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = D06FBFCACDB5DEA5E6A56C03EDB2CCFE /* tree_dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + C57B18D85E8D7A47D74E16B95F37C88B /* once.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B7F5FD6DA9BADA51B3252CFD995B944 /* once.swift */; }; + C59E3FD52D5408C08FDC0E6FE6266C3B /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AD1A0DA62E38A2270776CBC8949C349 /* Source.swift */; }; + C5C81E89EA185839DE018B2C1FDBEF37 /* TimePeriod.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFF623CF9D4FF72AB1D21B2441FFEE76 /* TimePeriod.swift */; }; + C5D1719D9646B00FF98E064E46508BE8 /* HXPHPicker.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 59A8A113B244267F39733411FDBFD59D /* HXPHPicker.bundle */; }; + C5E9BCA28405371331555210EB371571 /* TakeLast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FDBE017ACEAAA8AB1BCF651DB668698 /* TakeLast.swift */; }; + C5F059E06474BFDCE4964679841A8484 /* CGPointExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C9D5E2A219C95745FAF204B1E3FC92A /* CGPointExtension.swift */; }; + C60DB44F719853DE3B7157960DAF9270 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = F1275B92920129B3ABF887C6F40F3504 /* MJRefreshComponent.m */; }; + C6728BEB2195DED53EF713DB08BF8166 /* PhotoEditorCropToolModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BC960EB9A445C244712AC3B35F7B71F /* PhotoEditorCropToolModel.swift */; }; + C687C1E3C0B426A37D557A2C863E7EE9 /* RxRelay-RxRelay_Privacy in Resources */ = {isa = PBXBuildFile; fileRef = 0B06FE4EB869890001614655A886414E /* RxRelay-RxRelay_Privacy */; }; + C6A4302ACE006C4E2CDD481287E2916B /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EA07675D341B40B3A11C882628547EF /* Typealiases.swift */; }; + C6CEDE25513EE580A409D2FE1EBB14BD /* SDImageFramePool.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A9598965144DCAD57DA3C09E9D9DF65 /* SDImageFramePool.h */; settings = {ATTRIBUTES = (Private, ); }; }; + C6E542DE6D61F7CD41340049F2D8FFDE /* AuthenticationInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EBE8A67D212304EE2620BF3E7B9160A /* AuthenticationInterceptor.swift */; }; + C6E75AF470A88DCA0D63040F5F34879A /* UITableView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCD7BCD9C08B7D6A5BDF7D7B7E93E2C4 /* UITableView+Rx.swift */; }; + C6F35BEA16F9EEEA1297311E01100AF2 /* Signal.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE77A4C4BB20BB9E98756314B59D7425 /* Signal.swift */; }; + C6F45595676957ADBEC18EB3F23EAEC4 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 187CD970712B0851A9470D28D04986D3 /* LayoutConstraintItem.swift */; }; + C6FBF1708A9597C929A9848E48F3EF26 /* TextAnimatorNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2506741F9F50189A7DD54A4F356E1C0B /* TextAnimatorNode.swift */; }; + C72F37CACEC780E304BA0B9D1077EFCC /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F7C4E38E4607F8008E79A6434ADB1C0 /* Response.swift */; }; + C73BBC138DDA380D3E412D48E86E24C9 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 376332B7BB7B62B68F0FF48144147A45 /* CFNetwork.framework */; }; + C75A276978CD42CE5FB7F99244E07808 /* ISO8601DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D6B492452344FA1B760EFFD9DC1E5 /* ISO8601DateTransform.swift */; }; + C75C0D0545CF6B8B2A4B51DB97C57561 /* SwiftDate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A3BD5869D2B1C7A4FBF323D773D9E1C /* SwiftDate.swift */; }; + C7715123861E25EAB3E44E72397CECE5 /* CallbackProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 55A50E8CBFB62149F0DCE7D564030662 /* CallbackProxy.m */; }; + C7C6F1AD0C44C79C4A3416FCB32B0233 /* IQKeyboardResignHandler+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E67A6EC39FF472B83B7840AF78E292 /* IQKeyboardResignHandler+Internal.swift */; }; + C7D693676710714878F4633AE77C881B /* OIMUserInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = C56F7B90029A72DEC58CF844484D77F5 /* OIMUserInfo.m */; }; + C7EFB87F8415D2B0D1654745230578AA /* URLMatchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A20B3BF7B48A758BC8D999EB4539AE /* URLMatchResult.swift */; }; + C801C2CF68F147169189E69F641D7F76 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + C81A012F3A85BC343EC5C412F8D68834 /* YYImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A115E0B3FC9B65949A9542E9CDB7BDF /* YYImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C81D645A697C6B9782CABFD8F06A93BF /* RectNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E2140737C3E93134F8FDB59AB754F8E /* RectNode.swift */; }; + C833FA17344A15EA1969FD585E7F4970 /* RxTableViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47FF8124BAC952F35B2E4461CF41D102 /* RxTableViewSectionedAnimatedDataSource.swift */; }; + C85231B99C1BE80767753C368304A730 /* DateInRegion+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADDB1F578A79A46460968775A7A8BB7C /* DateInRegion+Compare.swift */; }; + C857B8D2D0BAA5A8A764F9E1C4B85807 /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 004B8301B59E0532FC74ADD360B1B420 /* ViewController+MASAdditions.m */; }; + C87EEEAF062456D346356447B16867FF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + C8BE034A357A252B055FA0C4A9E4C978 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EE62403F3E6512DC6CF16E7A5F5C68E /* CoreFoundation.framework */; }; + C8EC35DFB0945DBE2F2FF9ECFE6D9711 /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = A49386E944B025DD42EE8A1F8EB38266 /* NSLayoutConstraint+MASDebugAdditions.m */; }; + C9262973FC4CB1CCC42F745E6778DE4C /* SDInternalMacros.m in Sources */ = {isa = PBXBuildFile; fileRef = 32898454CB13100812704D30105A0D45 /* SDInternalMacros.m */; }; + C937AC5DC84D468EBAB678025048B400 /* OIMFileElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 70CEF74CF654DC40CAA98E45E03634BD /* OIMFileElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C945CB4EC42271D435BF23E7749BE6BF /* IQKeyboardConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D4805E9DDAB51282FCDDBEF197F3FFC /* IQKeyboardConstants.swift */; }; + C95C753AE30159950F8DB7308DDF77BD /* MoyaProvider+Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74EF885F453A96CCB8817B3E6A482055 /* MoyaProvider+Defaults.swift */; }; + C98EE67EF74B92C9AC9E23B9A1E74E74 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + C9B40ABBE5B695C9F9CCEC8658B796BC /* thread_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 1E154A22F7BFD213343B11EF0EF10A5C /* thread_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + C9CE59309EABFDA10F864CDBB91465F1 /* DefaultIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEED446863E4D0E5C67019C24F146920 /* DefaultIfEmpty.swift */; }; + C9DC5FEA2934DB98043A547AAC973C97 /* CameraConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8705446677A2D4792E7CE527DD558989 /* CameraConfiguration.swift */; }; + C9E19D164C26414115CC969ED9A303C1 /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 571BB5738ACB42F42C34CE19067238F4 /* MASLayoutConstraint.m */; }; + C9EBE0AD508E6B3A780A8FA0DBC68427 /* YBImageBrowser-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B4781B29919C35D2A949B67A8CA17D3F /* YBImageBrowser-dummy.m */; }; + CA05084D970F9A48B7EC4F8027D386AB /* SwiftKeychainWrapper-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DD1F18C6797FFFC1703236E67AD6096 /* SwiftKeychainWrapper-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA1E0D21860CFD2872029D5CF4E6DF29 /* SDWebImageDefine.m in Sources */ = {isa = PBXBuildFile; fileRef = F4C9870F922E4407BE5CF841338FA99E /* SDWebImageDefine.m */; }; + CA6BEF6E85FEBDD24B3845FF2252DDB7 /* SDImageCodersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3393DA8B4838F6ACE600A7599089C08E /* SDImageCodersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CA84D49AD6BC133A4CAC8238DC52E971 /* RxTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D829C1EF7480121F20D5D88502020A07 /* RxTarget.swift */; }; + CB1D9D0547B7C269B858D5741FFA24B5 /* Observable+Bind.swift in Sources */ = {isa = PBXBuildFile; fileRef = B7A25DB02EE751E6D01D050A5E7B3A93 /* Observable+Bind.swift */; }; + CB25521BB6A401C4A6753F35624E179A /* mapAt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A21A112A2FAD7228F3F968043407B52 /* mapAt.swift */; }; + CB556EC39E590FCB9AF7EE22F5877FF9 /* DropShadowEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 879A2E2A67F78CCEFE0F10240CE24FF9 /* DropShadowEffect.swift */; }; + CB5CD16304F7DFDE9E0F86D62CD707F0 /* YYImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 26A79D15CF7E56AB1249C65515C36E4B /* YYImage.m */; }; + CBAA7237BD9FD30B79F84F6F0F29634C /* yuv_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 4E15CCE57FB545DAC0D33E55EBB19B2A /* yuv_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + CBC2A9E2E812EE14E54C09D33409F5E2 /* bit_reader_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 7594C627631107EC787B010DDB216F87 /* bit_reader_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + CBFC7E7CC7AA70EC3A3635B0727979C9 /* SGSoundEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E6F7400F823325A0BA8E1444E705B35 /* SGSoundEffect.m */; }; + CC2CEFEFB392E2AA75040A63D04B2400 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C469C15C143DCBCAD26D2F80E2A8BAD /* Atomic.swift */; }; + CC38F0303BE0BFBF1E573561D01FB082 /* YYSpriteSheetImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A8697B4ED19909AFD6C7558CEE8615F /* YYSpriteSheetImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CC63E9DDAC7230E3EA8ECB73B9E0DA13 /* Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50B69BB9C494FCADD9F52F68B4745C13 /* Filter.swift */; }; + CC705BAEC85C20B0CEA4A15B6BB39DFB /* CompactMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9F8C9DA82FCCA7DED58B4421BDDA21F /* CompactMap.swift */; }; + CC8416A27D23F24BCD2E857BE0F7D050 /* Vectors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DE5DF902C1E8080C92964EA0B0C8D6E /* Vectors.swift */; }; + CC9CBC1F47B2FBA33DD0203ED7E1CF6C /* OIMMessageElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 368D0A9669610E6142622A7EBCBB1BEE /* OIMMessageElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CCBBDEEFB29B358197D273C27B2FE6EC /* PickerTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5CAB98E979ECCA2A09B427375C957B5 /* PickerTransition.swift */; }; + CCCFCDB26235AF88D2796246E5CF01E9 /* KeychainWrapperSubscript.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2287FFA8D1569A799C7199DEACC54A2A /* KeychainWrapperSubscript.swift */; }; + CCF13D8B4B07E8E4495DAB63FD02D402 /* Signal+Subscription.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5B193016B16AF60E6FAC43E2C25F15B /* Signal+Subscription.swift */; }; + CD925EE71D8E482E486D2E5AEA77E0FD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + CD9E606578C993F9315256561691A76F /* Core+UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D4B40182162CD669ED8D1D713C1A108 /* Core+UIImageView.swift */; }; + CDBE2CF1ADA30DC0A71C28250D08EA42 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + CDDB6156405F579B06D7A801C664D48E /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = E57A882004E9DFAFD797700E1B5608FB /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CDF42ED6AF2C0252840DF2A724375380 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3FED4232B22574120FFCBC78B2130061 /* SessionDelegate.swift */; }; + CE57985823A81264B942F51EF4771A86 /* URLMatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69996CE0C975FE55FEB5941358F9A2D1 /* URLMatcher.swift */; }; + CE593943A9E7CF83822CF60304BCAD43 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE67D105FFA7A37148000E1CF35CB1A2 /* ConstraintConstantTarget.swift */; }; + CE7A7E5ED9E14B271B909410D101C483 /* Data+Compression.swift in Sources */ = {isa = PBXBuildFile; fileRef = 909D62EF63BD78A83AC24163EEE78816 /* Data+Compression.swift */; }; + CE8BB3B50C1DDEFF60DD465EABC40A50 /* OIMManager+Message.m in Sources */ = {isa = PBXBuildFile; fileRef = EF3AAC0045F4635A4281CCE672E15EB1 /* OIMManager+Message.m */; }; + CE9060F0B56A20DCF8151A74C7EBA537 /* TextInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = E861069B4AB76BA0BDB1C06C5147DCB7 /* TextInput.swift */; }; + CEA2225A7837701061A40BBCB37BA5C3 /* SDAssociatedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 09AB62F03517BF3D5AE88B4968C6DF90 /* SDAssociatedObject.m */; }; + CEC0AC2A77B3F8AE285DCF61F2F46E5D /* NodePropertyMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9D622A57312540E1D02274F0ACCE389 /* NodePropertyMap.swift */; }; + CECA8162BFE05143ECD1DE4225B82B9C /* CachedResponseHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D337FF64DAB0EF1DCF5E657FD4FA25D3 /* CachedResponseHandler.swift */; }; + CEE64CF0F327167627F8CC70A982EEAE /* RxPickerViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 808561ABAB1F1D752523D18D433D1913 /* RxPickerViewDataSourceType.swift */; }; + CEFB8766F48BC037AECEC6A62560BD29 /* Optional.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3541337BA25DD5A16B674D1ACD6A6DF1 /* Optional.swift */; }; + CF34C51C73AB57E0A296EB54D516C0E4 /* MqttDecodePubRel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F28E43923328EF261C416EB2E681B924 /* MqttDecodePubRel.swift */; }; + CF48E8DB6B85FEEBB58FB4AAD3F04D63 /* UIViewPropertyAnimator+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0992FBF15192FDE359109D457FACCB68 /* UIViewPropertyAnimator+Rx.swift */; }; + CF4F390AD14CD99E57253BE9D96DB274 /* OIMFaceElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3486E48D7F4ECF13A667832E910CCC60 /* OIMFaceElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CF5F437F7201F79D3CE3BDE9D879F3C5 /* Region.swift in Sources */ = {isa = PBXBuildFile; fileRef = 325E7C92D696471576D9735C82973FFD /* Region.swift */; }; + CF69896B8FC7C21E638CD5D730F91543 /* SDWebImageDownloaderResponseModifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 773F9B01882667DE86F6CA4CE8008AF1 /* SDWebImageDownloaderResponseModifier.m */; }; + CFB40BBCFE9C4381E5B367D25AB33B2A /* Cancellable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF3AD82EC39778DB621B9AC73985F627 /* Cancellable.swift */; }; + CFDB27ACA68B4C18C6DC1E51998D7623 /* HTTPHeaders.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABB48555987725F3F2DAF0B81D478F17 /* HTTPHeaders.swift */; }; + CFF0F29D9670B80E247CF63035F01759 /* PhotoPickerControllerProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3A53A26839A8CEF0EACE96727E6B /* PhotoPickerControllerProtocol.swift */; }; + D033FF8E0AE3251DE943B341D59D756F /* ImageLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B096CB908090AF2DD4E15675A33FD06 /* ImageLayerModel.swift */; }; + D04A7B430798BB15521E4D2DBF41854E /* SGScanView.h in Headers */ = {isa = PBXBuildFile; fileRef = 429D673B66BF996BECCA85690BDC4240 /* SGScanView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D0BF696EF4334C8FBB5B80CA337FE3FA /* AnimationImageProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EF0D735372E69C9AC488BD364C4FBE3 /* AnimationImageProvider.swift */; }; + D0D8491DF011B4E4EADEA80B20229F69 /* PickerResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = D479E6B7E6471A3F32550F11B6329C0B /* PickerResult.swift */; }; + D0D8EAFBEAEE4B82131FD5FB9AE6D236 /* FramePublish.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43A35A16C9716924B97B9D53A78A0391 /* FramePublish.swift */; }; + D0F33C234F469FDC4BB67C6651759826 /* Endpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41A4DBD37D4C7EDFBB298F5BFE487E1C /* Endpoint.swift */; }; + D0F6FDC7286BCC69C228CD0FBB45B2A9 /* RenderNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D185FE7B7678520832236B38A00E369 /* RenderNode.swift */; }; + D0FDD0434090177CD308ED76602AE455 /* Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF48C90544457D818A3293740E7D49D8 /* Rx.swift */; }; + D10EDF998CDA6852F82760E28E8F091A /* IQTextView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 57E3B3CB9A7E71E3C41DDC8AC8973B74 /* IQTextView-dummy.m */; }; + D11C5FB6E97D1D93FEB7C07241BCC721 /* EditorImageResizerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D1166499BF80F225745AF3A61670DD /* EditorImageResizerView.swift */; }; + D13238323C808103383280B48D9FF833 /* Materialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = C066FC22BEEDC8272BC2A1BB6454B72F /* Materialize.swift */; }; + D1B32297F53DAC71DC34649E3A48CF32 /* BlendMode+Filter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 423CB5BAFBC5B1B7B8867FCF7091EAFD /* BlendMode+Filter.swift */; }; + D1BAD9273AE3CBA8BE215DD234ED0641 /* AsMaybe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30CCA1EB71E8556A17A5DB3D0EF72902 /* AsMaybe.swift */; }; + D1C08C6ABA5A78800C160E54BA22FA50 /* UITabBar+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73D10EE0B3B95755803C56234B8C194 /* UITabBar+Rx.swift */; }; + D1D3D33D88845292F2024C488E0D6A73 /* ControlProperty+Driver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DBBD891BF6C368D4AE331AD41909336 /* ControlProperty+Driver.swift */; }; + D1E29D4E3A8F4E6EA0802C90B0729BDE /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6658B8DF65726B2667DA2082D95CDE2C /* PrivacyInfo.xcprivacy */; }; + D232B04D611FA4C1975092C04E45C9D0 /* IQKeyboardToolbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC7B8DCEBB0FD4064FFEAB1E9BA967D1 /* IQKeyboardToolbar.swift */; }; + D23A8B089BE2FEAACF5AFFA9451E7139 /* AssetLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC9713B9525A20943182AB6D5E22A57F /* AssetLibrary.swift */; }; + D25CE6003CD20B30B691ED7372087613 /* RxPickerViewAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D88363A45076A8089140ABB4169C44BE /* RxPickerViewAdapter.swift */; }; + D2854184492AB0652C029448967FE129 /* ServerTrustEvaluation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3BAA05F975BDBFD9DB5397876D7BA25 /* ServerTrustEvaluation.swift */; }; + D28C6561309CE8EFCE535410C20898DC /* LegacyGradientFillRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3538D5D07C7C1EEA48969493103616C5 /* LegacyGradientFillRenderer.swift */; }; + D298D386913468C9712081456C60D77C /* GradientRenderLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 406F8443BD9B36DA3D96980140325A1D /* GradientRenderLayer.swift */; }; + D2A5F87B90C178639FECC0A3CB42978D /* RxDataSources-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDE862D7BF7002E18408BEC71411A53 /* RxDataSources-dummy.m */; }; + D2AF9A7FD73B95960FDA4FD06C4BED08 /* NSObject+MJKeyValue.h in Headers */ = {isa = PBXBuildFile; fileRef = CF0EB9FA6D0C021B52847CA29ACE00CF /* NSObject+MJKeyValue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D2C6284381E6492284EBABC8369CF5AF /* Core+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C08D86D054AFDEF0A223CD7A4B5015B /* Core+String.swift */; }; + D2D20DB2826B591D39A66F05E59AC05D /* FloatValueProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F52C3A02F01324899BC12175E83B1E /* FloatValueProvider.swift */; }; + D2F694ED8F2C032D38470A9A2EF24969 /* apply.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EB524C0849E4B0FDC0EC4D3FBADF657 /* apply.swift */; }; + D2F85BB681E8EF92A4CCB24E4DF6A99C /* CombineLatest+Collection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A05278B9761105500CD055B4C550BDC2 /* CombineLatest+Collection.swift */; }; + D32B9186272E22BE3BD2B51CFC481173 /* LottieAnimationLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 073E1802D9E834D19ABCCBDA089E92AB /* LottieAnimationLayer.swift */; }; + D349A9DB4770091311275B3791EDF129 /* Differentiator-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F2C087558ADE98640782FDA625F779D /* Differentiator-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D37E5FCE8CD9E5458533FF847C6CE6FF /* RxSearchBarDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9338849C2BBC91DD9D38114527BD13B0 /* RxSearchBarDelegateProxy.swift */; }; + D39ADDADBD9EBD47CC36026EA6F1633E /* YBIBCellProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B8BEC335BBBFC53C5753059CA075FB3 /* YBIBCellProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D3C863454612C752A1A4133C64972A5D /* DDContextFilterLogFormatter+Deprecated.h in Headers */ = {isa = PBXBuildFile; fileRef = 768284F94C04D4AA181C44C6DABE481C /* DDContextFilterLogFormatter+Deprecated.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D4218DA55B2BA45937589200CC0DF1FB /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 652AFE78F8E551FC43A6A45DC83A3681 /* ConstraintMakerExtendable.swift */; }; + D4B981D7F517394A1CBA2BCDE4B01A01 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + D4F312B997FAF67C930BE4A29CF47CB7 /* ShareReplayScope.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC6AA20493473721AA86C0A1A50A8DD /* ShareReplayScope.swift */; }; + D4F5C37FC3D64648FEC360903AF1FDF4 /* RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6092F696CF83DAF2A79FEC33407A7B6D /* RxCocoa.swift */; }; + D524921E7AE9C9CF9326E7DA8F80A034 /* EpoxySwiftUILayoutMargins.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490335440F75C578775EFDF160BC241 /* EpoxySwiftUILayoutMargins.swift */; }; + D52966A0BA4ADF8470C6E99A4A2D2D8E /* yuv.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F648C5A78D49866F4428026C3DBC0FF /* yuv.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D548E4E0D9121E18DA31F2150791F9AA /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82C0724C0421CBE94F5889AF088B58AD /* Image.swift */; }; + D5A2B190C4A0490CAACAD3C4FC76531D /* Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FC3E4E3FE9B243927547B8B3D39931C /* Concurrency.swift */; }; + D5BC75187BC76C9D39D22066FE4E2A83 /* YBIBVideoCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E70EBF8D3A2110BAE7AB2F5C0FCE6B7 /* YBIBVideoCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D5D2B4102317BFE08EDDC3EA2E5C187F /* picture_tools_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 103B0BA9D30353B2A3AE6A3E4D345958 /* picture_tools_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + D5DBCB44CC01B3265CB5691D80FB1CE2 /* lossless_enc_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 165FE2BA9D7A569098A2DD6DEB322A92 /* lossless_enc_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + D5E8C734FD5A89DE65990747FB71E3D4 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + D622FEEF75BE9D0AE9655CD5BB644E74 /* DashPattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC0DEEF56E149FD1D1F4844450CEFA30 /* DashPattern.swift */; }; + D62E8EBC82FE2A4110091499EB72C052 /* TAPageControl.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EEC0659E54BABA5CEDC5C8D6F2B82C0 /* TAPageControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D63AACB28313CEB9B9465C50A5A23892 /* OIMLocationElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CEFA599307C4B7B9E0ADBD31EC1E745 /* OIMLocationElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D63D5497A20087AF148E0E16581A8572 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + D655E5D2240DAD66E04E1EEC16BC6EBB /* RxCollectionViewSectionedAnimatedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFC9B638004387C6C5A45619A8A5B2E6 /* RxCollectionViewSectionedAnimatedDataSource.swift */; }; + D663837F4347AF58660EE6F7FD426ECE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + D6748A967D1B41C6C74B8987F21CE201 /* OIMCallbacker+Closure.m in Sources */ = {isa = PBXBuildFile; fileRef = CD723E5D168E0DB8A0F018B2A3F37D7A /* OIMCallbacker+Closure.m */; }; + D6B15F2F110BC58F7635A9FD7A985C79 /* IQKeyboardManager+ActiveConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCC1C19DDE1E49C438978C0B7E9C33E /* IQKeyboardManager+ActiveConfiguration.swift */; }; + D6C50646DF1E6DFE90F59F1DD2EF6104 /* SGPermissionCamera.m in Sources */ = {isa = PBXBuildFile; fileRef = 27AAEC8EEACDCAE86C246C18B522A943 /* SGPermissionCamera.m */; }; + D6EDEA4B0E659AFF6E7077B418A69EA3 /* encode.h in Headers */ = {isa = PBXBuildFile; fileRef = A21AF33BAC1856A8747F2733F50DB38C /* encode.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D6EFA9EAA562143F338EB164836B7837 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + D7047855F58ADD6E380310E6715EE862 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C946A52BE769027A887483647665E8F7 /* PrivacyInfo.xcprivacy */; }; + D78090BCD2C27C2F0755E5F2075AD714 /* HistoricalSchedulerTimeConverter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 482D2B3E2E595AC7494A2C02FBBBF93E /* HistoricalSchedulerTimeConverter.swift */; }; + D78511BCB71209310E67BFD758101868 /* VideoCroppingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88F9C67E13D04AECC7D6EF209630A8E3 /* VideoCroppingConfiguration.swift */; }; + D788BA4B9E8186271BA75CA52B30502C /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4BE6176D5BCDA6C689675AD9CC5D2E6B /* View+MASAdditions.m */; }; + D82846F53EF89ECC62238779ED046B72 /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = E667E711991991D7861A26A9AAD09227 /* Decode.swift */; }; + D82A0ABF3F863CDDE336FA92E16862D7 /* DefaultsObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6671E4DAF2E9CAB55C735355A9FEACF /* DefaultsObserver.swift */; }; + D868C392BDB9CFABF97973A998C5AA56 /* SectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69233A166022F4FAA2349D49017EE68A /* SectionModel.swift */; }; + D8B1F69BCF2B8262D5E9E576E59ECBE9 /* NetworkLoggerPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B46A5D19E97AE6984F675B88762077E /* NetworkLoggerPlugin.swift */; }; + D8C1C36499AAE21BC329AC0313715AB3 /* AnimatorNodeDebugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 312BAA0DB116CC685C2FA70D3B0E3B3C /* AnimatorNodeDebugging.swift */; }; + D8C5939E07C5F477891D6DB0FF2016EF /* dec.c in Sources */ = {isa = PBXBuildFile; fileRef = B22FE5811BBCC2B3F4C41290E2AA14F9 /* dec.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + D8EDAE77B19B3E8930DCFF4E9EDBF136 /* Mask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99527D922C5842B63773D4E636CAF2A6 /* Mask.swift */; }; + D8FBC2059AFC33C299D3ADAE97C9A431 /* PreviewLivePhotoViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 925963B6762F7EDD3F4B025942C781DD /* PreviewLivePhotoViewCell.swift */; }; + D8FE4883BF58160CC625580FE1FF2D8B /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 0A34DFF17E01BF9AA5F87F3E3FADCC7B /* PrivacyInfo.xcprivacy */; }; + D90607B4E56247B19B14462E487BA86E /* MJRefreshNormalTrailer.m in Sources */ = {isa = PBXBuildFile; fileRef = 145E202321E3781E1B84D6204FD9B9E0 /* MJRefreshNormalTrailer.m */; }; + D90DED0F5638B1C44F4B6C62D600D240 /* MJRefreshFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = E8B80E9AC9A0222E9274AA651470F3F4 /* MJRefreshFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D90DF1376DF5E2EA644313BCD2E03058 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7307E2DAAF66A2DA284CCE8C33EB8980 /* MJRefresh.bundle */; }; + D912BAA92B710E431466F00CFD74B839 /* msa_macro.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A60F1CDF890259E3C6967417E873B4 /* msa_macro.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D96A36BA5D4435B9B249FDA8358A0BFD /* Archive+Progress.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6DF2C5453F49CAFE051B8FD6D17FCA4 /* Archive+Progress.swift */; }; + D96E2F7DFB6141B690667AFEC61FA224 /* SDWebImageCacheKeyFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B0CEDCECE8F6A5932A40B0EE599F5F8 /* SDWebImageCacheKeyFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D97455C3D7C4CEDBE2EA90B79277BB72 /* Take.swift in Sources */ = {isa = PBXBuildFile; fileRef = 721C8DFB2C522F383CCF147731D6C8CE /* Take.swift */; }; + D99628FF1D127B3AAE385EDC25AA3BD7 /* SDImageCachesManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BD6854C4461EA80B767FF2182ED6EF2 /* SDImageCachesManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D9D0A2F87519BD84F4B2B2D5732B0AB2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + D9F3D624752DB3F5F2736076F8F1B116 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + DA04AE61AF2464F87B87303CB25A8E8F /* Core+DispatchQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = F13ADE691A62AB1DF886EA4F7FD67E96 /* Core+DispatchQueue.swift */; }; + DA07A5D6764940E785E70EDD08C5E1B0 /* Plugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 92EFF684FDFA11D0956B96DD55C639A3 /* Plugin.swift */; }; + DA2EA670260D4E9CCFC579A878E5B4ED /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 904B48D203DDC37F7BD33F40FE034271 /* PrivacyInfo.xcprivacy */; }; + DA70ABA313645BADFB5BC13FB995DCBA /* DDLog.h in Headers */ = {isa = PBXBuildFile; fileRef = C34E1FC5A28BDD54E39AB0B3CD4FE159 /* DDLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DA77D72DA1A4D08A1241EE9DA11D4F12 /* SGQRCode-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A02BEE14F8A62CDC43C3565AB0E2869 /* SGQRCode-dummy.m */; }; + DAACB6C433D86B6C98D2F66375D35A79 /* YBIBImageData+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 147AA59E39E9EAB2C4AB74196F84BF4E /* YBIBImageData+Internal.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DAB03D435BA487BD030524A9F9312864 /* yuv_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = F51E7DE30BC2B5251F76EC0B770D2D23 /* yuv_mips_dsp_r2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + DAE3C50192F194E9C9261FE8E2D6747B /* IQKeyboardReturnManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA8120E1B44E61CCB3091659BA9A096D /* IQKeyboardReturnManager.swift */; }; + DAEC2E2F152FAB589719CC460085DB00 /* RxPickerViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEEC9F1860BDB5691ECDE33AB473E52E /* RxPickerViewDataSourceProxy.swift */; }; + DB17C9319D2226DB80AFB60844D61209 /* MemoryStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10E286D9023E96E911902F5ADE064F52 /* MemoryStorage.swift */; }; + DB19161ADD3C766572D982E840738225 /* LottieAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 532E9030A15F6711B544C8BEAAB3529F /* LottieAnimation.swift */; }; + DB269D8700C7F90AFF5D0BAB45B0F8C4 /* Data+CompressionDeprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 461F530A1AE9AF2A8B01A2FA5A394E06 /* Data+CompressionDeprecated.swift */; }; + DB8A9051CC18A860342CA0B573718EC8 /* RxTableViewDataSourcePrefetchingProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38BE8955A2F8AA0C1F76F5B85C29BB9B /* RxTableViewDataSourcePrefetchingProxy.swift */; }; + DB9FAD58D5D5101F31C30C8373E21F2E /* frame_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = B01841AD7F4C16405F1596D4FC42C0B7 /* frame_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + DBA4803F4765E1650B8C6841157F5D73 /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59D37D7B8A54CCECB3D3FF11BA59989C /* ConstraintPriorityTarget.swift */; }; + DBA9500CBBA5FF6FCBBA115AE4D12152 /* NSLayoutConstraint+MASDebugAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E30CE0389A560241FCA8FE83FE0B440 /* NSLayoutConstraint+MASDebugAdditions.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DBC215E63518692C01829C43DE30730B /* alpha_processing.c in Sources */ = {isa = PBXBuildFile; fileRef = 33F3EFA42D26365BF6A13F0710A58980 /* alpha_processing.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + DBE151E83EF0795D63B966BA72493B35 /* histogram_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FCDFD3479752F715448F3E88166C942 /* histogram_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC116AC0C3BC808A198B9C1704FA8C84 /* RequestInterceptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 682DF2A9B09E750ABE7655327548340F /* RequestInterceptor.swift */; }; + DC1380F89C13E6AD588136A434F3A572 /* OIMFriendApplication.m in Sources */ = {isa = PBXBuildFile; fileRef = D7B97434434069C9B201866FE0542B05 /* OIMFriendApplication.m */; }; + DC173178DA7CC9561947B30F462745C4 /* libwebp-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 385A5B781881CF05DA0885623E2F500E /* libwebp-dummy.m */; }; + DC23ABA9F3B310276C216C3FC92817BA /* WKWebView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFDC09EB16E3515D1F2F66533C832822 /* WKWebView+Rx.swift */; }; + DC2A18D6757FC43108332EBAF1A08533 /* SDImageTransformer.h in Headers */ = {isa = PBXBuildFile; fileRef = B710990BD7BFF0A6D6E01A535C8AA8D1 /* SDImageTransformer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DC3EF9ED530ACDBAD56AC2C72449546D /* SGGenerateQRCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 40BC21F8CF8714BDE827D23C7C0AA1FF /* SGGenerateQRCode.m */; }; + DC50C14598B1CF4EE405912D086A2058 /* LottieAnimationHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 153DDDE8AAB0748444FFC4BC506F42BB /* LottieAnimationHelpers.swift */; }; + DC74FE4A54ABC1014D4F43EE30D080B9 /* AlbumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2065605DBD09C2F4550B75E77F9B778F /* AlbumView.swift */; }; + DC88CAC3EBDC2E67DA5975EF610F3BB1 /* GroupBy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761EDCF2FCF03DCA3D4AAE68F1AFF4F6 /* GroupBy.swift */; }; + DC8A5E54801009B75FAF7209FC87940D /* vp8i_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = D7E9B43B55164D16B6F6795C9CB4ABD4 /* vp8i_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC9E902FCFE39F70AEBDCE8442F7CB4E /* ssim.c in Sources */ = {isa = PBXBuildFile; fileRef = EC770E47AC11ACA4E82F3988F665DAE0 /* ssim.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + DCBCF1B3F76B2B74EAA05867FF15DE3A /* PriorityQueue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869279DCDFEC7F94D90F59FA986A08DE /* PriorityQueue.swift */; }; + DCC91EE07AF8DA97BEB7C13435F86DCA /* AnimationTime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77F14C85DC9D13A5DDC84E594EEA8EA7 /* AnimationTime.swift */; }; + DCDF1EE1680BD843F511BF67F227FAE9 /* PhotoEditorViewController+Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 745F624AA53CEDAE08D3E89BB5C6DBED /* PhotoEditorViewController+Request.swift */; }; + DCE4CD952E671E4FD854F1F6699CFAFD /* DefaultsBridges.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDFC757F93436D274F31BEDE5022C7AD /* DefaultsBridges.swift */; }; + DD086708752F472B0AB078F335BC4F69 /* SDImageCachesManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 40AD8D7E0434ABAC40ADD7301AF66559 /* SDImageCachesManager.m */; }; + DD19644625120193D3829CD28947BD5D /* sharpyuv_cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = DAC1E692C3BCF796EC57061986DABEAB /* sharpyuv_cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD46BA20B478F77DA75007964216F86F /* SGScanViewConfigure.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D40C7E7A6B409DD2DD2897EE900996D /* SGScanViewConfigure.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD576D4E4F1144C2D1429D071DF11D32 /* LottieColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57F68566C1D13B6EF1FE82022B5A1E98 /* LottieColor.swift */; }; + DD7D38B1D11219F1882E3E9DD5FA2E0E /* YBIBCollectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = BEBE1953B540829D2FA2A81822E200CA /* YBIBCollectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DD953C7254A2F9DCCF3758D6AD00F29E /* Rectangle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A1FA30BD56F8630D1EBC9B27C1B166D /* Rectangle.swift */; }; + DD95B3D71392B724B2ABC3911B276D8F /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF4F8D8EEF753E757F917C580AE90AF6 /* Observable.swift */; }; + DDAB12CDEEF1489E148C427B847F103A /* SDDiskCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B1A2F0EC904214E6975457AE08127B3 /* SDDiskCache.m */; }; + DDC0F60F4D6F186EF6DEA97F2B84107D /* RefCountDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1B69283210E0A01B746270E17822A67 /* RefCountDisposable.swift */; }; + DDC1718E80C5A12699A652A0EA10CACC /* PhotoEditorMosaicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF35938B724A76703B2E4A3A763CF031 /* PhotoEditorMosaicView.swift */; }; + DDEDEE8B19E94E46A2D70C78127236E5 /* Kingfisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ED7FC1A30A3ECB192352380A7A874A3 /* Kingfisher.swift */; }; + DDF61BEA9AFF4E1CFD53D4B84D119DF4 /* AuthenticationChallengeResponsable.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCE67E867E7D87D4BB2761D5775A1CB2 /* AuthenticationChallengeResponsable.swift */; }; + DE3C8D3A427873A89B34556C4A2A0729 /* sharpyuv_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 41E3FAAD2234BC50D877D8712F227C53 /* sharpyuv_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + DE50BB83890C5693CFF24F29B5FAF6DF /* VideoEditorPlayerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C25F665BB457D3486FF8820D7DAEFAD /* VideoEditorPlayerView.swift */; }; + DE553B8C80DF65038D90C24727ED63AA /* UIApplication+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 843DE0B172D56D4DE04CED8FE9C2717D /* UIApplication+Rx.swift */; }; + DE61A14BAFA5A642937ED99AED8A3BF0 /* SDWebImage-SDWebImage in Resources */ = {isa = PBXBuildFile; fileRef = CF1281E58AA1045D4B7F33FC56691C42 /* SDWebImage-SDWebImage */; }; + DE98ECCCA7106A4EA575EF34830D41FF /* MJRefresh-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B80BF427EA0435A2D0917C4A28181F7 /* MJRefresh-dummy.m */; }; + DED29495981A4879132B212D29F011E0 /* SDCallbackQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E8B5C0110F4223411274CE6A011F364 /* SDCallbackQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DED9ADFC8CC65243FC54E008A853742C /* MJPropertyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = C1B656B97F0E6F92AF27F46991440302 /* MJPropertyKey.m */; }; + DEE9768C736DE29A649C5EB71C4869C3 /* CollectionViewSectionedDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F1DC11660BCCAEE4264510FD65F5749 /* CollectionViewSectionedDataSource.swift */; }; + DF041B324D1AED0B879B8F3101A5A590 /* PhotoEditorBrushColorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C4E81CAF61B893EC5CDB1338F44D9DA /* PhotoEditorBrushColorView.swift */; }; + DF09A95BFB1D9368C68F9395315F65F7 /* UIScrollView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDCD962236713536EFF122F0B8A174DF /* UIScrollView+Rx.swift */; }; + DF207BC23177F7FAF26DFAB9168B6216 /* MeasuringViewRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480FA25861EA5315A0609447A82AA5C2 /* MeasuringViewRepresentable.swift */; }; + DF28F9B66D46D3CE0A315A19E135C16A /* PhotoPreviewViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BDCDDE834F17A8AC6D94875DF09C0F2 /* PhotoPreviewViewCell.swift */; }; + DF2B15402CE105F5A8CE48BBDCFFD5DD /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B3260A1DE9EA63DA5199E6744363682 /* MASConstraint.m */; }; + DF2DA245F12E9DE9D36D5C96CBA0A0EC /* Timeout.swift in Sources */ = {isa = PBXBuildFile; fileRef = E103C1EB95D05A5113B2717FBA2379A3 /* Timeout.swift */; }; + DF7DC58EB9217CBF2B6DA9EB3B4F5F6C /* OIMFullUserInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B15C26343D5A8DE9B5A7A36BA7145FD /* OIMFullUserInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF8AE419C1126BF0783268F549EEBF29 /* Bag.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC8CC7E34BF7AAB97DB81ECFAE7D3BA4 /* Bag.swift */; }; + DFAE5F0CFCD5B6A5DB0E2F66A9E0B64C /* NavigatorProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAC22EE2D24B29FFE5B322BDA4188153 /* NavigatorProtocol.swift */; }; + DFB334203FED63EDC52845F9A5914BB0 /* Just.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAFFEE4F2543B08BDE4F5A2D9D9F9D6F /* Just.swift */; }; + DFE529F0C85C10EF361F62017D722E76 /* MainScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = B29D086F596B924BFC34C5571585AB8B /* MainScheduler.swift */; }; + E024308BE172CDD2B5057109BC5A5F5D /* EditorImageResizerMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 422984CB36725E3CF2CFC36BC69EC1FE /* EditorImageResizerMaskView.swift */; }; + E03D4CB7A199F25F35C98875B44AD563 /* distinct+RxCocoa.swift in Sources */ = {isa = PBXBuildFile; fileRef = B10E608E3748FA5D17E35C221637F5CB /* distinct+RxCocoa.swift */; }; + E080E4E10F9EE84CF6A4EF650744131C /* OIMGroupInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = A45C3161BC7648F62303036FF3B350C5 /* OIMGroupInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E08450720F1754962C0C0528ABDAFE7C /* EllipseAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CCA2FE51D5FD515273072EB283E8F5D /* EllipseAnimation.swift */; }; + E0C9E5D8EE254CF424930A41843A57AD /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E4DF96474119089881BF2A330AB1728 /* Timer.swift */; }; + E121B3FC7EB8A408935C0B5472538F7A /* Infallible+Concurrency.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED390F269F79FD6E16BA0CEEC761596E /* Infallible+Concurrency.swift */; }; + E122F98E77B93BE2E6D39CC3A0816028 /* GIFImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D7719DE8DCBAF91163BE806ED694652 /* GIFImageView.swift */; }; + E133D5294A2132BE10DD88FDA067DFEC /* SwiftyUserDefaults-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 410BD1B04CE17FB86D3C4FB7427E2E8A /* SwiftyUserDefaults-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E143494B69E3B18FE61C76A73A5EE775 /* DotLottieConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = A166E25A3C3451C37A3AB8D76235D632 /* DotLottieConfiguration.swift */; }; + E1734E56DB48E6F238408C9A232C7051 /* UIView+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C71DAEAD1ACD3A2CF92620FB0B243ED /* UIView+Hierarchy.swift */; }; + E18541685B292228D035343813E12E12 /* LayerFontProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 06C8EC9CBE5189937E85D41906662CC4 /* LayerFontProvider.swift */; }; + E1D5E750D0967821FCC5E697AAA2CDE1 /* PickerTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E579505C72B45CC000E8E91927E7A5B /* PickerTypes.swift */; }; + E1DE69F6BB6235A6EDB6C99A184BEDB4 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C4FA82069B6C1E054035B43140BE929 /* UIScrollView+MJExtension.m */; }; + E24632DE716A10A6D99CFA1A4F3E2FE3 /* Binder.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF1E1A17DAD75DE28EC1283BB21F7AD9 /* Binder.swift */; }; + E24730B2A18DC39C2BE4997ADD4A7598 /* PhotoPreviewContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 682EED78D7F63416FF9CFDCA15743DCD /* PhotoPreviewContentView.swift */; }; + E270921E974E7D5ACD5BCCF42936AFD6 /* DidDisplayProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3412FCB9DBC857F8F90239397E20ED /* DidDisplayProviding.swift */; }; + E274BA92F9C6AA938EF04CE7EA38CEAD /* RequestModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9DE6D779E74364FC3F954FDE24695C3 /* RequestModifier.swift */; }; + E2D61561302F31F37F4AC7010B4C665B /* ViewProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = C86BA257469B7EDB7C543D6521539A53 /* ViewProviding.swift */; }; + E2EA5D15C15D16580E4A7FCC41694567 /* FramePubRel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17D15555C12B0AD21FDDB995C7FF080C /* FramePubRel.swift */; }; + E31EEFA075313CAF17BE7EB83C92FA41 /* BehaviorRelay.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D82C83902BC9F0FB3834FA90DDF005 /* BehaviorRelay.swift */; }; + E35F47135B73F9286B07B267CB98513B /* NSTextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83BABF10DDCA2F56F8F22F97844ED531 /* NSTextView+Rx.swift */; }; + E37671A03B4C17A1CF3766A6125833BB /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55A85B8F88C0FFFDA82F7292E474114A /* ConstraintDirectionalInsetTarget.swift */; }; + E39D20554396F3279704BFC67A045D86 /* filters_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 3A5E30809D431C734969D9A65F160C87 /* filters_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + E3D779DEE753C0B0D33BA8E73A980265 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73A9AFEB67D867F54621A8B038E14078 /* ConstraintLayoutGuide+Extensions.swift */; }; + E4300B4836DC8B47F8D09A90DBD71587 /* YBImage.m in Sources */ = {isa = PBXBuildFile; fileRef = A10CD0E8D82FD587766DE98C4C52DA77 /* YBImage.m */; }; + E4A29F8C3ED424A7BC912DB796D03AFB /* UIView+ParentObjc.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1347E158DD6325436FEA7A90CCD478A6 /* UIView+ParentObjc.swift */; }; + E4BEE8283802F8F8B17F1A1BBBD3CDE4 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2E98E412F65A94B34FCD32839C494DA /* Session.swift */; }; + E4DE6EEDF2754E430385AC1CF42D8413 /* RoundedCorners.swift in Sources */ = {isa = PBXBuildFile; fileRef = D15EDFC11F19BC7A78A242A7BC5BB452 /* RoundedCorners.swift */; }; + E51A276849B087A22887CEF931F178C0 /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC356DA22FF4E1FD88BD44E203B78566 /* ReplaySubject.swift */; }; + E51D1D6DB3179622992C91A1DFE90D5F /* GradientStrokeNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6586E0831A482865F4AE976D099C02EB /* GradientStrokeNode.swift */; }; + E52156D72B247DB3D747B122553BFB69 /* huffman_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = D0DE2E7445B1ACF99F6851237BF43962 /* huffman_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + E54BF0D07C2708D631DC6EC9D9A6F752 /* NSSlider+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11C1ACD4FF2DDE99653570E86A791A22 /* NSSlider+Rx.swift */; }; + E5B057BC87284367918B2DB9CA084B4E /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = BA6D541DD91BB83D988956E0E46B9C27 /* MJRefreshAutoGifFooter.m */; }; + E5BD9E38260CFB54191D2F4DE6C993B6 /* DateInRegion.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA082DF76C288109730ABA3263B7E26D /* DateInRegion.swift */; }; + E5C456FCAC3DA10DC08919AAF20A3626 /* IQKeyboardReturnManager-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D50006193AC7916C53011FD30B6B91F /* IQKeyboardReturnManager-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E620832870D38BCB4241125AC2500F7D /* dec_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 815A9A68FC8F5D4B8295C60201EA3607 /* dec_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + E650CA91216B98D166FDDA405561CEF1 /* CocoaLumberjack-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B82EBD3E153DBD61BEBCBDBDA0605C7 /* CocoaLumberjack-dummy.m */; }; + E6531A60CC8B48F320DDD76C480102BF /* PhotoPreviewSelectedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC6175EFA83D8732500292A8A30189C /* PhotoPreviewSelectedView.swift */; }; + E68D8B20567D40A88FD6D438E2DEC82A /* color_cache_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 41CEA18D25AEC926DA2658E42254B462 /* color_cache_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E69689D02F65E151584D4699213E0763 /* SDCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 33B78742EEB2B26C6433B045E4C130E7 /* SDCollectionViewCell.m */; }; + E6A94ADADA07E8F62C0671EDE148188D /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B419226841037EB005DD3984345CE25 /* LockOwnerType.swift */; }; + E6A94F529B95809112533914EC89CF36 /* OIMAttachedInfoElem.m in Sources */ = {isa = PBXBuildFile; fileRef = ED2816CD352689684AAEE79226E49047 /* OIMAttachedInfoElem.m */; }; + E6AC3AF0CBAA1843B13F34AB5CA491E7 /* OIMManager+Friend.h in Headers */ = {isa = PBXBuildFile; fileRef = 610421EA2DB40C1997A6697143D26FCD /* OIMManager+Friend.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E6F716B03ECC7EF34A1D0584DCDC6C0A /* SDWebImageError.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D1007188695E58DB2F07BDFDF18D71 /* SDWebImageError.h */; settings = {ATTRIBUTES = (Public, ); }; }; E6FE2596512201193E95FC356C6E3351 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift in Resources */ = {isa = PBXBuildFile; fileRef = 8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; }; - E774F03CFBB7FF4A59157E694D930A02 /* EllipseNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAE7582B7C4BC8106041A1A832420987 /* EllipseNode.swift */; }; - E7AD71845468E1609A0CAED1C60085D5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C77D66DCCBD20AA11966F53C867FF4FB /* Accelerate.framework */; }; - E7D06F2DBFA16E219746D0E11E60A501 /* KFOptionsSetter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 185E9EEEEA7B324631291ABE87B55BF9 /* KFOptionsSetter.swift */; }; - E7DC25B399D700EFCA1E2F1E9715AF1F /* Core+UIFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C262EC7FE9B7C5853A9BF656E7B4C31 /* Core+UIFont.swift */; }; - E8012394A10B6AC7DA2195984F9504E9 /* Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3959E727B7E6D436C58E8154A7EBB3E0 /* Defaults.swift */; }; - E84C30FA4A382D9C330E87FB32C009AE /* IQKeyboardAppearanceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DC4BD17942F389D44EB543440F08338 /* IQKeyboardAppearanceManager.swift */; }; - E86106435DADBB30165472A7953A739C /* BuiltIns.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66DF04928172288AAF39431F1258403 /* BuiltIns.swift */; }; - E875CFFB88DBBA0D72C4B7FC7A4C100D /* ViewDifferentiatorProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3189E69539A5AFB420AA7887844BAD4F /* ViewDifferentiatorProviding.swift */; }; - E895F57BB625331252C6901B201B3192 /* UIViewConfiguringSwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC3798F5D6C9EBC45E8AABCABA094C90 /* UIViewConfiguringSwiftUIView.swift */; }; - E8BD9A6BB79FF25464A9330F76C98A16 /* Decode.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0141EC31CE079520632B9192FA59C41 /* Decode.swift */; }; - E8C960787E7B8DE1A914786EC04E8917 /* PhotoCroppingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2ED6C4C1077B91FD00A25B4E57EA4C75 /* PhotoCroppingConfiguration.swift */; }; - E9043D5B49AF869589B1850CF8795EBA /* EpoxyModeled.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FF7D4D50D65E9D4198254BB3BEA4CA0 /* EpoxyModeled.swift */; }; - E930A5612DC6D120BE040AD17C6D1BCD /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BFD69CA959D1A9B459B375E711D2513 /* MASViewAttribute.m */; }; - E95FE85B929E24CD0B18BB521969C9B8 /* YBIBTopView.m in Sources */ = {isa = PBXBuildFile; fileRef = 99DE9108716840253E3172EC905024FC /* YBIBTopView.m */; }; - E97E56E8F38113E2CFB63B3A66953903 /* endian_inl_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 7410C1DF2145BEBE0C7CD5DAAE9F1ADB /* endian_inl_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E98C3D7A8430639438912254DF730791 /* ColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73B1D5C56726F64AE0476C0C1DE058EC /* ColorExtension.swift */; }; - E9AEBBA488E8832DA6CBE9881DF9DE95 /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3359376B97F44EDE8A748CC630F6B455 /* ImageProcessor.swift */; }; - E9D8AE39CEE9529B164E3516235BEE4C /* UIControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F73FE9E51AC36245FC54A1CFE8E872 /* UIControl+Rx.swift */; }; - E9E2076097D04B8389FA7FB9FB975527 /* MathKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4F177FBFF8775FCFBEBEB5746A1F62D /* MathKit.swift */; }; - E9EF657E848E7B326050E0C9540BE483 /* UIImage+MemoryCacheCost.m in Sources */ = {isa = PBXBuildFile; fileRef = 2707006BD41B87DF0C15833B3D8A4253 /* UIImage+MemoryCacheCost.m */; }; - E9F1CF2BE311C33A9629B0EC6D019F3A /* OIMManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5393BC5A87C5F37D204A620A3F1979BA /* OIMManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E9F8F68A964586D21DD22030F1D85BF2 /* SwiftUIMeasurementContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12AC14DB654B07B92FC565359BB24729 /* SwiftUIMeasurementContainer.swift */; }; - EA4323194CD798F0B5146EFF75556E5C /* YBIBWebImageMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AA9CF87A7F0EBCDA4F896271A17A3F8 /* YBIBWebImageMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA4EB4A44D9B8DC03032A43AB3CF7EFC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - EAAA0041F6A0DB1039D328B35FF5EA09 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4183C044A4BC7762B0A05245AEA4D915 /* SessionDelegate.swift */; }; - EB108AC1D4E177FFF0A53ED3DEA2E6C9 /* Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64475ACC13391CED0E8F1895DFDB3F0E /* Sample.swift */; }; - EB742B4A25F7E5F707BBEDCD8546D01F /* SolidLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F23207FD91B4D58996E1529198654DB /* SolidLayer.swift */; }; - EBB7D34FFA666C9BCF2FE1D049FB225B /* lottie-ios-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFE58BD47F6BD0FC9FB7D6FB1471943 /* lottie-ios-dummy.m */; }; - EBC4FC6407FF65199FF804F8076DE315 /* OIMCustomElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 030E7B5E65DD005483DE4FC112390EBA /* OIMCustomElem.m */; }; - EBF34312A1F64FE81987440230E5BC49 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF44BFBC7F4569C26187AEBF6FB9202E /* IQKeyboardManager+Internal.swift */; }; - EC03F99E8ADF9C5EC34E14CA4F994B6F /* filters_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = B68EA6BB85F8C760488A50BDCC241910 /* filters_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - EC36C29D705F45E956A16F0E3C8A0D2E /* LockOwnerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7B20090C59B33E3BAD85392BE2A2BF9 /* LockOwnerType.swift */; }; - EC8693D888647A7076ED1322373E8C39 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - EC8E84A8FFADDCA562A8608D141D9027 /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = E97AC31A9AC2AFCB0774AC162D89D243 /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EC9B34262AED632D7EFB49804337648E /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C0385510E7B13F5AF7511624C9E5C9F /* Masonry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ECB3F9C6F6386AF7AB07525F6151CF73 /* CropConfirmViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C008E791217FF7AE2284DE4ED33D82DC /* CropConfirmViewConfiguration.swift */; }; - ECBB9D041E2943036EFF0AD5B7E63B4C /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8763DABE5287013A3C662DD1707CD9F1 /* Response.swift */; }; - ECC5C2ADC2682F9171FEA22AF10DCE53 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89FDADBEBF7D7F7E8ED56EA6D6D96604 /* ConstraintRelation.swift */; }; - ECC6B16E1B855C98636470D0151AEB0B /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 937D966D88196EC775BA025C4832B900 /* MultipartFormData.swift */; }; - ECCA7267997F18C0714C7632CC54AA1B /* Map.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97A7803B1238FF4874E59DBF1A7ADE7E /* Map.swift */; }; - ECCB9573EE1FC50A834CE1A38B186FCD /* UIImage+ForceDecode.h in Headers */ = {isa = PBXBuildFile; fileRef = DA1B465FAF1DF8179501C93F8925EAA1 /* UIImage+ForceDecode.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ECE1AFD4546BB60DCDB4FC88549B68C5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - ECFE5E33B83F4CB59ADF421AE0876459 /* KingfisherWebP-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F49EBA828878A7FD53EFD3EC52DF8DB4 /* KingfisherWebP-dummy.m */; }; - ED09C58E7663659728CE656A647A65E8 /* SDImageFrame.m in Sources */ = {isa = PBXBuildFile; fileRef = 1724A41AA97890D9CB0895E2B99DCD9E /* SDImageFrame.m */; }; - ED1AB9A592D2AE39400348BF0D201B45 /* backward_references_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = D3FAE393EA0CB065CF13EBD52B25C74E /* backward_references_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED28820C4CB92D994FB43DF2E56B2720 /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DA8B2B1E25EA9FC5AD2833490B8F5C4 /* DateTransform.swift */; }; - ED6162890A51E74E00C4D1D258D8E8DC /* ObjectMapper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 49CE288F45AE14A8ACBCB47C4E6EF706 /* ObjectMapper-dummy.m */; }; - ED737F7F6498DD3542CD014AB696A02E /* bit_reader_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 7943889E640D6E0573612C76BC2D55C7 /* bit_reader_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED9DC266977F10C47FC18E466C231ADD /* SDCycleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9167B3FF06763D714F9660F54885ECEF /* SDCycleScrollView.m */; }; - EDB55972F32B55877DEB79D38082A844 /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 5481AA91905207DFC89661643C0EFD89 /* DDLog.m */; }; - EDD1F4A31BC9F0816F25B14E0B4B89B5 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D67CAECC94DDFB066BCA8DF4BF753DB3 /* NetworkReachabilityManager.swift */; }; - EDD523987A60EECB6464615EA4734277 /* huffman_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = F4D184BC6A2082CDEBDF50A9810B022A /* huffman_utils.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - EE0F999042684CCF35B4C33A38F954F2 /* SGPermissionPhoto.h in Headers */ = {isa = PBXBuildFile; fileRef = 35375E5ADCE5DCF4EBBD0DD0B80966E4 /* SGPermissionPhoto.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE1368EC3C3660565A82A9842E57124F /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 598A7AAC951814B1308789BB200D8911 /* Box.swift */; }; - EE2CDA0384DB3DCB746E7BD58B7DF517 /* IQTextView-IQTextView in Resources */ = {isa = PBXBuildFile; fileRef = 847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */; }; - EE2E54869CCD4BBDE50899BFD5C9E204 /* GradientStroke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CE84950E22DD459CF2C5DB2783BAFFB /* GradientStroke.swift */; }; - EE6463A560321E0751B1BC18C23E2567 /* NSTextField+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 160A8AF75E876201D8C20CE7C39BEC82 /* NSTextField+Rx.swift */; }; - EE6E8FE636D2C02E3D2FC1E8555B4612 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 09772666C0AEFD8BB25B0463F2F3934F /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EED016DE8173CD38CC01D88CD2628984 /* NSString+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FA8FC41EA3473140B417F7087C0C8B5 /* NSString+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EEFDF1A3CEFCFA7C742DD8C5FE7B1408 /* SGWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = E517A2C282848FD3AE6C7353C8CFAEEA /* SGWeakProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EF04A170A4D1D4E6CEC857B6D8043644 /* sharpyuv_csp.c in Sources */ = {isa = PBXBuildFile; fileRef = 98C65967D7AEF74EAC5A85711A296395 /* sharpyuv_csp.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - EF2A6FD79AD6DCAE8D9C7A85DE3C9395 /* SolidLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3901977A60BEA76544CA1152762821E1 /* SolidLayerModel.swift */; }; - EF7B5F7D016F12532A3256D820AC1F34 /* Moya-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 86886A733B89F9C049C049AF30166EE7 /* Moya-dummy.m */; }; - EF9E5345DC68B0E0FC147DF15276541A /* Infallible+Zip+arity.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC62DE620BE171E4861A660B5110C9F4 /* Infallible+Zip+arity.swift */; }; - EFD5C4FC5F7B416762B66D92200A2306 /* PhotoError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D82AA88B834BBF20D1151E382DE67AF /* PhotoError.swift */; }; - EFE0C664AF402C2E9E6F0848F6ECA24A /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26EE58E648FD163D54D97151C69A93BA /* TransformType.swift */; }; - F02357F709F4F3A9BB4E1E6C8E88A3B4 /* OpacityAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD766BEEA3CB87371EF37EDE094330B4 /* OpacityAnimation.swift */; }; - F048EF890D150B5108DD1A531D2D9BCE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - F04EDB481BB918A84D0C80C837A9A7BC /* TextDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = B37C4EA7F5ED5F46E43C8DB7203FFA1E /* TextDocument.swift */; }; - F073660D3D3650AB86BAE8C65ACC1849 /* AlbumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 725E391E4DD80A683204D50692D49254 /* AlbumViewController.swift */; }; - F0796F08298C7D26732760C0D6F839DF /* SectionedViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38CA5BA20DA63D05E0C03D744AEB70E8 /* SectionedViewDataSourceType.swift */; }; - F08FB6404C03C32B6797A313FCFA26E8 /* quant.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F63ADBEB6601A1586154D53C923B5D4 /* quant.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F0957C2AA649E01C0FF1FF23272DBF2E /* SDImageCachesManagerOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = DB2F9EE6399F9C70D28AB93C2F3695D3 /* SDImageCachesManagerOperation.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F0A7FE48B84BEF9C4CA3A1C6CC832197 /* LottieButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD07A6AA3A8ACBCE80E15C6F1BEF8D8B /* LottieButton.swift */; }; - F0B0B551A13101A1F5906D38E5863E8A /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9923D74C7DCC4CC752F4502C4B9F4AB3 /* Resource.swift */; }; - F0C52CA4E23A1BDEC554BD572DDD1100 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - F1108DE1AB588C74E8AFAABC92E9B90C /* YBImageBrowserVideo.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CB4260D2F04BDE7B69E9332D05E23C54 /* YBImageBrowserVideo.bundle */; }; - F1305B8EDA84194160EE0DEF96C34D71 /* Event.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B4AB0B79C4A577880AC965914ABDBB /* Event.swift */; }; - F1877221CDD8FC3A3015CE7DC3A5D6F0 /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = F12FF728132D421A61C2C6BF2D0F056D /* Array+Extensions.swift */; }; - F1A18E7F3EF61BD0A0921B810FAEDAF3 /* Picker+UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 445052D7B6C3849EF4DC935731E697FC /* Picker+UIImageView.swift */; }; - F1AD95BA0DBDE87A562B836694A21410 /* IQKeyboardToolbar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BEFF4F4EB8D45BF83AE2F386D71FE70 /* IQKeyboardToolbar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F221720C4421A60C3DEF3A92BF089996 /* Scan.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE89B0E952C22E11B64A894D84F8DB83 /* Scan.swift */; }; - F24E4DA6659061237424A876461039FC /* YBIBSheetView.h in Headers */ = {isa = PBXBuildFile; fileRef = CB5ED48D1C2FEE6F9B6572BC3DC8D105 /* YBIBSheetView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F298ABA2514CA9C0132231985603A5D8 /* sharpyuv_gamma.h in Headers */ = {isa = PBXBuildFile; fileRef = 62C76DB7DA654E7AD9D4B3B2FB18032C /* sharpyuv_gamma.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F2FCD6AEA1E8BEE9FA3150109F3FD2CB /* AlbumViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9245CE764CFC8D2EE878F9982D8D7E40 /* AlbumViewCell.swift */; }; - F322F2E9248769F09DC4FBB29ACCE614 /* SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5437C08DBD79B497818F7354E847A2DD /* SharedSequence.swift */; }; - F325BEE3115C5BE3907B073DDC9F5852 /* OIMGroupMemberInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = E18772AEBB906F18A2BFD0E99C107C5B /* OIMGroupMemberInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3263D294D688533EB974E37C61F1E24 /* MJExtensionConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C8BC587C73189ADA5510B1B9B628F89 /* MJExtensionConst.m */; }; - F37BF721CA0B9907AE50BE06D750C31A /* DDFileLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = CB04A3F038AB5357DF6579E119AC574D /* DDFileLogger.m */; }; - F38ECDACE09F8DEBBDFDCB9897795E54 /* YBIBImageLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 0264AC943656AA3FA9C6B88AC02C1E97 /* YBIBImageLayout.m */; }; - F3A6D79E6A1E8864E47940113881901C /* YBIBOrientationReceiveProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 98CB8DA217C5930EC3944F99F5D655D7 /* YBIBOrientationReceiveProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3AECEF6D3BB919B3E7392942E1BC58B /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B194370CEEC58191F152D61913EAED0 /* MJRefreshBackFooter.m */; }; - F3B50A140EA5062ADD0D17F76B4FC149 /* YBIBCopywriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E591ECDB169F1C1FEA1146E243A7C90 /* YBIBCopywriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3D9CAED623B54CC85DD99EB7B18C4B3 /* URLRequest+Encoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BA7E8D0376529DEF59A4B52463226CE /* URLRequest+Encoding.swift */; }; - F446E12C0CBAA5E3B9AB03F1AD36EA38 /* OIMManager+User.h in Headers */ = {isa = PBXBuildFile; fileRef = 89EFF37CC53F11B002498B5B55AB037F /* OIMManager+User.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F447BD855B81CC593E8582E6562D9442 /* YBIBGetBaseInfoProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CA00F3ED3A39266FD0485E6A9A52E8 /* YBIBGetBaseInfoProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F45734F7E1F36E0D03240B925550CBBF /* RectangleAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B6F61BE674A89311CDDD88E71D4B831 /* RectangleAnimation.swift */; }; - F45CC0AF8CE901E60F1F0EAB98BFF9EC /* YBImageBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = 4658669320F17E4FF1069C73ED9C3838 /* YBImageBrowser.m */; }; - F469D3446C362E18EF1F7D714E2E64E0 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6C43FEBD18CE9598FA1A74938867514 /* KingfisherManager.swift */; }; - F4D52CB490769C890ECA0A2CE3CFEE55 /* DotLottieUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9AE453074B44CE425E74E7005ECD4AE8 /* DotLottieUtils.swift */; }; - F4F179A948F1A7BA84BD8ED92E695A1C /* Dematerialize.swift in Sources */ = {isa = PBXBuildFile; fileRef = C2AC64CAFEB6D49E57D7FAA016865BC3 /* Dematerialize.swift */; }; - F510058AE05060128BA765E991B787E2 /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54B4A854479D2A862E4A10285D168D0F /* ImageTransition.swift */; }; - F5194E7C5178D14021699602C11C9B16 /* SDImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 707AC05913DB1E5066C5D4A3117A8D94 /* SDImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F56129C8AD3AF30E6318F2C788D30570 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 637A7313065D5EFD2C26D2F8C370607D /* Entry.swift */; }; - F565B4504B8C8973E4601219F9ADF461 /* Debounce.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23B24E42476EAEB449B42C368E04FEBE /* Debounce.swift */; }; - F5695140D67045D5A1716FA7724E7A3F /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 29C1F94D4278A162A285C44FE14DB4F6 /* PrivacyInfo.xcprivacy */; }; - F57662901DFE32CF41A632EAE684DC81 /* SDWebImageDefine.h in Headers */ = {isa = PBXBuildFile; fileRef = CACB3BCA3DB641C9B591E625330BA336 /* SDWebImageDefine.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5C0714450EF9ED4B85044A0C6642F89 /* RxCollectionViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71D2F825E8CB5F153CB1129FD6C30A14 /* RxCollectionViewSectionedReloadDataSource.swift */; }; - F5E62DAD60E5C311FE1EC1333D44F194 /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01B81C446E6D0311D5E6B347C63082D5 /* FormatIndicatedCacheSerializer.swift */; }; - F60F90EAF35CFF40DF1C33557965787D /* MJRefreshStateTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = 647F3A21C303D1F7A42AF9434D203869 /* MJRefreshStateTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F652E53724373209F47D3B4A7D2A6556 /* SynchronizedDisposeType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22B0FE7857A3947DF75F30B19BA05CBD /* SynchronizedDisposeType.swift */; }; - F66042CD85DF9049060403EF0627FEC6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; + E713EB139B0B6B2F9BB463A2E13B583F /* IQKeyboardInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4BB38AD055FDA8B028F1CFCB6AC51C95 /* IQKeyboardInfo.swift */; }; + E774F03CFBB7FF4A59157E694D930A02 /* EllipseNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B8C00943FF7F8CFAD73B6BE0A6D3985 /* EllipseNode.swift */; }; + E7AD71845468E1609A0CAED1C60085D5 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0CD73578573AF5AD46B0F08EBEDF1A5 /* Accelerate.framework */; }; + E7D06F2DBFA16E219746D0E11E60A501 /* KFOptionsSetter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C07CCD1BCB6C218B9CBFD402FD0BF6 /* KFOptionsSetter.swift */; }; + E7DC25B399D700EFCA1E2F1E9715AF1F /* Core+UIFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DC2D7AD3B62E3A2D0D88CB42FAE50CB /* Core+UIFont.swift */; }; + E8012394A10B6AC7DA2195984F9504E9 /* Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12936157E06A9BD2BBAC1822B010AE60 /* Defaults.swift */; }; + E82B4F97BB52300AF382AC4E2E2A3A1E /* FrameUnsubAck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E4E9F77E3B93C448A645B6A373107EF /* FrameUnsubAck.swift */; }; + E84C30FA4A382D9C330E87FB32C009AE /* IQKeyboardAppearanceManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C068E1B38BFB93E75CB74A95D3FAC3A4 /* IQKeyboardAppearanceManager.swift */; }; + E86106435DADBB30165472A7953A739C /* BuiltIns.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ACCAE49580830784049EDF24569F21B /* BuiltIns.swift */; }; + E875CFFB88DBBA0D72C4B7FC7A4C100D /* ViewDifferentiatorProviding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22E6C6B2624EC3C4CEDDDE1149B64473 /* ViewDifferentiatorProviding.swift */; }; + E895F57BB625331252C6901B201B3192 /* UIViewConfiguringSwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 825816BFA5ED9EA8E09C4414305D084D /* UIViewConfiguringSwiftUIView.swift */; }; + E8C960787E7B8DE1A914786EC04E8917 /* PhotoCroppingConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7111115F1C55B2A19B14616B49223065 /* PhotoCroppingConfiguration.swift */; }; + E9043D5B49AF869589B1850CF8795EBA /* EpoxyModeled.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB591B97E8E5DE9272DB70B726C9919E /* EpoxyModeled.swift */; }; + E90C1EC062107478A1ED904273F0D170 /* YYImageCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = C38CCEC48E7F25EFD8909A52CAA8602B /* YYImageCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E930A5612DC6D120BE040AD17C6D1BCD /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 586CAB7528D3A6B6645EDB5A9397E2FB /* MASViewAttribute.m */; }; + E9470E64737A023126AFD77E10DE3E41 /* upsampling_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 7FB09B2B5E42E2CEDD4C919D77689C08 /* upsampling_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + E95FE85B929E24CD0B18BB521969C9B8 /* YBIBTopView.m in Sources */ = {isa = PBXBuildFile; fileRef = 13CA3F82CB4C95C5C30C09CEFF326F75 /* YBIBTopView.m */; }; + E98C3D7A8430639438912254DF730791 /* ColorExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B50D229B975056B637CE2A13B0263B07 /* ColorExtension.swift */; }; + E9AEBBA488E8832DA6CBE9881DF9DE95 /* ImageProcessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4076244D29A019001FE69F99345FC805 /* ImageProcessor.swift */; }; + E9D8AE39CEE9529B164E3516235BEE4C /* UIControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 671AC6BBB7E983A9C3A434F31B12481D /* UIControl+Rx.swift */; }; + E9E2076097D04B8389FA7FB9FB975527 /* MathKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9668DF6256ACD7532AE815424C1276DB /* MathKit.swift */; }; + E9F1CF2BE311C33A9629B0EC6D019F3A /* OIMManager.h in Headers */ = {isa = PBXBuildFile; fileRef = DDAB292AFEE428D9B577D74F07D5A0EF /* OIMManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E9F8F68A964586D21DD22030F1D85BF2 /* SwiftUIMeasurementContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F58B1158B39BF41DE17B2D193BD0E0F5 /* SwiftUIMeasurementContainer.swift */; }; + EA0EC730ECD108B415C89082EC38F80A /* endian_inl_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = DAB300A21E292F64E0091E1CB70BE27E /* endian_inl_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EA4323194CD798F0B5146EFF75556E5C /* YBIBWebImageMediator.h in Headers */ = {isa = PBXBuildFile; fileRef = CA7DEF12C876C557DDFF6CC3B95D863F /* YBIBWebImageMediator.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EAAA0041F6A0DB1039D328B35FF5EA09 /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 725BEA8CF189D4B0B923DC15BD501A1C /* SessionDelegate.swift */; }; + EAACC631D5814C48D008FBBD53E8D0DA /* Lock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E431C8A3F91F378151064C20F5B3FED /* Lock.swift */; }; + EAF7893AAEF99828D21EAC0593AC879B /* SDImageLoadersManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E006EB6628D9D7013460BEDD4583E8D /* SDImageLoadersManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EB61F13974AEAAE5ACB6CC669D8F6D2A /* UIView+Responders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84AF2338B277983050F3CAFD5B36E2D8 /* UIView+Responders.swift */; }; + EB742B4A25F7E5F707BBEDCD8546D01F /* SolidLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E09E8D0DDB0127275867B6DB66EAC96 /* SolidLayer.swift */; }; + EBB7D34FFA666C9BCF2FE1D049FB225B /* lottie-ios-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E4A78CC3124C5516228374A8AB619AB /* lottie-ios-dummy.m */; }; + EBC4FC6407FF65199FF804F8076DE315 /* OIMCustomElem.m in Sources */ = {isa = PBXBuildFile; fileRef = 58D60D2BC095F0CBD500F458C40B265D /* OIMCustomElem.m */; }; + EBF34312A1F64FE81987440230E5BC49 /* IQKeyboardManager+Internal.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAED09A3FF9F11B572D266C4C9AF76E7 /* IQKeyboardManager+Internal.swift */; }; + EC0833ABBB33BA7F6160B0BF17F11097 /* Pods-QuickLocation-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B3FEC1DFBF7036B761FB944F2B9F817 /* Pods-QuickLocation-dummy.m */; }; + EC8693D888647A7076ED1322373E8C39 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + EC8E84A8FFADDCA562A8608D141D9027 /* MJRefreshAutoGifFooter.h in Headers */ = {isa = PBXBuildFile; fileRef = C7AD74FA213A3FFDCA24D48ABA00E8F0 /* MJRefreshAutoGifFooter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EC9B34262AED632D7EFB49804337648E /* Masonry.h in Headers */ = {isa = PBXBuildFile; fileRef = 00627804BDA43380564B83E1DE3D49C2 /* Masonry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + ECB3F9C6F6386AF7AB07525F6151CF73 /* CropConfirmViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D5338B11E142296D30DC453C617E8F4 /* CropConfirmViewConfiguration.swift */; }; + ECBB9D041E2943036EFF0AD5B7E63B4C /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80618672C78CE395D2916A8BD993BDAE /* Response.swift */; }; + ECC5C2ADC2682F9171FEA22AF10DCE53 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A15C785772B2FB9827145D163C5E770 /* ConstraintRelation.swift */; }; + ECC6B16E1B855C98636470D0151AEB0B /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D5E0EC291F4571118276A49CD3A886D /* MultipartFormData.swift */; }; + ECFE5E33B83F4CB59ADF421AE0876459 /* KingfisherWebP-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 807E9A40B51599207F28141B41ACF379 /* KingfisherWebP-dummy.m */; }; + ED28820C4CB92D994FB43DF2E56B2720 /* DateTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A58F10CA935A050138ADEC85D511540 /* DateTransform.swift */; }; + ED3C727C9AAF04C05ADFF6ABAEFFEA8D /* SDWebImageTransitionInternal.h in Headers */ = {isa = PBXBuildFile; fileRef = C9FE80D4284F880557EC33949896271E /* SDWebImageTransitionInternal.h */; settings = {ATTRIBUTES = (Private, ); }; }; + ED6162890A51E74E00C4D1D258D8E8DC /* ObjectMapper-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 66B47605C4EF7FD85950E34EA826F013 /* ObjectMapper-dummy.m */; }; + ED83D98E4E3641FBF4262E1B02B459E7 /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93AC70A2D46A8E4C52484F59DCF920FD /* ImageIO.framework */; }; + ED9DC266977F10C47FC18E466C231ADD /* SDCycleScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 335488488BA5012989636955BBCB8F05 /* SDCycleScrollView.m */; }; + EDB55972F32B55877DEB79D38082A844 /* DDLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 8929295E55D3A7956A8FBB2AF64C3CEA /* DDLog.m */; }; + EDBFC4DEE1C21470926DF2EF13131904 /* UIImageView+HighlightedWebCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AEA36BD7A79BEA1F5BD73E718BEE2E /* UIImageView+HighlightedWebCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EDD1F4A31BC9F0816F25B14E0B4B89B5 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E1B70895E7D4B191C6A7482FF45BC2E /* NetworkReachabilityManager.swift */; }; + EE0F999042684CCF35B4C33A38F954F2 /* SGPermissionPhoto.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F7204C6CC49121008516C4035FC5C9F /* SGPermissionPhoto.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE1368EC3C3660565A82A9842E57124F /* Box.swift in Sources */ = {isa = PBXBuildFile; fileRef = 185DAF49A8E1175A987F04CE022957BE /* Box.swift */; }; + EE2E54869CCD4BBDE50899BFD5C9E204 /* GradientStroke.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2960647473749EA8AEED48FB2BE7C79A /* GradientStroke.swift */; }; + EE6463A560321E0751B1BC18C23E2567 /* NSTextField+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CFF889EB81CC40894452F644825AF71 /* NSTextField+Rx.swift */; }; + EE6E8FE636D2C02E3D2FC1E8555B4612 /* MJRefreshNormalHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = B9825E98E044B068EC2375D6E98CF2F9 /* MJRefreshNormalHeader.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EE802C27C64F90E925967D78FF074AE4 /* AsyncSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E2DC49BDFE9EC35541E7552286CEF5E /* AsyncSubject.swift */; }; + EED016DE8173CD38CC01D88CD2628984 /* NSString+MJExtension.h in Headers */ = {isa = PBXBuildFile; fileRef = 0531C9A5E841EDBCD66B6F621E48F634 /* NSString+MJExtension.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EEFDF1A3CEFCFA7C742DD8C5FE7B1408 /* SGWeakProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = A91A77B1FDA08F75874435E05D67FD40 /* SGWeakProxy.h */; settings = {ATTRIBUTES = (Public, ); }; }; + EF2A6FD79AD6DCAE8D9C7A85DE3C9395 /* SolidLayerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60FB2512EBA67C9E19A06A26644E2821 /* SolidLayerModel.swift */; }; + EF7B5F7D016F12532A3256D820AC1F34 /* Moya-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 94057504769A3A6E724B5B40972FC141 /* Moya-dummy.m */; }; + EFD5C4FC5F7B416762B66D92200A2306 /* PhotoError.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6FCB776FDC1A9889154E2C982013701 /* PhotoError.swift */; }; + EFE0C664AF402C2E9E6F0848F6ECA24A /* TransformType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 087AC616BCEA82E356A02B7EFD0EF5EF /* TransformType.swift */; }; + F02357F709F4F3A9BB4E1E6C8E88A3B4 /* OpacityAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1196353082FE78E3F0236610EBD8703E /* OpacityAnimation.swift */; }; + F02729146154EF6B9187305230290CD4 /* SDWebImagePrefetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 651C41DEE47E984B8359AB6405881E02 /* SDWebImagePrefetcher.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F0411B25B1DBAF9E1D5F5442D6A98F20 /* UIImage+GIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DE36367B42A69FD745A52FC145EF3CE /* UIImage+GIF.m */; }; + F048EF890D150B5108DD1A531D2D9BCE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + F04EDB481BB918A84D0C80C837A9A7BC /* TextDocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C57118977326E3AB3594BF47E4D50F /* TextDocument.swift */; }; + F05192CEB06CD70D1D3E8ED9E4B7C15F /* CocoaMQTT.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BCE8FAF2BD0D9BBF46A9D702C7C1CC5 /* CocoaMQTT.swift */; }; + F073660D3D3650AB86BAE8C65ACC1849 /* AlbumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00D38F293A306ED40E9E30F10E5A2943 /* AlbumViewController.swift */; }; + F0796F08298C7D26732760C0D6F839DF /* SectionedViewDataSourceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = C12787613C350ACAA6E34E28788B71EF /* SectionedViewDataSourceType.swift */; }; + F0A7FE48B84BEF9C4CA3A1C6CC832197 /* LottieButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = EEE5C71E2AA2ED3E55F45F94737D8BF6 /* LottieButton.swift */; }; + F0B0B551A13101A1F5906D38E5863E8A /* Resource.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4A6881CF86D0AD130F065B392BA79E6 /* Resource.swift */; }; + F0C52CA4E23A1BDEC554BD572DDD1100 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + F1108DE1AB588C74E8AFAABC92E9B90C /* YBImageBrowserVideo.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6F49859D2EBDF3619C22E8A959FF01BD /* YBImageBrowserVideo.bundle */; }; + F1877221CDD8FC3A3015CE7DC3A5D6F0 /* Array+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D6583A9D6FFB57A60DDCC8A22078841 /* Array+Extensions.swift */; }; + F1A18E7F3EF61BD0A0921B810FAEDAF3 /* Picker+UIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3712FB2901390F9631B6F18D49E764B1 /* Picker+UIImageView.swift */; }; + F1C6A9649B5FDCB480FD7D7774FFF8B3 /* UIView+WebCacheOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = D094492C3C9C70F3767ABB9EF6D63919 /* UIView+WebCacheOperation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F1ED7598E0D75E704B52BFCF77193A27 /* MGCDAsyncSocket.h in Headers */ = {isa = PBXBuildFile; fileRef = B1F10350695B3DDE24FB29DF4C930600 /* MGCDAsyncSocket.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F24E4DA6659061237424A876461039FC /* YBIBSheetView.h in Headers */ = {isa = PBXBuildFile; fileRef = 87F6C0AAEA5D49B14D1E594B55985BB8 /* YBIBSheetView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2BCFFCCFDC0882E51E5CD3B1FC700C6 /* RxRelay-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A27A11E0906C1DEC75B5B18E610C9434 /* RxRelay-dummy.m */; }; + F2CAB82F6922D2E31AE4AB1EA47D78D4 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = A826013E455DCB77EA899538B69425BF /* cpu.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F2E5A6404AB84C1417F31C076A0EA8F6 /* ConcurrentAtomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4A3C63C58D795A774EE240C747B81E6 /* ConcurrentAtomic.swift */; }; + F2FCD6AEA1E8BEE9FA3150109F3FD2CB /* AlbumViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB40994AE1C02F08D2B55602420DAB57 /* AlbumViewCell.swift */; }; + F322F2E9248769F09DC4FBB29ACCE614 /* SharedSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66E59E81DC8FF48EDF585F8556EBF878 /* SharedSequence.swift */; }; + F32563E5603EC6D414A5E77F4271074E /* IQKeyboardNotification-IQKeyboardNotification in Resources */ = {isa = PBXBuildFile; fileRef = 120BD4C670EF00F4D5A40AA4B863A7AE /* IQKeyboardNotification-IQKeyboardNotification */; }; + F325BEE3115C5BE3907B073DDC9F5852 /* OIMGroupMemberInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 957C981964A435BDF75AB5CB24C17F0B /* OIMGroupMemberInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3263D294D688533EB974E37C61F1E24 /* MJExtensionConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 637305295B526B7C505220CE2A7893E8 /* MJExtensionConst.m */; }; + F3580439D38601B6DECF01C92685C9D0 /* Merge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 242D474AEFBC6106539C37EB2710B154 /* Merge.swift */; }; + F37BF721CA0B9907AE50BE06D750C31A /* DDFileLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A8E8C8881849C416468CDD1543F786A /* DDFileLogger.m */; }; + F38ECDACE09F8DEBBDFDCB9897795E54 /* YBIBImageLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 0A6B3A99BDAED7755D8CFCE9C0F42B18 /* YBIBImageLayout.m */; }; + F39AB662CDC4C299D4B1737519E106C7 /* FramePubAck.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0E50899C0C21D11C1827375725D6F78 /* FramePubAck.swift */; }; + F3A6D79E6A1E8864E47940113881901C /* YBIBOrientationReceiveProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = C94D912ED11FB929D163DE90CA7CBF58 /* YBIBOrientationReceiveProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3AECEF6D3BB919B3E7392942E1BC58B /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B32687B49E8C118D10964F8D6250E1 /* MJRefreshBackFooter.m */; }; + F3B50A140EA5062ADD0D17F76B4FC149 /* YBIBCopywriter.h in Headers */ = {isa = PBXBuildFile; fileRef = 469BBA85B3B01F0A015C20C5026AC171 /* YBIBCopywriter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F3D9CAED623B54CC85DD99EB7B18C4B3 /* URLRequest+Encoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 392F545C5B87288F9B4FD5543E7ED91D /* URLRequest+Encoding.swift */; }; + F446E12C0CBAA5E3B9AB03F1AD36EA38 /* OIMManager+User.h in Headers */ = {isa = PBXBuildFile; fileRef = BF86B2932209BF72B21D027CCB3D5BE2 /* OIMManager+User.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F447BD855B81CC593E8582E6562D9442 /* YBIBGetBaseInfoProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = F146679E95977A174286ABF268952FF7 /* YBIBGetBaseInfoProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F45734F7E1F36E0D03240B925550CBBF /* RectangleAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1E3BA316C2E40426CD457CC367902F1F /* RectangleAnimation.swift */; }; + F45CC0AF8CE901E60F1F0EAB98BFF9EC /* YBImageBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = B772F4D6E7B2CD1919ABFF268D1694BE /* YBImageBrowser.m */; }; + F4603A718448B8BED2AAE202277C275D /* sharpyuv.c in Sources */ = {isa = PBXBuildFile; fileRef = AE5E8976ED0958D0E88CF4130425A677 /* sharpyuv.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + F469D3446C362E18EF1F7D714E2E64E0 /* KingfisherManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83E92D4FF772347A353FB627EFF684DD /* KingfisherManager.swift */; }; + F4A703B0312FA076FEFFA31444B8FEE6 /* FrameSubAck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A29D87B1DD0597A8C888EE5B31EB730 /* FrameSubAck.swift */; }; + F4D52CB490769C890ECA0A2CE3CFEE55 /* DotLottieUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5D91DB00869FD3D156C8E656E0146BE /* DotLottieUtils.swift */; }; + F510058AE05060128BA765E991B787E2 /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56C4621AA9773E450944A7A00C7F17A1 /* ImageTransition.swift */; }; + F56129C8AD3AF30E6318F2C788D30570 /* Entry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50A7A193651AB0CFCF223595CA19AA95 /* Entry.swift */; }; + F5BCEAF07494B8EE4407A4048C70170B /* CocoaMQTTReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 010FD8BA73DAC958194818B68AFCF699 /* CocoaMQTTReader.swift */; }; + F5C0714450EF9ED4B85044A0C6642F89 /* RxCollectionViewSectionedReloadDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56C132AB3EA4F392D2A8DD774E65EFEE /* RxCollectionViewSectionedReloadDataSource.swift */; }; + F5E62DAD60E5C311FE1EC1333D44F194 /* FormatIndicatedCacheSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D21C7C434B3F4BDFF04AA060D589C0E /* FormatIndicatedCacheSerializer.swift */; }; + F5EF1E2426930587F2F1AD8D2B7B1A25 /* RxSwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 83A1F2D48A891A026C113A34ED4483E3 /* RxSwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F60F90EAF35CFF40DF1C33557965787D /* MJRefreshStateTrailer.h in Headers */ = {isa = PBXBuildFile; fileRef = BFFFBA599610B03A82906A883745C95A /* MJRefreshStateTrailer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F66042CD85DF9049060403EF0627FEC6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; F66F8B4111FD65028BB94F7D1EB32589 /* MarqueeLabel-MarqueeLabel in Resources */ = {isa = PBXBuildFile; fileRef = FD694DB3E09A81036691F823E3211D44 /* MarqueeLabel-MarqueeLabel */; }; - F678BF8CC9D07C54964AEE5CE05DD8F9 /* RxTextStorageDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = A28212BF67021DCC567895F90F42F3B3 /* RxTextStorageDelegateProxy.swift */; }; - F6A36E290DE040FDBFEC708F4C06237F /* SDDisplayLink.h in Headers */ = {isa = PBXBuildFile; fileRef = CD0484F6BC5E5083AA0A3493E6A7E299 /* SDDisplayLink.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F6ABE1AC5C79A71A8073883EE9E176C9 /* CGFloatExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD53BA557DF4BC4953A4AB9EC6A4FF57 /* CGFloatExtensions.swift */; }; - F6D1C960368EB1E067ABD0BFF707FC56 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6261B6AFF7CE8B3C5FCA2DA3C060B8CA /* MASConstraintMaker.m */; }; - F6DF025C22FF018660D118246782C306 /* Infallible+Debug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B96C38EC76CED40A0CD2DDF5B1DB12A /* Infallible+Debug.swift */; }; - F6E6D2D449ACFC271BDC91C923ED7FBC /* BezierPathRoundExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2001A2C582FBBA94AF91ADD4B9931C5 /* BezierPathRoundExtension.swift */; }; - F6EC957FA3B14E78A2DFB9ABA93D820F /* pausableBuffered.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09BF0462A5A73BDAD46E8893D422BE0F /* pausableBuffered.swift */; }; - F6F33E8B268F3D41075374D95B8088DC /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0B615FCCC02CD636E8D81ADC0F6C65A /* UILayoutSupport+Extensions.swift */; }; - F73E48637EB56E6E57A7CBC9B997FBA6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - F7A8FE8CEE61F44B4CDFE0BE245642B6 /* YBIBImageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 5453B61652D70959B356E49D87F13FA2 /* YBIBImageCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7E50993F8A838F860941A1B9DA6BEC0 /* SDAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = B13292BD10906E86B88551C19BEBC246 /* SDAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7ED5E8C81EAD309CD59C56C8D880D70 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 3702CCA67B68183FAC858084EE553452 /* PrivacyInfo.xcprivacy */; }; - F819B1541A0195B89BEBAB3CCC51DCC6 /* RetryStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A758E01A5342DD85FC47B3EE4BABF79 /* RetryStrategy.swift */; }; - F8307D435C630DB434B2E8A74111B948 /* DispatchQueue+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3439F956E2BEC0F71B3AC96FAE151B38 /* DispatchQueue+Extensions.swift */; }; - F86242472CE53B6C0808307C77A2CEC9 /* HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9949D2F039C26335E06B4DEDB869C47F /* HXPHPicker.swift */; }; - F8C3D698F829A6F10872C99EB6ADE46B /* YYImage-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 816BB0C72A261BD1EB7BD6894E8AA38F /* YYImage-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8C9B997F8DEA590BA10FE3C3A3167F5 /* YBImageBrowserDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = E4510CDCA226DCE0E5A193FC8910CA58 /* YBImageBrowserDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8E8E69B9793E023EE993E71643F6071 /* ImmediateSchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 748290F58F89C4842B47E1474CAA8B3D /* ImmediateSchedulerType.swift */; }; - F8E9FB240CED709C4C4EB667E788FF6B /* NSObject+Rx+RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF9583AFB17055B420C08DE15E843EE4 /* NSObject+Rx+RawRepresentable.swift */; }; - F94434836BDCB67E50B82B9C0650D230 /* SwitchIfEmpty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76B335F9C1074A16DC6C649D6F834E5F /* SwitchIfEmpty.swift */; }; - F972DCBE61D6C3B274C555F2D983F67B /* YBIBImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 31C67847AA0011E797287DE347F30612 /* YBIBImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F979D099A0090D58B7946B47E0D52E91 /* YBIBTopView.h in Headers */ = {isa = PBXBuildFile; fileRef = 5BB390B0E40E89FDDE554F21ECB7CCF1 /* YBIBTopView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9C42D93CBEBD19B0D1707ED6D81BF05 /* lossless_enc_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = D6710808298E8357BEF9DEDA21E199CF /* lossless_enc_sse2.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - F9EBA65892D78A31C068D727D84BCB88 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2A1EB79C2BE2EA918A66FEF777D04D /* ConstraintConfig.swift */; }; - F9EC9C0879D29B10D5532E7DC268B304 /* PhotoPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01CFD68B658BAD15EF824BA4028CA1A2 /* PhotoPickerViewController.swift */; }; - FA190258BD504A02FD26844DF48C5FAF /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5267B7BCFE0BDC27381D9A3718337CFC /* Result.swift */; }; - FA466A93791A0CD6AEC3AE1E9E570FD6 /* enc_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = F3B96086AC8BC0098AE6EDCDE92ED2BD /* enc_mips32.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - FA6B361DA50A4CB2863B7262DDF2DE89 /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD1A131E0B3DB38642A84F2E5057152 /* URLTransform.swift */; }; - FA8CA71BBFEF04905D02013578E02DE5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */; }; - FA923FB0492E22E87E728F69AA94188F /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65CFE3481B5AC8650B206B3A373CA75D /* ImageIO.framework */; }; - FAB169480639A185A5D86CA50D382BA4 /* animi.h in Headers */ = {isa = PBXBuildFile; fileRef = 09A47D8BBE8F670AEE1597E694E9299C /* animi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FAB703884AC7E3E527AB50FB9001276B /* WebSocketRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = FACD7E533AA338FFEC18D2833425475F /* WebSocketRequest.swift */; }; - FAF20FAA54FDB2A58583DB576B034301 /* PreviewViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C13D413FA74ACD184F48EEECDAF835AF /* PreviewViewConfiguration.swift */; }; - FB0003B2A4B996A99C9116360F2BEE27 /* ReplaySubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAAF2B1865A817D3B34BE0FED63702E8 /* ReplaySubject.swift */; }; - FB0B119AB62A4D90C16825F73CD53419 /* SGScanCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 5EFEC4792E6AE843B581D17FC92072A0 /* SGScanCode.m */; }; - FB3BE9AF5DDC6474C6BAB9234C0DB9B0 /* YBIBImageScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = D20A56560F315942F27C111F2B851792 /* YBIBImageScrollView.m */; }; - FB986DAF20B451EED7FE77BD26E08DF4 /* distinct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A695E041567399C0A6E1B8B2BB5790E /* distinct.swift */; }; - FBA9AB5511104BC83BBAB557D47B8B2D /* GradientStrokeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F373DF5148C21C78733AFACF8E29F0 /* GradientStrokeRenderer.swift */; }; - FBBDF31BD5CA23C47E4C18BCA47A4194 /* OIMCustomElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 39FED66228C9465702293375314C454F /* OIMCustomElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FC09C6960BE94A9DC9C2252058104D13 /* PhotoEditorViewController+Export.swift in Sources */ = {isa = PBXBuildFile; fileRef = A66D9F8A28B2D8B918FF71CBEC6E5BC5 /* PhotoEditorViewController+Export.swift */; }; - FC2E74989B954AF9D2AAE1ABC03156D6 /* LayerStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 882FA463C133D41CD8499FE6FB7A999F /* LayerStyle.swift */; }; - FC644FFD4CEFABD31D114D385B3FDD19 /* predictor_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = FE4FB396B3AD5E4CCCF7D904075E382A /* predictor_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - FCA8946A40BE52876F991CF772C26AB3 /* YBIBLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 568B09274F880366B93DA437F7833148 /* YBIBLoadingView.m */; }; - FCDF1D9CD5C6902938D25B1E6FFF761C /* iterator_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 0E9018049D3891D6B8326E4C1A96B726 /* iterator_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - FD08990C503D242E5A70B010B704C755 /* KingfisherManager+LivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16FC8EC2290249207E00023113CA596 /* KingfisherManager+LivePhoto.swift */; }; - FD31D6875DC774E1C134CD580735FD64 /* UIDatePicker+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6ADFC7217C94A6A33AADBE2C889E258A /* UIDatePicker+Rx.swift */; }; - FD3904804913DEE21108083EEF8CE4EC /* AnyNodeProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5BE10E514BD8C3BBDC238C222A00125 /* AnyNodeProperty.swift */; }; - FD552610731EB624F8A47C3ACA927A15 /* UIView+Resign.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C7772A4DD34FF5F3A20C6153B961319 /* UIView+Resign.swift */; }; - FD6A4D15488DF30A0CEA0373B9DE595A /* Switch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FBB552DBF10EEAB3DC15F5C4727EF3D /* Switch.swift */; }; - FD71872BD2972EF642FFF461F16B2BBD /* SDWebImageIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 3934EA26369C7ED8AC99BDB4DF11A6E2 /* SDWebImageIndicator.m */; }; - FDABBA4C9C58FB24BE28FFE81C55658A /* Collection+Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EC2049C823875676B5A5A9A7CF7CCCA /* Collection+Diff.swift */; }; - FE0D3260BF27D388B0200F1AC8151619 /* IQKeyboardCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C8F1BE5271921E4112CB6A96BB1E636 /* IQKeyboardCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE104235E87599AA0A971D024286E855 /* SDGraphicsImageRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 32FEFE432FBEFC662E16C8BDE4DA9817 /* SDGraphicsImageRenderer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE106B8B51187E9B8A8E6A258749A21F /* RxCollectionViewReactiveArrayDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = E030B9BDBBA82F74D1F392D96C6B1A31 /* RxCollectionViewReactiveArrayDataSource.swift */; }; - FE26082B37D32FCCC7AF3B02DF050AE2 /* SingleAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76F5FB9F41D1AC5CB74A20A5F1BCAB11 /* SingleAsync.swift */; }; - FE49F3F733B669138D1CF38BCD45AD15 /* AsyncLock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 47F4417E91DBF2662F9F10B3EE2F3C18 /* AsyncLock.swift */; }; - FE4F12DF6E4DDA7B5681A48C6F86FB97 /* RxTableViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C78AE96DEEB3AE3D220D176418FF4438 /* RxTableViewDataSourceProxy.swift */; }; - FE65FB5982AE1A8238A0AF5B96EB844E /* VideoEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FC8B0D7C9DF7F1E28698FF3993A1672 /* VideoEditorViewController.swift */; }; - FE9BA3316B14AC042881E3601745E44A /* GIFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4298E753B82537A2B8C44313CCC2E168 /* GIFAnimatedImage.swift */; }; - FEA10484BCDCE23F63CDABE169AC7398 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = A34655F0A811AB3A87F04E2474CB58B5 /* PrivacyInfo.xcprivacy */; }; - FEC6D41D15BA321D44135C433579B85F /* DictionaryTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78E82B74D1377FBBEC130E8053016A10 /* DictionaryTransform.swift */; }; - FED25CF5DD8551A499C04624ABF5E7F7 /* picture_rescale_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 8F2242BE854DD9C19EF4B71CA79AE6F2 /* picture_rescale_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; - FEE883575278D5BE8F185437AB5DB3BB /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E168DF5E47CB8A301BCB3993A623844 /* MJRefreshGifHeader.m */; }; - FF020D50D3B0742EFED9C172269D9D83 /* IQKeyboardAppearanceConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = B48EB763FE80E2BD8D9862A3C005F9FC /* IQKeyboardAppearanceConfiguration.swift */; }; - FF13DFF525578FD22F7F4A077888317D /* BinaryDisposable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 576B79FED5EC1392CFDE58BFFB2CC4A0 /* BinaryDisposable.swift */; }; - FF1AC5DF8F714F01BBB4D4375D17B1DC /* AssetManager+Authorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51F0C1F7C00691BEF0CFA4F31C54FF3A /* AssetManager+Authorization.swift */; }; - FF2F4C8A0736554E74D67A727B7D7671 /* RxRelay-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 95F037BC936089687A0571DF3857C90B /* RxRelay-dummy.m */; }; - FF46177786D9397F4E4E65F116F734FF /* UITextField+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30EC231840F6732A56ACD926EEC9A53D /* UITextField+Rx.swift */; }; - FFAE08E506C1E1F5FDFE534380A206AE /* Core+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B622AEF7B6E9C360D0C962D5A346AF5 /* Core+Data.swift */; }; - FFD327CC50C276F2151DE9D9A16FF2A8 /* AnyEpoxyModelProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35D0028F706E6F2DD1BBA09C9DD8E405 /* AnyEpoxyModelProperty.swift */; }; + F678BF8CC9D07C54964AEE5CE05DD8F9 /* RxTextStorageDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 224EE27EF8A4CB6DE2A2994B3B4BA865 /* RxTextStorageDelegateProxy.swift */; }; + F6841A1B6D6884FF2D41FFDBD7703ADF /* sharpyuv_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 74B3D2B854D0C4E61AE93E1D37D28752 /* sharpyuv_neon.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + F6ABE1AC5C79A71A8073883EE9E176C9 /* CGFloatExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44EA28130A47103E346AEA431BD8AB23 /* CGFloatExtensions.swift */; }; + F6D1C960368EB1E067ABD0BFF707FC56 /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = 913C06E86762583AA08FA9981CC07752 /* MASConstraintMaker.m */; }; + F6E6D2D449ACFC271BDC91C923ED7FBC /* BezierPathRoundExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9A58617E989FFAC2B9D2EB8ED1B25C4 /* BezierPathRoundExtension.swift */; }; + F6EC957FA3B14E78A2DFB9ABA93D820F /* pausableBuffered.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E68A3533F3C2D4D73D3AA397B395563 /* pausableBuffered.swift */; }; + F6F33E8B268F3D41075374D95B8088DC /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F087BB3235520C3C84B06484C182445 /* UILayoutSupport+Extensions.swift */; }; + F71350F6F7159EB8B0DF0ECD7F059A05 /* SDImageAWebPCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AD55A47F1AAA88609AC883AD677F608 /* SDImageAWebPCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F73E48637EB56E6E57A7CBC9B997FBA6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + F79A182CDB1C80A234555BE9A45C22E4 /* WithUnretained.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79B63F73A0E96CFFC29D7CA1F042FF88 /* WithUnretained.swift */; }; + F7A8FE8CEE61F44B4CDFE0BE245642B6 /* YBIBImageCell.h in Headers */ = {isa = PBXBuildFile; fileRef = BFE309F25629521A4C37547AB03DD967 /* YBIBImageCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F810AE3623A69FCCC158A5C1ACBF6439 /* IQKeyboardToolbarManager+Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = C39880C40AAAAD747B9A62379A5A895B /* IQKeyboardToolbarManager+Deprecated.swift */; }; + F819B1541A0195B89BEBAB3CCC51DCC6 /* RetryStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0F45767D09215F572F8D80F01EB8628 /* RetryStrategy.swift */; }; + F829965604C3B309269C43945D01AE6F /* AtomicInt.swift in Sources */ = {isa = PBXBuildFile; fileRef = C73C04647C0D259054E566EDEDB52C13 /* AtomicInt.swift */; }; + F86242472CE53B6C0808307C77A2CEC9 /* HXPHPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 228A5909B168591161C6BFFF967721A4 /* HXPHPicker.swift */; }; + F8C9B997F8DEA590BA10FE3C3A3167F5 /* YBImageBrowserDataSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 32D89F076C7EB0BF35FCEAEE0CADD189 /* YBImageBrowserDataSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F8DBD575BC5B5A87EEF5F7A4E79EC285 /* anim_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = BA028C6C6E1A7001499331E6B38C01F9 /* anim_decode.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + F8E6EAF5CAD39A590A6080E2458B7B7B /* cost_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 01140C390F9C1A5A0B1FA345EDB25D8A /* cost_enc.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F8E9FB240CED709C4C4EB667E788FF6B /* NSObject+Rx+RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7675A584D15BA63139E519FD2CB2457A /* NSObject+Rx+RawRepresentable.swift */; }; + F972DCBE61D6C3B274C555F2D983F67B /* YBIBImageCache.h in Headers */ = {isa = PBXBuildFile; fileRef = B2ED4E571D3FD0B525785E5C9317CE6D /* YBIBImageCache.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F979D099A0090D58B7946B47E0D52E91 /* YBIBTopView.h in Headers */ = {isa = PBXBuildFile; fileRef = 779B2359143D01352428D637B66ABB03 /* YBIBTopView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F9A4C2F20661D4648A77FE2017B331AC /* palette.c in Sources */ = {isa = PBXBuildFile; fileRef = 1005FE0354AFFB68DC5891504FCA9BCC /* palette.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + F9AA73F3AE4A7D5CAC163509F5AE5363 /* tree_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 4E8D0DAD81814DB92CFEE73A78339252 /* tree_enc.c */; settings = {COMPILER_FLAGS = "-D_THREAD_SAFE -fno-objc-arc"; }; }; + F9CD0CE99E62359BD1197482B1B252AE /* sharpyuv_csp.h in Headers */ = {isa = PBXBuildFile; fileRef = 8BC62A822F138AAB14F1F2BBD4FE0620 /* sharpyuv_csp.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F9EBA65892D78A31C068D727D84BCB88 /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31F9C25C7025E7B07803B95DD09EB95F /* ConstraintConfig.swift */; }; + F9EC9C0879D29B10D5532E7DC268B304 /* PhotoPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDF437331E3175752D0F2C1F3736BACA /* PhotoPickerViewController.swift */; }; + FA00D4B3C909624A6332E038A6DB41FF /* SDWebImageDownloaderConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 65C53CB62B4F7435CB3C693234CE5505 /* SDWebImageDownloaderConfig.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FA190258BD504A02FD26844DF48C5FAF /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = E69CF3409B5E7DD09C934B8760D26B18 /* Result.swift */; }; + FA6B361DA50A4CB2863B7262DDF2DE89 /* URLTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 732C3D046DA1DDAADB427A51CFA8D702 /* URLTransform.swift */; }; + FA8CA71BBFEF04905D02013578E02DE5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */; }; + FA912288DF25A87FEE76249BA2035A07 /* YYAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 72580C48B12D84C13CB91FB803B3250C /* YYAnimatedImageView.m */; }; + FAB703884AC7E3E527AB50FB9001276B /* WebSocketRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97D8DC7E7FCCA6B36A398A4130916FF5 /* WebSocketRequest.swift */; }; + FAF20FAA54FDB2A58583DB576B034301 /* PreviewViewConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF7B1545843C9BBED27626503F185E9 /* PreviewViewConfiguration.swift */; }; + FAF3BC700D71378A541CE1492F3EC355 /* IQTextInputViewNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = B58670AC2A6C221479AB2BFF0856B066 /* IQTextInputViewNotification.swift */; }; + FB0B119AB62A4D90C16825F73CD53419 /* SGScanCode.m in Sources */ = {isa = PBXBuildFile; fileRef = 35129EBA9B173E46DF2F6DFB335E986C /* SGScanCode.m */; }; + FB3BE9AF5DDC6474C6BAB9234C0DB9B0 /* YBIBImageScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 893433AAE0EC3F67963A11E6F861691E /* YBIBImageScrollView.m */; }; + FB4D9D000306DEEF1D458A163B5F2158 /* CurrentThreadScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5965A14C526A41781295A6BBD345813C /* CurrentThreadScheduler.swift */; }; + FB986DAF20B451EED7FE77BD26E08DF4 /* distinct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99239440EF284973039A0999DC626537 /* distinct.swift */; }; + FBA9AB5511104BC83BBAB557D47B8B2D /* GradientStrokeRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0AC41EA6D004745BAE6C7B3339BADDD /* GradientStrokeRenderer.swift */; }; + FBBDF31BD5CA23C47E4C18BCA47A4194 /* OIMCustomElem.h in Headers */ = {isa = PBXBuildFile; fileRef = 02A8A43AAF8C972D6B0CCEFB283A10B4 /* OIMCustomElem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FC09C6960BE94A9DC9C2252058104D13 /* PhotoEditorViewController+Export.swift in Sources */ = {isa = PBXBuildFile; fileRef = E16FDF7DD49FB5D341120E3EC5AC1D5C /* PhotoEditorViewController+Export.swift */; }; + FC2E74989B954AF9D2AAE1ABC03156D6 /* LayerStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE2ABF42C1496614D3DDD6544E992F73 /* LayerStyle.swift */; }; + FC9A8A198E8D0DC593197CD949B7B722 /* SchedulerType.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD2DB39097CEEE8679B416972A73C59 /* SchedulerType.swift */; }; + FCA8946A40BE52876F991CF772C26AB3 /* YBIBLoadingView.m in Sources */ = {isa = PBXBuildFile; fileRef = 28BE9C4C4FD97745A47638677BEF26C1 /* YBIBLoadingView.m */; }; + FD08990C503D242E5A70B010B704C755 /* KingfisherManager+LivePhoto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 503405F11788ADB88FD0ED81209159EE /* KingfisherManager+LivePhoto.swift */; }; + FD31D6875DC774E1C134CD580735FD64 /* UIDatePicker+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = D813A5AF071FD0BD4182C8B22E365A01 /* UIDatePicker+Rx.swift */; }; + FD3904804913DEE21108083EEF8CE4EC /* AnyNodeProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F8D5B1A459FAE61EDF4337A132BB5AF /* AnyNodeProperty.swift */; }; + FD552610731EB624F8A47C3ACA927A15 /* UIView+Resign.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6B15A87F23CED5AFFB3908396D1AD38 /* UIView+Resign.swift */; }; + FDABBA4C9C58FB24BE28FFE81C55658A /* Collection+Diff.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF9B4F936F9017EE6FE6902E94AAAEC /* Collection+Diff.swift */; }; + FDD025445312AFB33EA31D1EADAEDBF1 /* random_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = ECC43983EFD3D5D2F45DD8A897943511 /* random_utils.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FE0D3260BF27D388B0200F1AC8151619 /* IQKeyboardCore-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 39F33078ADCADC74D51595069A4B4F27 /* IQKeyboardCore-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + FE106B8B51187E9B8A8E6A258749A21F /* RxCollectionViewReactiveArrayDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 410138B7DB73A37EA3B12FDE47EC6909 /* RxCollectionViewReactiveArrayDataSource.swift */; }; + FE410F461D895A1284A9BBB6A13A65AF /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */; }; + FE4F12DF6E4DDA7B5681A48C6F86FB97 /* RxTableViewDataSourceProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBA1509DD9D34552546037937DF23074 /* RxTableViewDataSourceProxy.swift */; }; + FE65FB5982AE1A8238A0AF5B96EB844E /* VideoEditorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A527F6E05456C08754EC86F74615F4 /* VideoEditorViewController.swift */; }; + FE9BA3316B14AC042881E3601745E44A /* GIFAnimatedImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3E10F0E4E1EEB483B960CB8AB44788 /* GIFAnimatedImage.swift */; }; + FEBD6D063AA753708127F5CA20880175 /* IQKeyboardReturnManager-IQKeyboardReturnManager in Resources */ = {isa = PBXBuildFile; fileRef = 110BD425B6CAD6801539E2C6AB6E0662 /* IQKeyboardReturnManager-IQKeyboardReturnManager */; }; + FEC6D41D15BA321D44135C433579B85F /* DictionaryTransform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E36CFCF21F8FB81BAA8FBA2F261E949 /* DictionaryTransform.swift */; }; + FEE883575278D5BE8F185437AB5DB3BB /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 91B0431B844DD4BC6EA015F23F666DBB /* MJRefreshGifHeader.m */; }; + FF020D50D3B0742EFED9C172269D9D83 /* IQKeyboardAppearanceConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71A3AA46FA62EF3D23F05187F1EA1CD0 /* IQKeyboardAppearanceConfiguration.swift */; }; + FF1AC5DF8F714F01BBB4D4375D17B1DC /* AssetManager+Authorization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FDCC95F21DE5E485AAE4A6AFC3ECDE3 /* AssetManager+Authorization.swift */; }; + FF46177786D9397F4E4E65F116F734FF /* UITextField+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 45847A481163BB50EC86B3708DED15B7 /* UITextField+Rx.swift */; }; + FFAE08E506C1E1F5FDFE534380A206AE /* Core+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B1594EBD0E078355AAC2E6368B21BDC /* Core+Data.swift */; }; + FFD327CC50C276F2151DE9D9A16FF2A8 /* AnyEpoxyModelProperty.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAFFC72036DE0CBF86EEAC95FEBA863A /* AnyEpoxyModelProperty.swift */; }; + FFEDCD03350E9C1FE968B273493B1375 /* RetryWhen.swift in Sources */ = {isa = PBXBuildFile; fileRef = F75F21B2AAF7305696C0A8091C93874D /* RetryWhen.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 01A6350127486356A1C2E85210A9D9F7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; - }; - 06463C8289753D95DDDF907052B88759 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A26E6FD851C20D652B2755C1464A9990; - remoteInfo = IQKeyboardNotification; - }; - 09F00EF127F628393D4A26B1A7AB21A7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 39082CE2CA8065D786A75F5C09CFF2C0; - remoteInfo = AMapFoundation; - }; - 0B8DB26A8EDC383CE89F82E2A73C1EA5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0981F89DB5DA3FFCFFEBDE1F56287054; - remoteInfo = IQKeyboardReturnManager; - }; - 137C56D61C9FFBF4B78C31122C39A264 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4; - remoteInfo = IQKeyboardCore; - }; - 1C8EE194FACDF5C3033FD7F2B2AFE0E3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 997E783A70C18DC9BA830488608C03AA; - remoteInfo = GTCommonSDK; - }; - 1CB9B8C07A8A9891C031B68836854138 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EEE261386011CDF271BE289F73FF5959; - remoteInfo = "IQKeyboardCore-IQKeyboardCore"; - }; - 1D808FF63478B530FFE6E3EEFF043D66 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 976126A1CE06DC6E162563800E1BDF14; - remoteInfo = "Alamofire-Alamofire"; - }; - 1FF5B535B3940EB099FBFFE6BAC72168 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0028E46539689892CC926BB8D811EF54; - remoteInfo = OpenIMSDK; - }; - 21B48BBB7EABFF2A496C879EB5D4C009 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6968C202A297A606D5EACC3679AAA627; - remoteInfo = HXPHPicker; - }; - 22335D1F8C7B94C537A5259BA4C371FC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 212F79CE462FC723AF42979B57FBB8A6; - remoteInfo = Differentiator; - }; - 23490CF8E52973EEBB2545881DA768EF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 5C92E047D2B317BFB31393F449A9EA0D; - remoteInfo = "RxCocoa-RxCocoa_Privacy"; - }; - 244DDC304A1C3FE446ABB68C2F8E47AE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4D3BA58D0583DF37575CACAB3DDADC85; - remoteInfo = MJExtension; - }; - 251185EBB34BA6D4BE416746A7A9B737 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0B967D7F8561D42493EE289EC8D450D1; - remoteInfo = "lottie-ios"; - }; - 25E379AE25F5D44AF3A160CFBCEC6DE4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; - }; - 2736CAD34BEA107334B3081DDB656F20 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; - }; - 291AB26A08BE59A9CF84C48A9280A9D1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 9828BBC09E9FB1238624113D7456E59E; - remoteInfo = "Kingfisher-Kingfisher"; - }; - 2990B8F4BC142DDF29DD421FC13B3B30 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B32AF3F43989CBA171BB1FB3957A4509; - remoteInfo = "MJExtension-MJExtension"; - }; - 2AC7556419A170F98BBE91C1B4CEDCB9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3AEB4A97CEAE5A782BA5E5D6A468A913; - remoteInfo = URLNavigator; - }; - 2CAEE310D3B97BAA4B4540B2F5BCD32E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A049F3164EBC335A7982A4E1FB3A5EAA; - remoteInfo = SwiftyUserDefaults; - }; - 2CB1EE1F7FF3714527E0172E800FE0AB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8; - remoteInfo = MJRefresh; - }; - 2DE397E5C1AB94922E974FED0D5E7E32 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E; - remoteInfo = IQTextInputViewNotification; - }; - 346A27623BAC9A07E38D677AA3C8EAB8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 39082CE2CA8065D786A75F5C09CFF2C0; - remoteInfo = AMapFoundation; - }; - 351468779D2EAAD8A4E07915599C7551 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6; - remoteInfo = RxCocoa; - }; - 3828D56BFE94CBD1850681EFA642F14A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47D2E85A78C25869BB13521D8561A638; - remoteInfo = libwebp; - }; - 3A542A89DBC278D6D53B97A0397FA913 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E; - remoteInfo = IQTextInputViewNotification; - }; - 3B0B8661A87BC63E7130D76B921302DF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 401909D4FB2014BF539896BF0CCA48C2; - remoteInfo = RxDataSources; - }; - 4010404738D37E89EA60E90F78D27031 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; - }; - 4052A9D51559EEE02D2F445E659D02B7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491; - remoteInfo = Kingfisher; - }; - 44977C8C515E8BC32C6EBEB2C8BD7D12 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0E87F100EFC3B44F5BB5AF12375D07F1; - remoteInfo = OpenIMSDKCore; - }; - 44F685DF3ECED9770EBF196548A52EFF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B26054DF1DEA11585A231AF6D1D80D5E; - remoteInfo = "MJRefresh-MJRefresh.Privacy"; - }; - 4D5B7CBCEA667224D25C228EAFC38883 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6038CE6006EFBE9D905454CF01909C42; - remoteInfo = SwiftDate; - }; - 4E799023B611D10F37D971171776FAF3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1; - remoteInfo = IQKeyboardToolbar; - }; - 4F55F321DF9C2250018DD25606C55A69 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; - remoteInfo = IQKeyboardManagerSwift; - }; - 550F076493239FB30A4EE33B88AF9F5F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4; - remoteInfo = IQKeyboardCore; - }; - 58A3D1F04069798EE10AA0BD302A0D43 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4847ACB1E2799345AA74D9E317048D58; - remoteInfo = "AlipaySDK-iOS"; - }; - 5AB7291B64E5815D31A12FF8566204DC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 677650A76A720691B88A6959EFED6418; - remoteInfo = "SwiftyJSON-SwiftyJSON"; - }; - 5AE3B621B1CA9B1AA9EF9401040C162D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E68E71E462C154107C49C379E539826E; - remoteInfo = "ObjectMapper-Privacy"; - }; - 5E8B6A6FEC9A5EACF8141B1EA858ACC8 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 39082CE2CA8065D786A75F5C09CFF2C0; - remoteInfo = AMapFoundation; - }; - 5FEA73E15104EF1E4A1B9DD6C99111EB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A; - remoteInfo = "SnapKit-SnapKit_Privacy"; - }; - 6095D2B81CA66FE208380E49962E701B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 17D542296AD0C26B1C5815268E5C6BF6; - remoteInfo = GYSDK; - }; - 617BD99068746066474E219AB7DCDDD2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6; - remoteInfo = RxCocoa; - }; - 619CEF8B1A643617590B0E88D79290B1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 88810798DA63A2F6611B0970EA276DEC; - remoteInfo = "IQKeyboardReturnManager-IQKeyboardReturnManager"; - }; - 6417F0F16845441ED9CAAE8D86804FFA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 65E50FFCCC371775D923800BABEFB3B2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7C5613175BBC4BF67E36DB4FBEBC01D0; - remoteInfo = "IQKeyboardToolbarManager-IQKeyboardToolbarManager"; - }; - 6698AE69906FE54347F76FE5A09F9744 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 212F79CE462FC723AF42979B57FBB8A6; - remoteInfo = Differentiator; - }; - 687188A6DD7DBEBCC96D7A5F07767DE7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 971676D1C9A11C105647D995975ACE4F; - remoteInfo = AMapLocation; - }; - 6A5E8AD821DE5186B7E4B0DB322E54FC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0E87F100EFC3B44F5BB5AF12375D07F1; - remoteInfo = OpenIMSDKCore; - }; - 6E073E598E3EA99076172DA844BD3E66 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1; - remoteInfo = IQKeyboardToolbar; - }; - 758012FD9D7EB54361C1B62A5B44C08B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 997E783A70C18DC9BA830488608C03AA; - remoteInfo = GTCommonSDK; - }; - 7779A1506585323E855CF257360A560F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A26E6FD851C20D652B2755C1464A9990; - remoteInfo = IQKeyboardNotification; - }; - 7CA119DA3BAABAD24A6F78C73396D36D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7F18C31A804695333763EEC303E265D7; - remoteInfo = "WechatOpenSDK-XCFramework"; - }; - 8234E433BA1E308467D0C0BB4CCD7092 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 12890DE3ABBC2CA295E108358D85EE69; - remoteInfo = IQTextView; - }; - 83502488CB49241E8DF30052D6327C6E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 020993F16DA5986DACE118349EBCE9E5; - remoteInfo = IQKeyboardToolbarManager; - }; - 8421B4F40D1102DFCA7ABB75FA1D0379 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = ED7124602AA1B5C6A257912C7E8B793B; - remoteInfo = RxSwiftExt; - }; - 87FC6AABDB23D7FF2726CC40BAF15109 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0981F89DB5DA3FFCFFEBDE1F56287054; - remoteInfo = IQKeyboardReturnManager; - }; - 89B91581100671498BD94B302D6F17C9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8194323886ECAF7E912EFDAFC84017AA; - remoteInfo = ZXSDK; - }; - 89E0D584BA990913567091EC515D197E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 47D2E85A78C25869BB13521D8561A638; - remoteInfo = libwebp; - }; - 8E91AD5D12BB7EC4472712E9D734717E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; - }; - 8F8EA086D17C871ECB9F011BB4399293 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 822E44240F2922DAB12018A6B649BD19; - remoteInfo = YYImage; - }; - 938DDA32C97451586FE0A98AD9C856EA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3AE57FC4CF27B0BC540B3112353377BF; - remoteInfo = "MBProgressHUD-MBProgressHUD"; - }; - 94827A004FD74C9C3120375525F6B18F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C23DB88E45B0ED14F0C8827BE9C46C95; - remoteInfo = MarqueeLabel; - }; - 957B3DDF554B4518F813C6CAC2B8A130 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2035A387A5D5D85BEF7F693731454A3D; - remoteInfo = SGQRCode; - }; - 9AB9C38E4DCCA37D29EC24EF2947CAE5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 8194323886ECAF7E912EFDAFC84017AA; - remoteInfo = ZXSDK; - }; - 9EA5F55EAE063424752D3D0C69BAE494 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491; - remoteInfo = Kingfisher; - }; - A59AD2460664BADA968DD6E7065D2D3F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = BF2A15FEC3F3424BBC4B9AD5F86F2D54; - remoteInfo = "lottie-ios-LottiePrivacyInfo"; - }; - A68E61F850DBF2CE19F5C798AC2C4E9B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 276021C4482165D46E0CBBEFB822FE95; - remoteInfo = "CocoaLumberjack-CocoaLumberjackPrivacy"; - }; - A6E4A18D00B0A670BC012935EDC0AA0D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4622BFEF3DC16E8BD15EEFC30D4D0084; - remoteInfo = RxRelay; - }; - A920C06099E87CF8D916443CD9A164EC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D118A6A04828FD3CDA8640CD2B6796D2; - remoteInfo = SwiftyJSON; - }; - AA24B487121696F2E622121056444F4D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 11779BD43CF8155A53E2C00B1566A19F; - remoteInfo = "RxSwift-RxSwift_Privacy"; - }; - AD8A31902E3ABC2E470660E5AD02AA2B /* PBXContainerItemProxy */ = { + 005562AA15FFEA41AE71867F25E6C812 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = B43A58FC22C898DE29F6E12FE9636507; remoteInfo = TagListView; }; - B4BDFA40DE5E6036BBECD2EB7B66B29E /* PBXContainerItemProxy */ = { + 011809F5F4008DF209C1D8504B7C00E8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = CBFB5A372F4DE9D4BC6B9ADA98B80BFE; - remoteInfo = "MarqueeLabel-MarqueeLabel"; + remoteGlobalIDString = C23DB88E45B0ED14F0C8827BE9C46C95; + remoteInfo = MarqueeLabel; }; - B705FB637F1BBFCB6579C23344956B53 /* PBXContainerItemProxy */ = { + 036E821D970EBBF9BDD56CF7C69E06B5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A26E6FD851C20D652B2755C1464A9990; + remoteInfo = IQKeyboardNotification; + }; + 0414BDF22C6CC276280BDBA72B08F65C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; remoteInfo = RxSwift; }; - B7B9C134FCD75F5BB59532E17B97C8CE /* PBXContainerItemProxy */ = { + 08CE2068C3A88451E5040A623F2EF8C9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; + remoteGlobalIDString = 11779BD43CF8155A53E2C00B1566A19F; + remoteInfo = "RxSwift-RxSwift_Privacy"; }; - B81587444BF1FD0218E2208B3678FFB2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 020993F16DA5986DACE118349EBCE9E5; - remoteInfo = IQKeyboardToolbarManager; - }; - BB06943732499A1F6F6BAAE1D30483CD /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; - }; - BD8798429F2E1015908BBBE5513B1DEE /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4502C7427440BEB17A50C0BF6E638A85; - remoteInfo = "IQTextInputViewNotification-IQTextInputViewNotification"; - }; - BDE639580A000A2BFE14DF3515BE586D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CBED833AAD6266F3AEFE9BE31C68E094; - remoteInfo = SDCycleScrollView; - }; - BEBCCE129C3FAE08885BCFD5BD9205E0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E95654B155D25890BE8E26081FCA8265; - remoteInfo = CocoaLumberjack; - }; - C4416B962E9529F40E5126CF117DFB3C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 17F9141D333DA1A7BE5937F227221070; - remoteInfo = Moya; - }; - CAEFA3ED1143385F67434B9DA8870286 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4622BFEF3DC16E8BD15EEFC30D4D0084; - remoteInfo = RxRelay; - }; - CDCD2167117F43C93949FA68B3A394FB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1; - remoteInfo = IQKeyboardToolbar; - }; - CE8BC8063D05ECAF125BF3FBADDD4219 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B97FC50FB8C4390DDCCA281E85E7AD84; - remoteInfo = YBImageBrowser; - }; - CE99528F856F7EFF6543E5AF17875326 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4; - remoteInfo = IQKeyboardCore; - }; - D4FE30F91F5C24105C61589F44DF5C43 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 82B0A41D3031FF27D78E17B0A9A46FB0; - remoteInfo = MBProgressHUD; - }; - D51DDF55D7D77DC559217AD87DCCF030 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E; - remoteInfo = IQTextInputViewNotification; - }; - DA23849F151292CAC144283C9731C6BC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 54F872FDE6669F86C58C8075211FE643; - remoteInfo = AMapSearch; - }; - DB6D8BDA071E9775836E8BBCAE676643 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 3957A4F8F4B8823C2472883F7D067592; - remoteInfo = AMap3DMap; - }; - DDD515447CCA93F806AAAE776727CC46 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; - remoteInfo = RxSwift; - }; - E068344C6A7510CD60EE8C7E17238229 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6; - remoteInfo = RxCocoa; - }; - E17026AEBA27086027457B5ADEDB753F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2B8FF445A5162845FAB9EC00FC92B694; - remoteInfo = "IQKeyboardNotification-IQKeyboardNotification"; - }; - E2AEEDC1607FF9458AA1B4DB2E2A76EF /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4D3BA58D0583DF37575CACAB3DDADC85; - remoteInfo = MJExtension; - }; - E30502CDF95F0580DCCB4E0728339B4C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 12890DE3ABBC2CA295E108358D85EE69; - remoteInfo = IQTextView; - }; - E3612B3DD75B152847A2E4700FC7886B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0D78006448081C29492BCBD9AE8ECC81; - remoteInfo = KingfisherWebP; - }; - E4DEA0D02B5FB226C50215DE5EEE890E /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = CF903DF43E111410ECA0C288D36FA21A; - remoteInfo = SwiftKeychainWrapper; - }; - E631D3C6283AF585E5A7E923F001EC85 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 162E649F50FEC62B61BDD87D1BD422B4; - remoteInfo = ObjectMapper; - }; - E68089470167F492A81316D2665D6A42 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 94CFBA7D633ECA58DF85C327B035E6A3; - remoteInfo = "SDWebImage-SDWebImage"; - }; - E9CC07909D25C012E9D227D1C083DA10 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E; - remoteInfo = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; - }; - EAB48EE6968E065C1D9DB63BA488C24C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; - remoteInfo = Masonry; - }; - EB7827ABAFB11B2C1C8ABA73D74FFDD6 /* PBXContainerItemProxy */ = { + 0A6EBF5BEBE66C578BD712891C566CDC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 39082CE2CA8065D786A75F5C09CFF2C0; remoteInfo = AMapFoundation; }; - EE474117261DF6BD7D27B58EF759E9F9 /* PBXContainerItemProxy */ = { + 0B078191623EB8D1BFC714D4938E6AA7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A6602BCAA6F4F932A586C41D0B7E019C; - remoteInfo = "IQTextView-IQTextView"; + remoteGlobalIDString = 88810798DA63A2F6611B0970EA276DEC; + remoteInfo = "IQKeyboardReturnManager-IQKeyboardReturnManager"; }; - F22C0B0D2654CE7D60475F4A0F317A4C /* PBXContainerItemProxy */ = { + 0E3A7827B06EC0665DD6957B0DAA7415 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 89ADB0D61D0BE9648E9853F5F8BDA717; - remoteInfo = Popover; + remoteGlobalIDString = 39082CE2CA8065D786A75F5C09CFF2C0; + remoteInfo = AMapFoundation; }; - F55BBABB60E6185DE4DEF49F651C0513 /* PBXContainerItemProxy */ = { + 11D34C1D6EF7623D84CC8128C18D304B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; - remoteInfo = SDWebImage; + remoteGlobalIDString = 3957A4F8F4B8823C2472883F7D067592; + remoteInfo = AMap3DMap; }; - F733C729C72BE1DCD0D28268F2F49834 /* PBXContainerItemProxy */ = { + 130043C378BF97EED251A863945441F0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 822E44240F2922DAB12018A6B649BD19; - remoteInfo = YYImage; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; }; - F90FA9F5EC9C9EDE48802C2296620F70 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B247F77A0CD5E19C8187A9BA1EB58C09; - remoteInfo = "IQKeyboardToolbar-IQKeyboardToolbar"; - }; - FBFD31B834AB5C365995BB83B4E10112 /* PBXContainerItemProxy */ = { + 15248462A6902916CD93734DD2D1B4D0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4; remoteInfo = IQKeyboardCore; }; - FE6ED4719C4114B1B47F408C5C504BE3 /* PBXContainerItemProxy */ = { + 1672C6BBECCECC637563353E01C11192 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B26054DF1DEA11585A231AF6D1D80D5E; + remoteInfo = "MJRefresh-MJRefresh.Privacy"; + }; + 1D943D61C4FC1EFCE5755ABD4F4D2B05 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9828BBC09E9FB1238624113D7456E59E; + remoteInfo = "Kingfisher-Kingfisher"; + }; + 1F0037CA940608843934DB210530C610 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; + remoteInfo = RxSwift; + }; + 21670DA1EB50FE0700045C6DEA84AB9D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 677650A76A720691B88A6959EFED6418; + remoteInfo = "SwiftyJSON-SwiftyJSON"; + }; + 21C92A000FA0417BEFCB4DCF5D5AD45C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6868056D761E163D10FDAF8CF1C4D9B8; + remoteInfo = MJRefresh; + }; + 23D42DCB8C00CDFBB554522E6BD15F65 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; + }; + 26CC8E64F4AD955ED447FD144ECF5694 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 020993F16DA5986DACE118349EBCE9E5; + remoteInfo = IQKeyboardToolbarManager; + }; + 27D15A52F64802032F0130937948DD51 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 39101A2B1096DFB129FCDE5490875054; remoteInfo = "RxRelay-RxRelay_Privacy"; }; + 2DCE738315013DB5A0C9984AD87F34DC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 12890DE3ABBC2CA295E108358D85EE69; + remoteInfo = IQTextView; + }; + 30D675D8FB292BC97790B551F7391FFC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 94CFBA7D633ECA58DF85C327B035E6A3; + remoteInfo = "SDWebImage-SDWebImage"; + }; + 3515FA4C9101336553D8B459366C326A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B017CC75E2704C686AA0A2203247D9C7; + remoteInfo = MqttCocoaAsyncSocket; + }; + 361A745847E7D60EBF467B63CB36731F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = BF2A15FEC3F3424BBC4B9AD5F86F2D54; + remoteInfo = "lottie-ios-LottiePrivacyInfo"; + }; + 3F5CC1B761456481613F5968A6E2F9B0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 401909D4FB2014BF539896BF0CCA48C2; + remoteInfo = RxDataSources; + }; + 42A5711AAE77808CC59250A7D42C86EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4; + remoteInfo = IQKeyboardCore; + }; + 4344B82D636C96D4013D67AEE644BA36 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 822E44240F2922DAB12018A6B649BD19; + remoteInfo = YYImage; + }; + 45B26FD291F5F9D8340966591898C70A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = D118A6A04828FD3CDA8640CD2B6796D2; + remoteInfo = SwiftyJSON; + }; + 46247FCF2DAB5659B51A80E78B6C0ED6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E68E71E462C154107C49C379E539826E; + remoteInfo = "ObjectMapper-Privacy"; + }; + 48694D4FD0821ECF2A72A26E45A5707E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 162E649F50FEC62B61BDD87D1BD422B4; + remoteInfo = ObjectMapper; + }; + 496A278884CB9032040FEBB54F58C207 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; + }; + 49A6EB9F227A89D488C8435C6E92C190 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EEE261386011CDF271BE289F73FF5959; + remoteInfo = "IQKeyboardCore-IQKeyboardCore"; + }; + 4CC59E2DAB42F874FD77E5D348407F1E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 54F872FDE6669F86C58C8075211FE643; + remoteInfo = AMapSearch; + }; + 53F50A050E96C7626FC86FF54C0E6588 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6; + remoteInfo = RxCocoa; + }; + 56EDFF18E6A7EF62F9778F9D339BA6EF /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0E87F100EFC3B44F5BB5AF12375D07F1; + remoteInfo = OpenIMSDKCore; + }; + 5BA101BE17462FBE5638E6027D59942A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3AEB4A97CEAE5A782BA5E5D6A468A913; + remoteInfo = URLNavigator; + }; + 5C18B6A1EEDBA0732591A28ECE5A889F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; + remoteInfo = Alamofire; + }; + 5CC296B0634082698430B8F8EF10B236 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E95654B155D25890BE8E26081FCA8265; + remoteInfo = CocoaLumberjack; + }; + 5F59C655DBC3973217A9541C1C6FA78F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 82B0A41D3031FF27D78E17B0A9A46FB0; + remoteInfo = MBProgressHUD; + }; + 61510A589B2AA984E10206B244AA35EC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 17F9141D333DA1A7BE5937F227221070; + remoteInfo = Moya; + }; + 65F950B2E8361CFF33A4B14607334F20 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4622BFEF3DC16E8BD15EEFC30D4D0084; + remoteInfo = RxRelay; + }; + 661F360A55C36C733C8034D2EE462790 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4D3BA58D0583DF37575CACAB3DDADC85; + remoteInfo = MJExtension; + }; + 6651E6377E743CA4FD3A4E95EFF1CD92 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B247F77A0CD5E19C8187A9BA1EB58C09; + remoteInfo = "IQKeyboardToolbar-IQKeyboardToolbar"; + }; + 68BF8CBF31EE5DFCFD3D38F3CCECF281 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E; + remoteInfo = IQTextInputViewNotification; + }; + 6A522AD144F85728A937B841E4219A34 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6968C202A297A606D5EACC3679AAA627; + remoteInfo = HXPHPicker; + }; + 711580CB1E485FAD6858FE8BDFBCF41A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4847ACB1E2799345AA74D9E317048D58; + remoteInfo = "AlipaySDK-iOS"; + }; + 71DD00F116BAD0DFAC8EC511E3906D67 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2B8FF445A5162845FAB9EC00FC92B694; + remoteInfo = "IQKeyboardNotification-IQKeyboardNotification"; + }; + 72793BEC4391CB8366125C3553B258DD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4; + remoteInfo = IQKeyboardCore; + }; + 72C08720005281AE6206FAB73EFB2553 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5C92E047D2B317BFB31393F449A9EA0D; + remoteInfo = "RxCocoa-RxCocoa_Privacy"; + }; + 738F3545E5329F8B74DF73017F82102E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F9A1BF709B7BA4C24A83664EB1E1C7D4; + remoteInfo = IQKeyboardCore; + }; + 73DCD6E414CE9A83C0943483E2B19CD7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 212F79CE462FC723AF42979B57FBB8A6; + remoteInfo = Differentiator; + }; + 75A41B01F44388B65DAFE9642A27098F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0981F89DB5DA3FFCFFEBDE1F56287054; + remoteInfo = IQKeyboardReturnManager; + }; + 7802C1334D1A4C1553F5AB6E79180E1B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3847153A6E5EEFB86565BA840768F429; + remoteInfo = SDWebImage; + }; + 784AB6009C802DCDB077C8FDAE12A645 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8194323886ECAF7E912EFDAFC84017AA; + remoteInfo = ZXSDK; + }; + 7DA7C2D6F3BF93B0840403916210054F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E; + remoteInfo = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; + }; + 82061C8B1C74993546EF1E76F7EE7AAA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 55AF53E6C77A10ED4985E04D74A8878E; + remoteInfo = Masonry; + }; + 82CF266E41767644FD6FDD6305E18060 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CF903DF43E111410ECA0C288D36FA21A; + remoteInfo = SwiftKeychainWrapper; + }; + 8537939584ADB402914C80BECBFCF361 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 39082CE2CA8065D786A75F5C09CFF2C0; + remoteInfo = AMapFoundation; + }; + 8875DBA31FC4A29EB1EBAF05D113AC5F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 12890DE3ABBC2CA295E108358D85EE69; + remoteInfo = IQTextView; + }; + 900A11A7156655DEE3677C298CD2C432 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; + remoteInfo = SnapKit; + }; + 9038E5B5FF55EF8D78069E4E04B077A6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0028E46539689892CC926BB8D811EF54; + remoteInfo = OpenIMSDK; + }; + 907A43C2D2CE2FF7D4D7A74C0B13DB98 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4EB168A830EFA6136FA93357D1F1511A; + remoteInfo = CocoaMQTT; + }; + 92A582F518E854FD733F266C5D4796E6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8A8DB685241263AFDF5E6B20FE67B93A; + remoteInfo = "SnapKit-SnapKit_Privacy"; + }; + 94CE7B4000DBC5A962E3F64FFC67AF62 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 47D2E85A78C25869BB13521D8561A638; + remoteInfo = libwebp; + }; + 962A816AFE6552938E803DAC24B893E7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491; + remoteInfo = Kingfisher; + }; + 9933D71F465BD1267CBE04881A644883 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8194323886ECAF7E912EFDAFC84017AA; + remoteInfo = ZXSDK; + }; + 9C23B6E671F3DDEF29CFD700ABB0A4F6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0981F89DB5DA3FFCFFEBDE1F56287054; + remoteInfo = IQKeyboardReturnManager; + }; + 9DBD8D57BD934FE628357F1657ACBC0D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 39082CE2CA8065D786A75F5C09CFF2C0; + remoteInfo = AMapFoundation; + }; + 9E43213877E86A150CB3395AB1BD2520 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B32AF3F43989CBA171BB1FB3957A4509; + remoteInfo = "MJExtension-MJExtension"; + }; + A19C5EB2E87A2319EA469F7A6939880F /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 17D542296AD0C26B1C5815268E5C6BF6; + remoteInfo = GYSDK; + }; + A5E788E6C131456A7332F4B7A799752D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 822E44240F2922DAB12018A6B649BD19; + remoteInfo = YYImage; + }; + A6527E49C34B922D5300F4DEA05B1C95 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 47D2E85A78C25869BB13521D8561A638; + remoteInfo = libwebp; + }; + A835495F4170F147B9897D5BF2C7A8EC /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A049F3164EBC335A7982A4E1FB3A5EAA; + remoteInfo = SwiftyUserDefaults; + }; + AA502341AA438B814AFF656BD10B937C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0E87F100EFC3B44F5BB5AF12375D07F1; + remoteInfo = OpenIMSDKCore; + }; + AAEAC1CB022C91946977932E2F36F554 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0D78006448081C29492BCBD9AE8ECC81; + remoteInfo = KingfisherWebP; + }; + B0ACD0077EA75FA016730C75D87D54A7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 976126A1CE06DC6E162563800E1BDF14; + remoteInfo = "Alamofire-Alamofire"; + }; + B22045B680BC1B899817EED88D8D5A1D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; + remoteInfo = RxSwift; + }; + B87128D8A77E84948FCE5153887EC567 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CBED833AAD6266F3AEFE9BE31C68E094; + remoteInfo = SDCycleScrollView; + }; + B94D53E29BDC4FE85F14286CAC4E28A0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B490E7485944099E16C9CBD79119D1D4; + remoteInfo = IQKeyboardManagerSwift; + }; + B9C34D13AE158515EE54C897C01D3B2C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; + remoteInfo = RxSwift; + }; + BA14FB92C8EA947503B64896940026ED /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B97FC50FB8C4390DDCCA281E85E7AD84; + remoteInfo = YBImageBrowser; + }; + BCC1D546C11697A4C2AAFDC6C624F200 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0B967D7F8561D42493EE289EC8D450D1; + remoteInfo = "lottie-ios"; + }; + BE315323C4C47FF428043111D60EAAD8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 971676D1C9A11C105647D995975ACE4F; + remoteInfo = AMapLocation; + }; + C008E60717A970F94F53D475F54BF551 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = B017CC75E2704C686AA0A2203247D9C7; + remoteInfo = MqttCocoaAsyncSocket; + }; + C157198BB10755114C07BB7406C647DD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A26E6FD851C20D652B2755C1464A9990; + remoteInfo = IQKeyboardNotification; + }; + C47774166C67169A42A6BDE42E4F049B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 2035A387A5D5D85BEF7F693731454A3D; + remoteInfo = SGQRCode; + }; + C4FF52F7A63CA146057AFEE8061A121E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 997E783A70C18DC9BA830488608C03AA; + remoteInfo = GTCommonSDK; + }; + C58769B388904CFBBFB74603F94C50D6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E; + remoteInfo = IQTextInputViewNotification; + }; + C6CC084AA4C491E404AEF31A9604EE5A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 89ADB0D61D0BE9648E9853F5F8BDA717; + remoteInfo = Popover; + }; + CF1FD6D0A950736411D40E1771B30E1D /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1; + remoteInfo = IQKeyboardToolbar; + }; + D191F8298F89E8435A773EB0C46B6730 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 020993F16DA5986DACE118349EBCE9E5; + remoteInfo = IQKeyboardToolbarManager; + }; + D4D375C3A48E507FEB7E84DDB2092278 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4622BFEF3DC16E8BD15EEFC30D4D0084; + remoteInfo = RxRelay; + }; + D5FB8EBC028DC94ABD37F92E03BF65B7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 283C1F2EA88CD4413165801A6748A48E; + remoteInfo = IQTextInputViewNotification; + }; + D70CABEAD978481AC5C27E1BD3FB2251 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CBFB5A372F4DE9D4BC6B9ADA98B80BFE; + remoteInfo = "MarqueeLabel-MarqueeLabel"; + }; + D9CAB0682DC824983DD8C8336131DB73 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 276021C4482165D46E0CBBEFB822FE95; + remoteInfo = "CocoaLumberjack-CocoaLumberjackPrivacy"; + }; + DCD38EE22CEFFDC077E0BBA299A4D094 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = EA9EA43B3B503823EE36C60D9C8A865F; + remoteInfo = RxSwift; + }; + E0964E76E3BFDF3A8D89CD0F00020918 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7C5613175BBC4BF67E36DB4FBEBC01D0; + remoteInfo = "IQKeyboardToolbarManager-IQKeyboardToolbarManager"; + }; + E4D2BF6E5E676CBDFA10D95310C021CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6; + remoteInfo = RxCocoa; + }; + E5D1EB384DCAB100A17AB2E792EA5EC1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7F18C31A804695333763EEC303E265D7; + remoteInfo = "WechatOpenSDK-XCFramework"; + }; + E8AA5482A19C7D587D709CC72C114919 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A6602BCAA6F4F932A586C41D0B7E019C; + remoteInfo = "IQTextView-IQTextView"; + }; + E90ECBB4688323A3CEF17EA6815410D3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4D3BA58D0583DF37575CACAB3DDADC85; + remoteInfo = MJExtension; + }; + EA60B9C6187F2AE83386DE333F9F4763 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1; + remoteInfo = IQKeyboardToolbar; + }; + EACB696E9FAB7D18440A6DD836076FFD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 212F79CE462FC723AF42979B57FBB8A6; + remoteInfo = Differentiator; + }; + EC205F05694C8C333E9828545B2065F9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = ED7124602AA1B5C6A257912C7E8B793B; + remoteInfo = RxSwiftExt; + }; + F10E34D9493224FFE4398C2892A264D0 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F4FE17428FD0E607723A44F17231B7A1; + remoteInfo = IQKeyboardToolbar; + }; + F3D1B8851F2A07DDC598C1CFC751EAFD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6038CE6006EFBE9D905454CF01909C42; + remoteInfo = SwiftDate; + }; + F56741E388B39D1A5A64905DF9B7D036 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6; + remoteInfo = RxCocoa; + }; + F693C01CC808015A7A5BAD5468236061 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = E8022D22FAA6690B5E1C379C1BCE1491; + remoteInfo = Kingfisher; + }; + F6973D2F8D6374A9876A0669AC83E21E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3AE57FC4CF27B0BC540B3112353377BF; + remoteInfo = "MBProgressHUD-MBProgressHUD"; + }; + FC1664C68B15803EBB10BBA3FAA914B8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 997E783A70C18DC9BA830488608C03AA; + remoteInfo = GTCommonSDK; + }; + FE7DB9C7D653C78FFFFC8152E5AD0095 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4502C7427440BEB17A50C0BF6E638A85; + remoteInfo = "IQTextInputViewNotification-IQTextInputViewNotification"; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 001B292321BC5B049194157ACD963619 /* ReplayRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplayRelay.swift; path = RxRelay/ReplayRelay.swift; sourceTree = ""; }; - 003BC8561F8A2CDBE8792BA3D972D3B4 /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; - 005D4C8AF425EF161CADC4688A651EFA /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = ""; }; - 0063BE2DFA2C0152F5DDEEF7CA4531B7 /* CALayer+setupLayerHierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+setupLayerHierarchy.swift"; path = "Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift"; sourceTree = ""; }; - 00666232685340897FBF612CDC76B348 /* Core+Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+Dictionary.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+Dictionary.swift"; sourceTree = ""; }; - 006D228E2E6F8BAA07DB7CE17AB8A953 /* SharedSequence+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Concurrency.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Concurrency.swift"; sourceTree = ""; }; - 00A34944CB3A07DB54E4A187735E5EDB /* OIMManager+Login.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Login.h"; path = "OpenIMSDK/Interface/OIMManager+Login.h"; sourceTree = ""; }; - 00E1EE863C3A3C3630E7BBB6E807087B /* dec_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_sse2.c; path = src/dsp/dec_sse2.c; sourceTree = ""; }; - 00F55D2694BB24CBDD85533DCDB7FC2F /* UploadRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UploadRequest.swift; path = Source/Core/UploadRequest.swift; sourceTree = ""; }; - 01A81FDDCFBF4399353832963143DC0B /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoFooter.h; path = MJRefresh/Base/MJRefreshAutoFooter.h; sourceTree = ""; }; - 01AEFB1EB3A914C86593584A77C0FA77 /* RxCollectionViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift; sourceTree = ""; }; - 01B81C446E6D0311D5E6B347C63082D5 /* FormatIndicatedCacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormatIndicatedCacheSerializer.swift; path = Sources/Cache/FormatIndicatedCacheSerializer.swift; sourceTree = ""; }; - 01CFD68B658BAD15EF824BA4028CA1A2 /* PhotoPickerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerViewController.swift; path = Sources/HXPHPicker/Picker/Controller/PhotoPickerViewController.swift; sourceTree = ""; }; - 01D238240F648EA7EA5C6EBADC6F1FC9 /* ObserverBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverBase.swift; path = RxSwift/Observers/ObserverBase.swift; sourceTree = ""; }; - 01E5DBFAF8111481E00D7B8906879F31 /* UnitBezier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnitBezier.swift; path = Sources/Private/Utility/Primitives/UnitBezier.swift; sourceTree = ""; }; - 01F8EA59DEAAA738ECEF7D68FCD45C7E /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; }; - 020D6025AE9566485C60DFB72DEE5B18 /* GradientFillNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientFillNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift; sourceTree = ""; }; - 0211CECFDC73CE25407A46059C53DB42 /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; - 02295F2192B333D5143DEA4CAEEBEAEE /* DDFileLogger+Buffering.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDFileLogger+Buffering.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDFileLogger+Buffering.h"; sourceTree = ""; }; - 0233AD872EADB05DB729FC8EC5614314 /* AMapSearchAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchAPI.h; path = AMapSearchKit.framework/Headers/AMapSearchAPI.h; sourceTree = ""; }; - 02446533D9FB702A89B3DEA51B1A3BFE /* cost_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_enc.c; path = src/enc/cost_enc.c; sourceTree = ""; }; - 0264AC943656AA3FA9C6B88AC02C1E97 /* YBIBImageLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageLayout.m; path = YBImageBrowser/Image/YBIBImageLayout.m; sourceTree = ""; }; - 026F29BAA77629475C91162F66FF4839 /* DeniedAuthorizationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DeniedAuthorizationView.swift; path = Sources/HXPHPicker/Picker/View/DeniedAuthorizationView.swift; sourceTree = ""; }; - 02D106F8687416EA77319E7ADE562850 /* YBIBAnimatedTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBAnimatedTransition.h; path = YBImageBrowser/Base/YBIBAnimatedTransition.h; sourceTree = ""; }; - 02DBF5316B8E0D522ACE204CE91F2E5C /* HXPHPicker.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = HXPHPicker.bundle; path = Sources/HXPHPicker/Resources/HXPHPicker.bundle; sourceTree = ""; }; - 02F7F5006D4C83A6F5AEDE0548257A71 /* GYSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GYSDK.debug.xcconfig; sourceTree = ""; }; - 02FF9BD791E7E79B5F6D78F088939100 /* Archive+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ZIP64.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+ZIP64.swift"; sourceTree = ""; }; - 030E7B5E65DD005483DE4FC112390EBA /* OIMCustomElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMCustomElem.m; path = OpenIMSDK/Model/OIMCustomElem.m; sourceTree = ""; }; - 035A29367C3694753943C9E78FE114DE /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; - 036352F214EB5A26251C99D81D7BF15C /* Date+Dispatch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Dispatch.swift"; path = "RxSwift/Date+Dispatch.swift"; sourceTree = ""; }; - 037D39577B12B91D443CB163F5B8C2BA /* ImageFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageFormat.swift; path = Sources/Image/ImageFormat.swift; sourceTree = ""; }; - 038D72D383929263E7180ACF0ED926FB /* TagListView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TagListView.release.xcconfig; sourceTree = ""; }; - 039025967C251ADD69ACE1553B51DDF0 /* OIMFriendApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMFriendApplication.h; path = OpenIMSDK/Model/OIMFriendApplication.h; sourceTree = ""; }; - 03AF9077A88CE3FDD85D74403482C1A5 /* mergeWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = mergeWith.swift; path = Source/RxSwift/mergeWith.swift; sourceTree = ""; }; - 03EBA45F8498DF53F666FD4E75823E8C /* Delay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delay.swift; path = RxSwift/Observables/Delay.swift; sourceTree = ""; }; - 0406D4904704EB518E43EE52B4F1D1AA /* DotLottieAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieAnimation.swift; path = Sources/Private/Model/DotLottie/DotLottieAnimation.swift; sourceTree = ""; }; - 04296A362C3407E0A85FD5DB9C3E1EDF /* palette.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = palette.h; path = src/utils/palette.h; sourceTree = ""; }; - 045476BD81F43A7E4D35CFDD204660D7 /* WebPSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebPSerializer.swift; path = Sources/WebPSerializer.swift; sourceTree = ""; }; - 045E796AEE22999EA4184E68E9B7F8E5 /* SGQRCodeLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGQRCodeLog.m; path = SGQRCode/SGQRCodeLog.m; sourceTree = ""; }; - 046756EDF821762DDB9FCB12B7D5EF28 /* DateFormatterTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateFormatterTransform.swift; path = Sources/DateFormatterTransform.swift; sourceTree = ""; }; - 04B7C5A25940963070651E91AD48A5B7 /* Differentiator-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Differentiator-Info.plist"; sourceTree = ""; }; - 04BB4A806B019AC1CFA3C776444FE07E /* yuv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = yuv.h; path = src/dsp/yuv.h; sourceTree = ""; }; - 04D575F8A3ECAFDA90EBA0B26E34F657 /* IQTextView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextView-umbrella.h"; sourceTree = ""; }; - 04FC9167B623F82556D7A2A397717795 /* PrimitiveSequence+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Zip+arity.swift"; path = "RxSwift/Traits/PrimitiveSequence/PrimitiveSequence+Zip+arity.swift"; sourceTree = ""; }; - 050847A31B5BFFB8A95DC61D0BE1E3A8 /* Data+CompressionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+CompressionDeprecated.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Data+CompressionDeprecated.swift"; sourceTree = ""; }; - 054BFF3B2D649118B2DCBE549463B70B /* CPListItem+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CPListItem+Kingfisher.swift"; path = "Sources/Extensions/CPListItem+Kingfisher.swift"; sourceTree = ""; }; - 059A00052A1FE8803E236797E5854769 /* RxTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTarget.swift; path = RxCocoa/Common/RxTarget.swift; sourceTree = ""; }; - 05B1D3E92EC969DE3979A664DD430938 /* ObservableConvertibleType+Infallible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Infallible.swift"; path = "RxSwift/Traits/Infallible/ObservableConvertibleType+Infallible.swift"; sourceTree = ""; }; - 05CFBCB3BAF48A65126967EB66B83905 /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/Extensions/URLRequest+Alamofire.swift"; sourceTree = ""; }; - 05D4D13EF29C8F7DCE86020D32C8D588 /* ValidationType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValidationType.swift; path = Sources/Moya/ValidationType.swift; sourceTree = ""; }; - 05E906325386DD455125AD4ED4D148D2 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; - 06030FFD43B3B128FC6ABE677BA4FE54 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Core/Notifications.swift; sourceTree = ""; }; - 060A177B76119368615F6C08CFBDC704 /* sharpyuv_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_sse2.c; path = sharpyuv/sharpyuv_sse2.c; sourceTree = ""; }; - 0654BFE0C715FB0CD2A72E89C361C633 /* MAHeatMapVectorGridOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorGridOverlay.h; path = MAMapKit.framework/Headers/MAHeatMapVectorGridOverlay.h; sourceTree = ""; }; - 0654D9122788EE00CAED6C0FFEE73F77 /* IQTextInputViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewNotification.swift; path = IQTextInputViewNotification/Classes/IQTextInputViewNotification.swift; sourceTree = ""; }; - 065D063BBA4E2E76DE8E4F0FC55DEC82 /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; - 068B91926FB024A1E64377B345291684 /* MAOfflineItemNationWide.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemNationWide.h; path = MAMapKit.framework/Headers/MAOfflineItemNationWide.h; sourceTree = ""; }; - 06A671AD153C13287C7F5677F7728291 /* AlbumListConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumListConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/AlbumListConfiguration.swift; sourceTree = ""; }; - 06C10E4B12DDF191A13C6778B3161E65 /* AMapSearchObjV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchObjV1.h; path = AMapSearchKit.framework/Headers/AMapSearchObjV1.h; sourceTree = ""; }; - 06C6D818FF85158065EEB29C708DF89F /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = ""; }; - 06C9041561AE6E617D216D91DE531015 /* filters_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_msa.c; path = src/dsp/filters_msa.c; sourceTree = ""; }; + 000906441E421AC44EFD2B17AF49ABEF /* MAPolygon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolygon.h; path = MAMapKit.framework/Headers/MAPolygon.h; sourceTree = ""; }; + 001CAC5B0387F752F807373679700C1A /* Int+DateComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+DateComponents.swift"; path = "Sources/SwiftDate/Foundation+Extras/Int+DateComponents.swift"; sourceTree = ""; }; + 00263D60A048A662D11503C81EB3E293 /* AMapFoundationConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationConst.h; path = AMapFoundationKit.framework/Headers/AMapFoundationConst.h; sourceTree = ""; }; + 004B8301B59E0532FC74ADD360B1B420 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; + 00627804BDA43380564B83E1DE3D49C2 /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; + 00BB87520D0D647F6D66C9FD25D56504 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; + 00CAC1B2D31769B3178F778D87E68816 /* OIMLocationElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMLocationElem.m; path = OpenIMSDK/Model/OIMLocationElem.m; sourceTree = ""; }; + 00D38F293A306ED40E9E30F10E5A2943 /* AlbumViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumViewController.swift; path = Sources/HXPHPicker/Picker/Controller/AlbumViewController.swift; sourceTree = ""; }; + 00D5B305DEE1ED75EE8C4354CC33DDCA /* mapTo+RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "mapTo+RxCocoa.swift"; path = "Source/RxCocoa/mapTo+RxCocoa.swift"; sourceTree = ""; }; + 010FD8BA73DAC958194818B68AFCF699 /* CocoaMQTTReader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTReader.swift; path = Source/CocoaMQTTReader.swift; sourceTree = ""; }; + 01140C390F9C1A5A0B1FA345EDB25D8A /* cost_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cost_enc.h; path = src/enc/cost_enc.h; sourceTree = ""; }; + 011AFAA206FF4A0E965B6A9437F4A8E6 /* URLConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLConvertible.swift; path = Sources/URLMatcher/URLConvertible.swift; sourceTree = ""; }; + 011E89E515BB464178D2AD0A6CBDC760 /* vp8li_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8li_dec.h; path = src/dec/vp8li_dec.h; sourceTree = ""; }; + 015B5597E8B9F59CF0D5FAE133C17DEF /* EditorToolOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorToolOptions.swift; path = Sources/HXPHPicker/Editor/Model/EditorToolOptions.swift; sourceTree = ""; }; + 016496ABA78D6144AB7AD700001BE86A /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; + 018A85E94FE9935E7AFCB8B153633334 /* MqttCocoaAsyncSocket.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MqttCocoaAsyncSocket.release.xcconfig; sourceTree = ""; }; + 01A603880B3B6DF6C5D80FA552A3A479 /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = ""; }; + 01E2CDB0E2DB23B7E2FDD6F56D617292 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateHeader.h; path = MJRefresh/Custom/Header/MJRefreshStateHeader.h; sourceTree = ""; }; + 020B0D8611C73B031357E9E91365C77E /* OIMGroupMemberInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMGroupMemberInfo.m; path = OpenIMSDK/Model/OIMGroupMemberInfo.m; sourceTree = ""; }; + 02255245C8526288007AF001BD408955 /* WechatOpenSDK.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = WechatOpenSDK.xcframework; sourceTree = ""; }; + 02840ACD5872409C5A15AF32A909BEC0 /* Core+UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIView.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIView.swift"; sourceTree = ""; }; + 0296D5D6EFA25ABAAAA68D3CD8738A76 /* Archive+BackingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+BackingConfiguration.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+BackingConfiguration.swift"; sourceTree = ""; }; + 02A8A43AAF8C972D6B0CCEFB283A10B4 /* OIMCustomElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMCustomElem.h; path = OpenIMSDK/Model/OIMCustomElem.h; sourceTree = ""; }; + 02B1232ED02FD0082124D9CDF6969512 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; }; + 02D4D5D1D01BF0456AD4F21C830F01BD /* OIMSimpleRequstInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSimpleRequstInfo.h; path = OpenIMSDK/Model/OIMSimpleRequstInfo.h; sourceTree = ""; }; + 02E757561295961F2661E2AEDADB230A /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; + 034243C340888689E6CC333E4A5514C8 /* Disposables.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposables.swift; path = RxSwift/Disposables/Disposables.swift; sourceTree = ""; }; + 0371D4CC57FE2AD694BD3124D76F3700 /* YBIBToolViewHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBToolViewHandler.h; path = YBImageBrowser/ToolView/YBIBToolViewHandler.h; sourceTree = ""; }; + 03E3ADB34B67871F5272B69DD31BCF73 /* AMapLocationRegionObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationRegionObj.h; path = AMapLocationKit.framework/Headers/AMapLocationRegionObj.h; sourceTree = ""; }; + 03E67A6EC39FF472B83B7840AF78E292 /* IQKeyboardResignHandler+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardResignHandler+Internal.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardResignHandler+Internal.swift"; sourceTree = ""; }; + 03EEA40526D078ECA2261B80DFC83B93 /* SendMessageCallbackProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SendMessageCallbackProxy.m; path = OpenIMSDK/CallbackProxy/SendMessageCallbackProxy.m; sourceTree = ""; }; + 03FE134A3FD2889614B4CC40FFEF3581 /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; + 04165116172DB6943583A8C0448C2A3D /* MAHeatMapVectorOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorOverlay.h; path = MAMapKit.framework/Headers/MAHeatMapVectorOverlay.h; sourceTree = ""; }; + 041BE6B75085B8D8F3F94945290C1279 /* mapMany.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = mapMany.swift; path = Source/RxSwift/mapMany.swift; sourceTree = ""; }; + 042A695EB5A0C54C275F88586AB33EF3 /* Keyframes+timeRemapping.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Keyframes+timeRemapping.swift"; path = "Sources/Private/CoreAnimation/Extensions/Keyframes+timeRemapping.swift"; sourceTree = ""; }; + 04337BCEE81935BE4FA6875EA79376EC /* MarqueeLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MarqueeLabel-prefix.pch"; sourceTree = ""; }; + 046A2C352C7F998A7D82B6A41E402562 /* enc_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_mips32.c; path = src/dsp/enc_mips32.c; sourceTree = ""; }; + 0483E62BDF02CA0C3DE38D03FC2505C6 /* URL+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+ZIP.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/URL+ZIP.swift"; sourceTree = ""; }; + 04D5A1989D65FB214FF4699DF25DB42C /* Infallible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Infallible.swift; path = RxSwift/Traits/Infallible/Infallible.swift; sourceTree = ""; }; + 051F14A8C5F58F79DCE1D93262767C25 /* KingfisherWebP.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = KingfisherWebP.modulemap; sourceTree = ""; }; + 0531C9A5E841EDBCD66B6F621E48F634 /* NSString+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MJExtension.h"; path = "MJExtension/NSString+MJExtension.h"; sourceTree = ""; }; + 0547616BE46FF1E17F8F0D22C74EC2E2 /* DotLottieCacheProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieCacheProvider.swift; path = Sources/Public/DotLottie/Cache/DotLottieCacheProvider.swift; sourceTree = ""; }; + 055298DA034E8AA9E33D79D490271D2D /* upsampling_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_mips_dsp_r2.c; path = src/dsp/upsampling_mips_dsp_r2.c; sourceTree = ""; }; + 05546E827AAAE9F3BCFBD914821862CD /* ResourceBundle-Kingfisher-Kingfisher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Kingfisher-Kingfisher-Info.plist"; sourceTree = ""; }; + 05746202040C5E84F9997A84784DE29C /* DDFileLogger+Buffering.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DDFileLogger+Buffering.m"; path = "Sources/CocoaLumberjack/Extensions/DDFileLogger+Buffering.m"; sourceTree = ""; }; + 0592B4FDA541D739DA37618ECD3F548A /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; + 0592F073094483AED9C6687373CD3E98 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = ""; }; + 05B1B4DA4C8FF18FC71780D40B4D6E64 /* palette.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = palette.h; path = src/utils/palette.h; sourceTree = ""; }; + 05C843F98BE11FA841C4889FB5BE5773 /* MAOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlay.h; path = MAMapKit.framework/Headers/MAOverlay.h; sourceTree = ""; }; + 05E9CE5A83328C8F0A54F45B5A6C8051 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Sources/ConstraintItem.swift; sourceTree = ""; }; + 060CD185D2422C4062E0B14A26CF6596 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; + 061073267D9E7A4ABC1B4D3CA50443E7 /* Popover-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Popover-prefix.pch"; sourceTree = ""; }; + 06400FEC0E7815877B9FFAD947B38F12 /* AnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationLayer.swift; path = Sources/Private/CoreAnimation/Layers/AnimationLayer.swift; sourceTree = ""; }; + 06875FDB4D66D9C998AEF230FEF92724 /* VideoEditorCropView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorCropView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorCropView.swift; sourceTree = ""; }; + 06C8D5A6462C9B25ACD0B162347F8166 /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/Features/AlamofireExtended.swift; sourceTree = ""; }; + 06C8EC9CBE5189937E85D41906662CC4 /* LayerFontProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerFontProvider.swift; path = Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift; sourceTree = ""; }; 06E5B413FEA5A600D76636DA132F8FB9 /* IQTextInputViewNotification */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQTextInputViewNotification; path = IQTextInputViewNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 06EE3D85DB7CA93CAA94FA29AE45BFDF /* Observable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Observable.swift; path = RxSwift/Observable.swift; sourceTree = ""; }; - 0702635284B749BA9176AECEF97B1171 /* MAMapKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapKit.h; path = MAMapKit.framework/Headers/MAMapKit.h; sourceTree = ""; }; - 07082B8A4C4290E5D4C81099E14B1045 /* NSSlider+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSSlider+Rx.swift"; path = "RxCocoa/macOS/NSSlider+Rx.swift"; sourceTree = ""; }; - 0719BA04D2F1F80681741FC01F6CCDDC /* IQTextView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextView.release.xcconfig; sourceTree = ""; }; - 0728A2587FDDC0AF78C982A4DC85EF61 /* MJExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.release.xcconfig; sourceTree = ""; }; - 075CAD90D4B9F0A4CD5758A057138771 /* EditorConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/EditorConfiguration.swift; sourceTree = ""; }; - 0778C2229489CA4092CFD36A8B0FEBC4 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; - 078588641DE48A9F8B942FE651C967F5 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = ""; }; - 0788BAC406F45A6FC2BF3C22638DAB6C /* SynchronizedOnType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedOnType.swift; path = RxSwift/Concurrency/SynchronizedOnType.swift; sourceTree = ""; }; - 0791E218AD38A3E5DB7DCC82469F2282 /* Popover.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Popover.debug.xcconfig; sourceTree = ""; }; - 08050C89BDBFDA62A3F6EF30F6743FD6 /* RxPickerViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift; sourceTree = ""; }; - 080BA283B9623B19CAC631DFF76437E6 /* IQTextInputViewNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQTextInputViewNotification-dummy.m"; sourceTree = ""; }; - 081D3FFF22883789F72BD87362697E6E /* picture_psnr_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_psnr_enc.c; path = src/enc/picture_psnr_enc.c; sourceTree = ""; }; - 0846B8700232494BFCEC5F1561A0AD7C /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; + 06E85A137AD401FDF67AF3F231FCBFD3 /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; + 06ED629B369D759C9255F2C1BD20473B /* EditorStickerItemView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerItemView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerItemView.swift; sourceTree = ""; }; + 06F77A9C4687FD3D84DFF005E7862759 /* OIMQuoteElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMQuoteElem.h; path = OpenIMSDK/Model/OIMQuoteElem.h; sourceTree = ""; }; + 07063D265D80CED41E96A7C82AE2DDDE /* SGPermissionPhoto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGPermissionPhoto.m; path = SGQRCode/Permission/SGPermissionPhoto.m; sourceTree = ""; }; + 071040A220C8B1B13643EADE3387CE25 /* Observable+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Bind.swift"; path = "RxCocoa/Common/Observable+Bind.swift"; sourceTree = ""; }; + 072418454C445A6F822370D323C70103 /* MAPointAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPointAnnotation.h; path = MAMapKit.framework/Headers/MAPointAnnotation.h; sourceTree = ""; }; + 0736A9464846A7FFD4CD0741B9E475AD /* YBIBInteractionProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBInteractionProfile.m; path = YBImageBrowser/Image/YBIBInteractionProfile.m; sourceTree = ""; }; + 073E1802D9E834D19ABCCBDA089E92AB /* LottieAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationLayer.swift; path = Sources/Public/Animation/LottieAnimationLayer.swift; sourceTree = ""; }; + 075882F6287E92089A2D5E849864B5EF /* _RXKVOObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXKVOObserver.m; path = RxCocoa/Runtime/_RXKVOObserver.m; sourceTree = ""; }; + 076D230EE2230FCE5631F7FF4CE38942 /* Zones.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zones.swift; path = Sources/SwiftDate/Supports/Zones.swift; sourceTree = ""; }; + 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 0796F5670CD11B847772FE42520CD128 /* Infallible+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Debug.swift"; path = "RxSwift/Traits/Infallible/Infallible+Debug.swift"; sourceTree = ""; }; + 07AEA36BD7A79BEA1F5BD73E718BEE2E /* UIImageView+HighlightedWebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+HighlightedWebCache.h"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.h"; sourceTree = ""; }; + 07D0C4E9495B63B74FEB580EE16DBEC2 /* lossless_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_sse2.c; path = src/dsp/lossless_sse2.c; sourceTree = ""; }; + 08261D3B2E86FA4702201DA370E21959 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; + 082BB2C211CC761AE7176E1C91AA3E68 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; 085DBCE7DD98588B2ED103B1C1F36026 /* Alamofire-Alamofire */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "Alamofire-Alamofire"; path = Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 086F64A3B9E25E5506DF53C6A7398B30 /* MJRefresh.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.release.xcconfig; sourceTree = ""; }; - 087EB3E92C3CE9AEF4989DC32217260E /* quant_levels_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant_levels_utils.h; path = src/utils/quant_levels_utils.h; sourceTree = ""; }; - 088A84604336D5130B62B245D8D225F0 /* sharpyuv_gamma.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_gamma.c; path = sharpyuv/sharpyuv_gamma.c; sourceTree = ""; }; - 08B73798103120C7A3AF0D936520F1C0 /* UIBarButtonItem+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIBarButtonItem+Rx.swift"; path = "RxCocoa/iOS/UIBarButtonItem+Rx.swift"; sourceTree = ""; }; - 08E79F539A51EF5624368459D580FDA3 /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = ""; }; - 092167ED1CC47E4B4914B165AB241CA3 /* sharpyuv_csp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv_csp.h; path = sharpyuv/sharpyuv_csp.h; sourceTree = ""; }; - 094C71050294A146BB656949DAC3B8D6 /* SkipUntil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipUntil.swift; path = RxSwift/Observables/SkipUntil.swift; sourceTree = ""; }; - 09772666C0AEFD8BB25B0463F2F3934F /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalHeader.h; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.h; sourceTree = ""; }; - 09A47D8BBE8F670AEE1597E694E9299C /* animi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = animi.h; path = src/mux/animi.h; sourceTree = ""; }; - 09BF0462A5A73BDAD46E8893D422BE0F /* pausableBuffered.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = pausableBuffered.swift; path = Source/RxSwift/pausableBuffered.swift; sourceTree = ""; }; - 09C9FFCB4BFE694DCB6775DB83FA38FE /* DidDisplayProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DidDisplayProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidDisplayProviding.swift; sourceTree = ""; }; - 09E8A3E05EC079477747443AD301E860 /* Rectangle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rectangle.swift; path = Sources/Private/Model/ShapeItems/Rectangle.swift; sourceTree = ""; }; - 0A010C711309127F26077A97DB9D8DE1 /* CALayer+fillBounds.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+fillBounds.swift"; path = "Sources/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift"; sourceTree = ""; }; - 0A05F415EE7D3DB8D18478027CDCF3F2 /* MAOfflineItemCommonCity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemCommonCity.h; path = MAMapKit.framework/Headers/MAOfflineItemCommonCity.h; sourceTree = ""; }; - 0A6039DC25796F9AE9A8B94A69984B37 /* GradientFill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientFill.swift; path = Sources/Private/Model/ShapeItems/GradientFill.swift; sourceTree = ""; }; - 0A728065D0A8D6804B2901F182770F32 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+IQKeyboardManagerExtensionObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtensionObjc.swift"; sourceTree = ""; }; - 0A758E01A5342DD85FC47B3EE4BABF79 /* RetryStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryStrategy.swift; path = Sources/Networking/RetryStrategy.swift; sourceTree = ""; }; - 0A86E5B1317FA3F4A9D3EC10B4842235 /* UISegmentedControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISegmentedControl+Rx.swift"; path = "RxCocoa/iOS/UISegmentedControl+Rx.swift"; sourceTree = ""; }; - 0A8CCBE60DB666E1F9638503CEF4375A /* IQKeyboardReturnManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardReturnManager-Info.plist"; sourceTree = ""; }; + 08750421AE2FCC141D4D1F8E3C6C6789 /* MqttCocoaAsyncSocket-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MqttCocoaAsyncSocket-umbrella.h"; sourceTree = ""; }; + 087AC616BCEA82E356A02B7EFD0EF5EF /* TransformType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformType.swift; path = Sources/TransformType.swift; sourceTree = ""; }; + 088F69851DD20A7E2B4360E4B044A7EF /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/RxCocoa/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 08BF7E05FE4526682EBDA0F71476A16D /* SizeValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SizeValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift; sourceTree = ""; }; + 08DE826BB58AC8456D39338C267DB337 /* MqttCocoaAsyncSocket */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MqttCocoaAsyncSocket; path = MqttCocoaAsyncSocket.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0905AA9AF1C83106FBB5946C32226A04 /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; + 090A0F0AF4335239DE003FB4A5980412 /* AMap3DMap.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMap3DMap.debug.xcconfig; sourceTree = ""; }; + 0942915E855CACF30C7A5843464A23D4 /* PhotoTools+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoTools+File.swift"; path = "Sources/HXPHPicker/Core/Util/PhotoTools+File.swift"; sourceTree = ""; }; + 094C068E414026C8CB65CAC50AAE5C84 /* Single.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Single.swift; path = RxSwift/Traits/PrimitiveSequence/Single.swift; sourceTree = ""; }; + 0951F87C6DE10E5CFAB72203270704EB /* alpha_processing_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_mips_dsp_r2.c; path = src/dsp/alpha_processing_mips_dsp_r2.c; sourceTree = ""; }; + 0972D3FDA84177E303FB5119120A366C /* YBImageBrowser.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = YBImageBrowser.modulemap; sourceTree = ""; }; + 0975E1214B64C5AE57633B4489CBE5F2 /* DDAbstractDatabaseLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAbstractDatabaseLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDAbstractDatabaseLogger.h; sourceTree = ""; }; + 0992FBF15192FDE359109D457FACCB68 /* UIViewPropertyAnimator+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewPropertyAnimator+Rx.swift"; path = "Source/RxCocoa/UIViewPropertyAnimator+Rx.swift"; sourceTree = ""; }; + 09AB62F03517BF3D5AE88B4968C6DF90 /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = SDWebImage/Private/SDAssociatedObject.m; sourceTree = ""; }; + 09D14340A7DE0DC69768143F4781EF5A /* CocoaLumberjack-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CocoaLumberjack-Info.plist"; sourceTree = ""; }; + 0A34DFF17E01BF9AA5F87F3E3FADCC7B /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardToolbar/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 0A53ED458B025D58C4FD11EC93FFAAA2 /* types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = types.h; path = src/webp/types.h; sourceTree = ""; }; + 0A6B3A99BDAED7755D8CFCE9C0F42B18 /* YBIBImageLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageLayout.m; path = YBImageBrowser/Image/YBIBImageLayout.m; sourceTree = ""; }; + 0A8697B4ED19909AFD6C7558CEE8615F /* YYSpriteSheetImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYSpriteSheetImage.h; path = YYImage/YYSpriteSheetImage.h; sourceTree = ""; }; + 0A8E8C8881849C416468CDD1543F786A /* DDFileLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDFileLogger.m; path = Sources/CocoaLumberjack/DDFileLogger.m; sourceTree = ""; }; + 0A9E8211F029EBA42EEEE2CC2901AFBC /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = ""; }; + 0AA02FA0E65676F5516119114719BAB8 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; + 0AA728D87B7F91C945463B669D4EAE5C /* OIMMergeElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMMergeElem.m; path = OpenIMSDK/Model/OIMMergeElem.m; sourceTree = ""; }; + 0AC56FB29A4BDFF4CF1349AF6A43D9F9 /* Vector1DEffectValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Vector1DEffectValue.swift; path = Sources/Private/Model/LayerEffects/EffectValues/Vector1DEffectValue.swift; sourceTree = ""; }; + 0ACE6098C6600F130B1FBE95DA09FCB5 /* IQKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardNotification.swift; path = IQKeyboardNotification/Classes/IQKeyboardNotification.swift; sourceTree = ""; }; + 0AD55A47F1AAA88609AC883AD677F608 /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; + 0AD6F8BAAAFF98186138E4A6113D787B /* ColorEffectValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorEffectValue.swift; path = Sources/Private/Model/LayerEffects/EffectValues/ColorEffectValue.swift; sourceTree = ""; }; + 0AF5A4FEF1EBB57D68D4832ED9C4B8C2 /* ContentConfigurableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContentConfigurableView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/ContentConfigurableView.swift; sourceTree = ""; }; 0B06FE4EB869890001614655A886414E /* RxRelay-RxRelay_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "RxRelay-RxRelay_Privacy"; path = RxRelay_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 0B237C461DD75E2FE67F4D105C480806 /* VideoPlayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoPlayerView.swift; path = Sources/HXPHPicker/Core/View/VideoPlayerView.swift; sourceTree = ""; }; - 0B439671E325FDC797835D3E0BFF022C /* MALineDrawType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MALineDrawType.h; path = MAMapKit.framework/Headers/MALineDrawType.h; sourceTree = ""; }; - 0B4B93F368A61449309541689291E7CE /* UITabBarController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITabBarController+Rx.swift"; path = "RxCocoa/iOS/UITabBarController+Rx.swift"; sourceTree = ""; }; - 0B622AEF7B6E9C360D0C962D5A346AF5 /* Core+Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+Data.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+Data.swift"; sourceTree = ""; }; - 0B6E92282095998AE496E1CD388E290E /* lottie-ios-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "lottie-ios-Info.plist"; sourceTree = ""; }; - 0BA20785663BFF2D9EB5DA399BF39DB2 /* ShapeNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift; sourceTree = ""; }; - 0BB2D04A41EC4109E190F3E4A1309236 /* _RXObjCRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXObjCRuntime.h; path = RxCocoa/Runtime/include/_RXObjCRuntime.h; sourceTree = ""; }; - 0BBC5AF8C3A9691541305496A8731034 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = ""; }; - 0C32AEB37F418F32DD29DCF4F8431825 /* filters_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filters_utils.h; path = src/utils/filters_utils.h; sourceTree = ""; }; - 0C4A299CFB1CC50C15D414460381F776 /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; - 0C4A9542376C040D061E6FE28C2DB9B7 /* KeyframeData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyframeData.swift; path = Sources/Private/Model/Keyframes/KeyframeData.swift; sourceTree = ""; }; + 0B1594EBD0E078355AAC2E6368B21BDC /* Core+Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+Data.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+Data.swift"; sourceTree = ""; }; + 0B3260A1DE9EA63DA5199E6744363682 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; + 0B419226841037EB005DD3984345CE25 /* LockOwnerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LockOwnerType.swift; path = RxSwift/Concurrency/LockOwnerType.swift; sourceTree = ""; }; + 0BDCDDE834F17A8AC6D94875DF09C0F2 /* PhotoPreviewViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPreviewViewCell.swift; sourceTree = ""; }; + 0C1C877790940F9BEC52E105E2345F63 /* StringExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringExtensions.swift; path = Sources/Private/Utility/Extensions/StringExtensions.swift; sourceTree = ""; }; + 0C2E42CF6F1C4002FCCDFCE682179B50 /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; }; + 0C6A878365FAE3831D101B7448192821 /* EpoxyModelArrayBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyModelArrayBuilder.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelArrayBuilder.swift; sourceTree = ""; }; 0C6F4829D47D1826F47CDC4264F9F6A8 /* YYImage */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = YYImage; path = YYImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0CC8DF74CE848DD89C1543B98FF1568C /* NetworkLoggerPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkLoggerPlugin.swift; path = Sources/Moya/Plugins/NetworkLoggerPlugin.swift; sourceTree = ""; }; - 0CD26ACB38019F95EF4C9767072D150E /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Data+Serialization.swift"; sourceTree = ""; }; - 0CD8F90D2331966421E416907B75E2FB /* ShareReplayScope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareReplayScope.swift; path = RxSwift/Observables/ShareReplayScope.swift; sourceTree = ""; }; - 0CE84950E22DD459CF2C5DB2783BAFFB /* GradientStroke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientStroke.swift; path = Sources/Private/Model/ShapeItems/GradientStroke.swift; sourceTree = ""; }; - 0D09975AEB1A1FB56CECF90D58E0A2D9 /* AMapCommonObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapCommonObj.h; path = AMapSearchKit.framework/Headers/AMapCommonObj.h; sourceTree = ""; }; - 0D09C384F5AC385694E5E067051A5F38 /* YBImageBrowser.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = YBImageBrowser.modulemap; sourceTree = ""; }; - 0D117580563C690B3B6D37BB9C3A3CEE /* TailRecursiveSink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TailRecursiveSink.swift; path = RxSwift/Observers/TailRecursiveSink.swift; sourceTree = ""; }; - 0D22A34E6D8A78B03A3878CC8F4A141A /* webp_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = webp_dec.c; path = src/dec/webp_dec.c; sourceTree = ""; }; - 0D3E95B767FD6876A4F79F0E3E0A61F4 /* Merge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Merge.swift; path = Sources/Private/Model/ShapeItems/Merge.swift; sourceTree = ""; }; - 0D6CE6CF210C12D6787846819CB8D3B1 /* TransformOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformOperators.swift; path = Sources/TransformOperators.swift; sourceTree = ""; }; - 0D70F2602168F1347FB7D9F6E7603D10 /* CloseButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CloseButton.swift; path = TagListView/CloseButton.swift; sourceTree = ""; }; - 0D7269015D795415C30E6E7FDA887D10 /* ZXSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXSDK.release.xcconfig; sourceTree = ""; }; - 0D84E9F9F6E555A1543E50A0B611DEE8 /* ignoreWhen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ignoreWhen.swift; path = Source/RxSwift/ignoreWhen.swift; sourceTree = ""; }; - 0DA807B3AA45AE66EB8FD6744357C386 /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; - 0DAE16684B183BA733C62C1A5D862E6B /* URLMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLMatcher.swift; path = Sources/URLMatcher/URLMatcher.swift; sourceTree = ""; }; - 0DAE279F4B34773AA505A877C76A03B1 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = ""; }; - 0DBD93D288BF1971680AC0CBFA87CEC7 /* CocoaLumberjack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaLumberjack.swift; path = Sources/CocoaLumberjackSwift/CocoaLumberjack.swift; sourceTree = ""; }; - 0DC1922990EE3C6470B7E270DD74209C /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = ""; }; - 0DC7E49D8AEF596CCFD395189A1C41EC /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/Features/RetryPolicy.swift; sourceTree = ""; }; - 0DD5014CBC7EBE462FEFF1A0895E2A0D /* OIMSearchResultInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSearchResultInfo.h; path = OpenIMSDK/Model/OIMSearchResultInfo.h; sourceTree = ""; }; - 0DDF4C5CB57A76EED48FAB3C5DE0F648 /* AlbumTitleView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumTitleView.swift; path = Sources/HXPHPicker/Picker/View/AlbumTitleView.swift; sourceTree = ""; }; - 0DE933906B9742E508D8D788A1D9460B /* format_constants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = format_constants.h; path = src/webp/format_constants.h; sourceTree = ""; }; - 0DE992B84532B2F0319D59578C0E1B8A /* Int+DateComponents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Int+DateComponents.swift"; path = "Sources/SwiftDate/Foundation+Extras/Int+DateComponents.swift"; sourceTree = ""; }; - 0DED4BA3B9B036CB4B02EB1ED05A82DB /* MBProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MBProgressHUD-Info.plist"; sourceTree = ""; }; + 0C72CD0DD87596086C9AF0B56109C312 /* MAConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAConfig.h; path = MAMapKit.framework/Headers/MAConfig.h; sourceTree = ""; }; + 0CCFB049C63FB80FE0F10ECBC2C8765F /* IQKeyboardReturnManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardReturnManager.modulemap; sourceTree = ""; }; + 0D35826F34C3A15406C7BCA0C286C17A /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; + 0D40A187A4C62181827B7D1C0CFFEFFD /* alpha_processing_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_sse41.c; path = src/dsp/alpha_processing_sse41.c; sourceTree = ""; }; + 0D43EFC784C9CB0EEC823043042F4F3E /* mux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mux.h; path = src/webp/mux.h; sourceTree = ""; }; + 0DB886261132DFF1F39AFB7A34AE0692 /* EditorStickerTextViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerTextViewController.swift; path = Sources/HXPHPicker/Editor/Controller/EditorStickerTextViewController.swift; sourceTree = ""; }; + 0DBBD891BF6C368D4AE331AD41909336 /* ControlProperty+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlProperty+Driver.swift"; path = "RxCocoa/Traits/Driver/ControlProperty+Driver.swift"; sourceTree = ""; }; + 0DD2DE37E0D18D7C606ECD29F45A940A /* TagListView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TagListView.modulemap; sourceTree = ""; }; + 0DE1E8395E47D386B6490E17E8F67252 /* ImmutableMappable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImmutableMappable.swift; path = Sources/ImmutableMappable.swift; sourceTree = ""; }; + 0DE460D658E702CA2B530B22A735CDEE /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = ""; }; + 0DE5DF902C1E8080C92964EA0B0C8D6E /* Vectors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Vectors.swift; path = Sources/Public/Primitives/Vectors.swift; sourceTree = ""; }; 0DFD4541FF9DAA31A2FC2A7F6D03ED22 /* IQTextView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQTextView; path = IQTextView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 0E058257A7D0F02E7FB8985089EEC6E1 /* SDCycleScrollView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDCycleScrollView-umbrella.h"; sourceTree = ""; }; - 0E299BEB764B9A1DEC98EA66D620ACA5 /* _RXDelegateProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXDelegateProxy.m; path = RxCocoa/Runtime/_RXDelegateProxy.m; sourceTree = ""; }; - 0E4B32FB0EC76B01B592CD1A61C85164 /* MAOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlayRenderer.h; path = MAMapKit.framework/Headers/MAOverlayRenderer.h; sourceTree = ""; }; - 0E4CE93B7DDACE16DD10B30BDEF700E4 /* MATraceLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATraceLocation.h; path = MAMapKit.framework/Headers/MATraceLocation.h; sourceTree = ""; }; - 0E521769293502BCC89258E2797104EC /* Defaults+Observing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+Observing.swift"; path = "Sources/Defaults+Observing.swift"; sourceTree = ""; }; - 0E8F9DC1785CD80E71ADCCAC6918470F /* EpoxyableView+SwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EpoxyableView+SwiftUIView.swift"; path = "Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxyableView+SwiftUIView.swift"; sourceTree = ""; }; - 0E9018049D3891D6B8326E4C1A96B726 /* iterator_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = iterator_enc.c; path = src/enc/iterator_enc.c; sourceTree = ""; }; - 0ED0D149F401AB63D52DF294E59B0FC1 /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJKeyValue.m"; path = "MJExtension/NSObject+MJKeyValue.m"; sourceTree = ""; }; - 0EDF22B2F7710B68BEF42DBD7960FFD2 /* Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concurrency.swift; path = Source/Features/Concurrency.swift; sourceTree = ""; }; - 0EFE005BE578C2D2E402895822FD412B /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = ""; }; - 0F0B7C25AA2F40A4E6FFD122B936E9B5 /* SGQRCode-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SGQRCode-dummy.m"; sourceTree = ""; }; - 0F326E73494C37B436B25DC1DD104CFE /* URLNavigator.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = URLNavigator.release.xcconfig; sourceTree = ""; }; - 0F5B82BDBCAA41F24AD4A6F7D6617A30 /* ObjectMapper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ObjectMapper.debug.xcconfig; sourceTree = ""; }; - 0F8918760B6BA08970F8004ED7AA6FE4 /* PhotoManager+Audio.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoManager+Audio.swift"; path = "Sources/HXPHPicker/Core/Util/PhotoManager+Audio.swift"; sourceTree = ""; }; - 0FA7A535E34304FEB795FCB634375C02 /* AssetManager+Asset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+Asset.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+Asset.swift"; sourceTree = ""; }; - 0FA833C33B5AC6E4CEC49F9D1321C982 /* YBIBToolViewHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBToolViewHandler.m; path = YBImageBrowser/ToolView/YBIBToolViewHandler.m; sourceTree = ""; }; - 0FAF4A2F2B4B2435A7BB4895AF2145CD /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; - 0FCB1FD240155B644AD7582F70744DC4 /* NullCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NullCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/NullCompositionLayer.swift; sourceTree = ""; }; - 0FD8E3AD2D74BE680D34541310F348A2 /* NSView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSView+Rx.swift"; path = "RxCocoa/macOS/NSView+Rx.swift"; sourceTree = ""; }; - 0FDFCFAED54B1A668030FBB5DAA027B8 /* UIView+Responders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Responders.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/UIView+Responders.swift"; sourceTree = ""; }; - 0FEC85C5E00BEEAFA0B609E7B5609E94 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = ""; }; - 100BB5555346B3CAD8AB3EEC096C649E /* MoyaProvider+Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MoyaProvider+Defaults.swift"; path = "Sources/Moya/MoyaProvider+Defaults.swift"; sourceTree = ""; }; - 10714B805F30205FBFC798B49F7ED8AA /* SwiftDate-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftDate-dummy.m"; sourceTree = ""; }; - 1089D62CEB1502272B582AC17278077E /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/Extensions/StringEncoding+Alamofire.swift"; sourceTree = ""; }; - 1098D704D51AA0E2DEDC327834F7740C /* AlipaySDK-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AlipaySDK-iOS.debug.xcconfig"; sourceTree = ""; }; - 109ACDAA5C60690C3C29F4D995BFF459 /* lossless_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_msa.c; path = src/dsp/lossless_msa.c; sourceTree = ""; }; - 10B1ACF2AADB5AD04163F4674BFE07A0 /* SwiftyUserDefaults.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyUserDefaults.release.xcconfig; sourceTree = ""; }; - 10BDD4803F2D3B0D30C89BAB4D03D216 /* DotLottieManifest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieManifest.swift; path = Sources/Private/Model/DotLottie/DotLottieManifest.swift; sourceTree = ""; }; - 10EE3A5EAF25A1133FE1366F3E35BD6F /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; - 1106559DE680E75DE166E285D84655EC /* EditorImageResizerMaskView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorImageResizerMaskView.swift; path = Sources/HXPHPicker/Editor/View/Photo/EditorImageResizerMaskView.swift; sourceTree = ""; }; + 0E006EB6628D9D7013460BEDD4583E8D /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; + 0E1989088B503751B4F0FDA7441A4656 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 0E27C6104885875C65D924ABDA4E3D40 /* YYFrameImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYFrameImage.h; path = YYImage/YYFrameImage.h; sourceTree = ""; }; + 0E3E10F0E4E1EEB483B960CB8AB44788 /* GIFAnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GIFAnimatedImage.swift; path = Sources/Image/GIFAnimatedImage.swift; sourceTree = ""; }; + 0E3F8640A2B68814B6E3049FE1466EB3 /* MoyaProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoyaProvider.swift; path = Sources/Moya/MoyaProvider.swift; sourceTree = ""; }; + 0E4A78CC3124C5516228374A8AB619AB /* lottie-ios-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "lottie-ios-dummy.m"; sourceTree = ""; }; + 0E68A3533F3C2D4D73D3AA397B395563 /* pausableBuffered.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = pausableBuffered.swift; path = Source/RxSwift/pausableBuffered.swift; sourceTree = ""; }; + 0EA38E1760C227E8492F6B7419EBD670 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; + 0EB177B7132DB39C91B6B2D930AA7F6B /* LivePhotoError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LivePhotoError.swift; path = Sources/HXPHPicker/Core/Model/LivePhotoError.swift; sourceTree = ""; }; + 0ED077EB75CE413B9DB3BDD2E67A5D33 /* quant_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_enc.c; path = src/enc/quant_enc.c; sourceTree = ""; }; + 0EE24F78A7AEEC8FF75CCB9FA0A47036 /* YBIBScreenRotationHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBScreenRotationHandler.m; path = YBImageBrowser/Base/YBIBScreenRotationHandler.m; sourceTree = ""; }; + 0EE8AEF48758E3AF539B73FD6DD3891E /* CPListItem+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CPListItem+Kingfisher.swift"; path = "Sources/Extensions/CPListItem+Kingfisher.swift"; sourceTree = ""; }; + 0F1E4C287F43603EC155ECECFDC59225 /* MJRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJRefresh.modulemap; sourceTree = ""; }; + 0F9F954A9051F47DF3AA5D6404469F27 /* OIMUserInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMUserInfo.h; path = OpenIMSDK/Model/OIMUserInfo.h; sourceTree = ""; }; + 0FAC0E0BC6370F8AC09DFB8E21DCDFCC /* Completable+AndThen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Completable+AndThen.swift"; path = "RxSwift/Traits/PrimitiveSequence/Completable+AndThen.swift"; sourceTree = ""; }; + 0FAE7BDC15B4ECF9C5F5FD05C6AFD281 /* sharpyuv_gamma.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv_gamma.h; path = sharpyuv/sharpyuv_gamma.h; sourceTree = ""; }; + 0FC1EE43154306096568FB039E407BD3 /* NotAuthorizedConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotAuthorizedConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/NotAuthorizedConfiguration.swift; sourceTree = ""; }; + 1005FE0354AFFB68DC5891504FCA9BCC /* palette.c */ = {isa = PBXFileReference; includeInIndex = 1; name = palette.c; path = src/utils/palette.c; sourceTree = ""; }; + 1015C6C8D14DA8683A3381003A7C1EB0 /* Picker+PhotoTools.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+PhotoTools.swift"; path = "Sources/HXPHPicker/Picker/Util/Picker+PhotoTools.swift"; sourceTree = ""; }; + 102CF3B2B65C514D576D47BFFCF62BC0 /* lottie-ios.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "lottie-ios.modulemap"; sourceTree = ""; }; + 103B0BA9D30353B2A3AE6A3E4D345958 /* picture_tools_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_tools_enc.c; path = src/enc/picture_tools_enc.c; sourceTree = ""; }; + 103BCD5D91A86629DA7A02BC546D632F /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; + 104AB2BBDAA118AB5B3EC43FCFB764A9 /* PickerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PickerConfiguration.swift; sourceTree = ""; }; + 1059A598BA4F9CA60155BA8373D9F178 /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherOptionsInfo.swift; path = Sources/General/KingfisherOptionsInfo.swift; sourceTree = ""; }; + 106AF6327F7C20B1A3C440871893FEF9 /* DDMultiFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMultiFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDMultiFormatter.m; sourceTree = ""; }; + 10BD7C6E2B9C3F8213C2009EA980608B /* Kingfisher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-prefix.pch"; sourceTree = ""; }; + 10E286D9023E96E911902F5ADE064F52 /* MemoryStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MemoryStorage.swift; path = Sources/Cache/MemoryStorage.swift; sourceTree = ""; }; + 10ECE5FD969EBBA30C2ED7DA1AC66C7C /* anim_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; name = anim_encode.c; path = src/mux/anim_encode.c; sourceTree = ""; }; + 110065EE86084581A6832FFCF7A27380 /* GroupedObservable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupedObservable.swift; path = RxSwift/GroupedObservable.swift; sourceTree = ""; }; + 110A4E7BE4EB9B92AD398EF75E3DF5AE /* MqttDecodePubRec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttDecodePubRec.swift; path = Source/MqttDecodePubRec.swift; sourceTree = ""; }; 110BD425B6CAD6801539E2C6AB6E0662 /* IQKeyboardReturnManager-IQKeyboardReturnManager */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardReturnManager-IQKeyboardReturnManager"; path = IQKeyboardReturnManager.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 111E59CE836AAFABF981BB302BED14EC /* View+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASAdditions.h"; path = "Masonry/View+MASAdditions.h"; sourceTree = ""; }; - 112275B5F2DA020D1F5AAA0ADA2963C4 /* TAAnimatedDotView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TAAnimatedDotView.h; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAAnimatedDotView.h; sourceTree = ""; }; - 113A6CE4C212D09BCD02D88EBC5EACC6 /* Core+String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+String.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+String.swift"; sourceTree = ""; }; - 11557BC158C05BFB9E2F996F3EEF9C99 /* VisibilityAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VisibilityAnimation.swift; path = Sources/Private/CoreAnimation/Animations/VisibilityAnimation.swift; sourceTree = ""; }; - 11BF0F782E6A624EBD13466CED287C49 /* AssetManager+AVAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+AVAsset.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+AVAsset.swift"; sourceTree = ""; }; - 11E4FA4C2B1EA9C47652450BD97F5DAC /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; }; - 120ADFE75C0204A5F6266DF89EC4FAF2 /* VideoEditorPlayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorPlayerView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorPlayerView.swift; sourceTree = ""; }; + 11335B714622306F91A1F2FB8E0B3186 /* DataIDProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataIDProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DataIDProviding.swift; sourceTree = ""; }; + 1159483893C79D787E89D45D687672E6 /* CodableTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CodableTransform.swift; path = Sources/CodableTransform.swift; sourceTree = ""; }; + 1196353082FE78E3F0236610EBD8703E /* OpacityAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OpacityAnimation.swift; path = Sources/Private/CoreAnimation/Animations/OpacityAnimation.swift; sourceTree = ""; }; + 11A04BE5CE43A7F729E96EA4E6256922 /* IntegerType+IdentifiableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IntegerType+IdentifiableType.swift"; path = "Sources/RxDataSources/IntegerType+IdentifiableType.swift"; sourceTree = ""; }; + 11B4D2B58D8EC3CA214F9D4A0F71A59C /* Merge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Merge.swift; path = Sources/Private/Model/ShapeItems/Merge.swift; sourceTree = ""; }; + 11BA9E364F4512BB8B20BE4DE4BD9140 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/RxSwift/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 11C1ACD4FF2DDE99653570E86A791A22 /* NSSlider+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSSlider+Rx.swift"; path = "RxCocoa/macOS/NSSlider+Rx.swift"; sourceTree = ""; }; + 12043476FB1F109D8DD030BF0DAF525F /* Popover-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Popover-umbrella.h"; sourceTree = ""; }; + 12044D27E9FC771C5C3AF8F57F2D37C1 /* AMapLocationKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapLocationKit.framework; sourceTree = ""; }; 120BD4C670EF00F4D5A40AA4B863A7AE /* IQKeyboardNotification-IQKeyboardNotification */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardNotification-IQKeyboardNotification"; path = IQKeyboardNotification.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 1227C89CE60E2237AF4BD0EB74800DFD /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = ""; }; - 123A973422EBF191D93A314597DB7594 /* AMapSearchError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchError.h; path = AMapSearchKit.framework/Headers/AMapSearchError.h; sourceTree = ""; }; - 1294CE8A5F4523CADF3F15AD30A2FC36 /* PhotoListCellConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoListCellConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PhotoListCellConfiguration.swift; sourceTree = ""; }; - 1296678825E509F2A6EBEA9A83A60147 /* PhotosUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PhotosUI.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/PhotosUI.framework; sourceTree = DEVELOPER_DIR; }; - 12A7038866A941BC4F3263821D30DE6D /* Date+Math.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Math.swift"; path = "Sources/SwiftDate/Date/Date+Math.swift"; sourceTree = ""; }; - 12AC14DB654B07B92FC565359BB24729 /* SwiftUIMeasurementContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftUIMeasurementContainer.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/LayoutUtilities/SwiftUIMeasurementContainer.swift; sourceTree = ""; }; - 12E98132350361407F1F060CAF282D79 /* PhotoPickerBaseViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerBaseViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPickerBaseViewCell.swift; sourceTree = ""; }; - 12EE9646A1EE8B5F4F5EABA208A9045D /* DDOSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDOSLogger.m; path = Sources/CocoaLumberjack/DDOSLogger.m; sourceTree = ""; }; - 130BE4B7F904DF2C8DB08317F844B561 /* UI+SectionedViewType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UI+SectionedViewType.swift"; path = "Sources/RxDataSources/UI+SectionedViewType.swift"; sourceTree = ""; }; - 13248AF2B1E920AB3B30184BB73FE587 /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQTextView/Classes/IQTextView.swift; sourceTree = ""; }; - 137B6C5117E166291507375196C29E1B /* SDCycleScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDCycleScrollView.h; path = SDCycleScrollView/Lib/SDCycleScrollView/SDCycleScrollView.h; sourceTree = ""; }; - 1390CC8E3CD88975425399A7BD6E60F3 /* RxSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.debug.xcconfig; sourceTree = ""; }; - 13B22DBEA0599B8AB9BBE81DB9E9144F /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/Core/AFError.swift; sourceTree = ""; }; - 13C32C8D313CE54C938117F79FB42909 /* PhotoPickerBottomView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerBottomView.swift; path = Sources/HXPHPicker/Picker/View/PhotoPickerBottomView.swift; sourceTree = ""; }; - 13CFBAC771749F005DCDC9210BE8D854 /* UploadFileCallbackProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UploadFileCallbackProxy.m; path = OpenIMSDK/CallbackProxy/UploadFileCallbackProxy.m; sourceTree = ""; }; - 13E5190A07461E9AA35ECDE444AE8025 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/CocoaLumberjack/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 1413AD37773953D3ABCC8A24322AAB02 /* IQKeyboardToolbarManager+Action.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Action.swift"; path = "IQKeyboardToolbarManager/Classes/Toolbar/IQKeyboardToolbarManager+Action.swift"; sourceTree = ""; }; - 142413141212B735369078BF6388CA5A /* TableViewSectionedDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableViewSectionedDataSource.swift; path = Sources/RxDataSources/TableViewSectionedDataSource.swift; sourceTree = ""; }; - 146CAAD47B8060678F231FC28E0A3B60 /* RoundedCornersNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RoundedCornersNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/ModifierNodes/RoundedCornersNode.swift; sourceTree = ""; }; - 14BE66CC68FFD2AC6BD608924474D629 /* MAAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotation.h; path = MAMapKit.framework/Headers/MAAnnotation.h; sourceTree = ""; }; - 14ECA25FAC580BEAD24A7591921B4905 /* IQKeyboardNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardNotification-umbrella.h"; sourceTree = ""; }; - 155E20CA6BEFC121FE0CABBBC97155F2 /* SendMessageCallbackProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SendMessageCallbackProxy.m; path = OpenIMSDK/CallbackProxy/SendMessageCallbackProxy.m; sourceTree = ""; }; - 1563B3E3E781D1EA51EBC18F425BD5DA /* MARouteOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MARouteOverlay.h; path = MAMapKit.framework/Headers/MARouteOverlay.h; sourceTree = ""; }; - 1583E5EDD96C5DC700A9A7CB042E5C7D /* OIMAttachedInfoElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMAttachedInfoElem.h; path = OpenIMSDK/Model/OIMAttachedInfoElem.h; sourceTree = ""; }; + 1238DCD625C5D81AC5BBEBBA05973B84 /* DidSelectProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DidSelectProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidSelectProviding.swift; sourceTree = ""; }; + 1264E6B84B65131BAEEAC3BA08283C42 /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDispatchQueueScheduler.swift; path = RxSwift/Schedulers/SerialDispatchQueueScheduler.swift; sourceTree = ""; }; + 1276FAED22369627709084038B6FF270 /* MJRefreshTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshTrailer.m; path = MJRefresh/Base/MJRefreshTrailer.m; sourceTree = ""; }; + 12936157E06A9BD2BBAC1822B010AE60 /* Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Defaults.swift; path = Sources/Defaults.swift; sourceTree = ""; }; + 12A797C3A031E57AFC7DDC1C885765D6 /* filters_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = filters_utils.h; path = src/utils/filters_utils.h; sourceTree = ""; }; + 12AEC4022B4E74BA76823EDA45EF7B0E /* UIButton+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Rx.swift"; path = "RxCocoa/iOS/UIButton+Rx.swift"; sourceTree = ""; }; + 12B5B5DF9020B345D986EB097F6AD7BA /* IQTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQTextView-Info.plist"; sourceTree = ""; }; + 12C03BC1B83CC86160BD1E3A61E1D046 /* EnumOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnumOperators.swift; path = Sources/EnumOperators.swift; sourceTree = ""; }; + 12D2895B84AB9CF7B83ED11129E9C360 /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; + 130A9347ACA3AD097CD3B70D8B774B49 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; + 1322DF1CDD5A25B867ADD9873A4AC966 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/Core/UIImage+Transform.m"; sourceTree = ""; }; + 13257E2CEB981F8DE0977FDCD119CA08 /* RxTextViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTextViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift; sourceTree = ""; }; + 1347E158DD6325436FEA7A90CCD478A6 /* UIView+ParentObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ParentObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIView+ParentObjc.swift"; sourceTree = ""; }; + 1358D7123BAC8C0A76B45D29BF04C27E /* lottie-ios-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-umbrella.h"; sourceTree = ""; }; + 139EF672FB2BD571A5A740D822E68D86 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+IQKeyboardManagerExtensionObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtensionObjc.swift"; sourceTree = ""; }; + 13B32687B49E8C118D10964F8D6250E1 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackFooter.m; path = MJRefresh/Base/MJRefreshBackFooter.m; sourceTree = ""; }; + 13CA3F82CB4C95C5C30C09CEFF326F75 /* YBIBTopView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBTopView.m; path = YBImageBrowser/ToolView/YBIBTopView.m; sourceTree = ""; }; + 13DD4EB9386FF12834E44BF449F92FC4 /* decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = decode.h; path = src/webp/decode.h; sourceTree = ""; }; + 13E455DA64F34549C2DF36123E908D73 /* ISOParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISOParser.swift; path = Sources/SwiftDate/Formatters/ISOParser.swift; sourceTree = ""; }; + 140B90127F8284D9D202F085B0596ECE /* OpenIMSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OpenIMSDK.h; path = OpenIMSDK/OpenIMSDK.h; sourceTree = ""; }; + 1410AE1CD716A6B76D8C34B2C0718A1E /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = ""; }; + 144656E3F5F7AE2576B871406A869F02 /* _RXKVOObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXKVOObserver.h; path = RxCocoa/Runtime/include/_RXKVOObserver.h; sourceTree = ""; }; + 145E202321E3781E1B84D6204FD9B9E0 /* MJRefreshNormalTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m; sourceTree = ""; }; + 147AA59E39E9EAB2C4AB74196F84BF4E /* YBIBImageData+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBImageData+Internal.h"; path = "YBImageBrowser/Image/YBIBImageData+Internal.h"; sourceTree = ""; }; + 147C5981170C19FD63555EC085839A12 /* SynchronizedUnsubscribeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedUnsubscribeType.swift; path = RxSwift/Concurrency/SynchronizedUnsubscribeType.swift; sourceTree = ""; }; + 1493C734914B1D5213D92AB9DC211BA6 /* UIView+WebCacheState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheState.h"; path = "SDWebImage/Core/UIView+WebCacheState.h"; sourceTree = ""; }; + 14A25801BE3681A6B246E467BD8305FE /* HXPHPicker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = HXPHPicker.modulemap; sourceTree = ""; }; + 14A7D6A86A2083A77AE74C11D9E5B400 /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; + 14D2737365898F5CAB68817BBFBF3E3A /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; }; + 14E16E30B25A8A248D95A482A7EB47AF /* GYSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GYSDK.debug.xcconfig; sourceTree = ""; }; + 14F04172F80298AFE5BE335BF76D4501 /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = ""; }; + 150E76117B97BF8CC0F969C82D1F8200 /* Date+Dispatch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Dispatch.swift"; path = "RxSwift/Date+Dispatch.swift"; sourceTree = ""; }; + 153604802C3D5B8223956E5CB7AAA14F /* MARouteOverlayModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MARouteOverlayModel.h; path = MAMapKit.framework/Headers/MARouteOverlayModel.h; sourceTree = ""; }; + 153DDDE8AAB0748444FFC4BC506F42BB /* LottieAnimationHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationHelpers.swift; path = Sources/Public/Animation/LottieAnimationHelpers.swift; sourceTree = ""; }; + 154A80EEAD6466B904FDDB7938F4AB13 /* MoyaProvider+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MoyaProvider+Internal.swift"; path = "Sources/Moya/MoyaProvider+Internal.swift"; sourceTree = ""; }; + 155696EF7C4D692123629E939A4CFC88 /* EditorStickerContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerContentView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerContentView.swift; sourceTree = ""; }; + 1565C58CB6645EE5908226C8FA71D0F8 /* RecursiveLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveLock.swift; path = Platform/RecursiveLock.swift; sourceTree = ""; }; + 1572295F624626F7E6A25BFFD705DE16 /* CocoaMQTT.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaMQTT.debug.xcconfig; sourceTree = ""; }; 15848DEC7727A809830E7F6FC1B6CE0F /* IQKeyboardReturnManager */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardReturnManager; path = IQKeyboardReturnManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 15D5EFF4E9FEA0C1A35B46E0B26B96DD /* EditorCropConfirmView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorCropConfirmView.swift; path = Sources/HXPHPicker/Editor/View/EditorCropConfirmView.swift; sourceTree = ""; }; - 160A8AF75E876201D8C20CE7C39BEC82 /* NSTextField+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextField+Rx.swift"; path = "RxCocoa/macOS/NSTextField+Rx.swift"; sourceTree = ""; }; - 16193DA5A0D7C1CE6F0645E191E3B728 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = ""; }; - 16355D6BA368A1364975051A8532358E /* UIImage+ExtendedCacheData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ExtendedCacheData.m"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.m"; sourceTree = ""; }; - 1643B1405173B32A64A5AB78741EBA0B /* CustomDateFormatTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomDateFormatTransform.swift; path = Sources/CustomDateFormatTransform.swift; sourceTree = ""; }; - 164C4FECB95EA7C55B2E7FD4257F2960 /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = RxSwift/Observables/Range.swift; sourceTree = ""; }; - 165FC294BFD8A65FF438D6516CD19815 /* BaseAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseAnimationLayer.swift; path = Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift; sourceTree = ""; }; - 16CB11B23A5ACD2B188960D308AFB6DF /* cpu.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cpu.c; path = src/dsp/cpu.c; sourceTree = ""; }; - 1724A41AA97890D9CB0895E2B99DCD9E /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; - 1733D116F00BB7860C14898B3F57690C /* Endpoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Endpoint.swift; path = Sources/Moya/Endpoint.swift; sourceTree = ""; }; - 173B97065E201D29718EA0986BBECA8C /* VideoEditorMusic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorMusic.swift; path = Sources/HXPHPicker/Editor/Model/VideoEditorMusic.swift; sourceTree = ""; }; - 17B31F06E373829C72507245A444656C /* Image+WebP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Image+WebP.swift"; path = "Sources/Image+WebP.swift"; sourceTree = ""; }; - 17C56352D67E8BCA827335C748E6BF1E /* IQKeyboardNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardNotification-dummy.m"; sourceTree = ""; }; - 17FF6580767902B4011A015F2B07A578 /* TADotView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TADotView.m; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TADotView.m; sourceTree = ""; }; - 183127F3E86A45036E2C0AB7DEB18E1D /* WebP.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebP.framework; path = Vendor/WebP.framework; sourceTree = ""; }; - 1858DBC20C1ACE16F5BE62DD4C23AEDF /* MarqueeLabel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MarqueeLabel.debug.xcconfig; sourceTree = ""; }; - 185E9EEEEA7B324631291ABE87B55BF9 /* KFOptionsSetter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFOptionsSetter.swift; path = Sources/General/KFOptionsSetter.swift; sourceTree = ""; }; - 18A15E6769049B4159AC23B4E203B59A /* AnimatedButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedButton.swift; path = Sources/Public/Controls/AnimatedButton.swift; sourceTree = ""; }; - 18A237F8AFB1DD864B2E065B762851FB /* Stroke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stroke.swift; path = Sources/Private/Model/ShapeItems/Stroke.swift; sourceTree = ""; }; - 18BD4A98815CF19CEF256B8951CB1B21 /* AssetManager+LivePhotoURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+LivePhotoURL.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+LivePhotoURL.swift"; sourceTree = ""; }; - 19008898D15EB1FBBCD1A15590CF8625 /* ExtensionHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionHelpers.swift; path = Sources/Utility/ExtensionHelpers.swift; sourceTree = ""; }; - 1923C5F56BFC83403AE09CB6E7168D18 /* KF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KF.swift; path = Sources/General/KF.swift; sourceTree = ""; }; - 193191BB278021F213BF3AEF417EBFFA /* URLNavigator-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "URLNavigator-umbrella.h"; sourceTree = ""; }; - 193C2F05AD905BA3B2BAA978950E4592 /* CocoaLumberjack-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CocoaLumberjack-Info.plist"; sourceTree = ""; }; - 196C119B4B99656411031B27E64A2D95 /* DefaultsObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsObserver.swift; path = Sources/DefaultsObserver.swift; sourceTree = ""; }; - 19D327EFE94ECB1A3205002302180EBC /* Repeater.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repeater.swift; path = Sources/Private/Model/ShapeItems/Repeater.swift; sourceTree = ""; }; - 1A1F982C6186E1FDD481C50E8701D062 /* IQKeyboardResignHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardResignHandler.swift; path = IQKeyboardManagerSwift/Resign/IQKeyboardResignHandler.swift; sourceTree = ""; }; - 1A4EDC467901C4C5FD494CCC7C2C7D0C /* PhotoEditorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorView.swift; sourceTree = ""; }; - 1A5AE75EBDE8DA870927704CD94AC0E1 /* RxTableViewSectionedReloadDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewSectionedReloadDataSource.swift; path = Sources/RxDataSources/RxTableViewSectionedReloadDataSource.swift; sourceTree = ""; }; - 1A84325CE3F960B48B1C19244D0063D0 /* Locales.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Locales.swift; path = Sources/SwiftDate/Supports/Locales.swift; sourceTree = ""; }; - 1AD3C64E24C009607CBD92AC885EF423 /* upsampling_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_neon.c; path = src/dsp/upsampling_neon.c; sourceTree = ""; }; - 1B3C11BF7CD9B3366062CA6E41292DCD /* Documentation.docc */ = {isa = PBXFileReference; includeInIndex = 1; name = Documentation.docc; path = Sources/Documentation.docc; sourceTree = ""; }; - 1B3F62938E971A0D73273E6ECF332744 /* MJProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJProperty.h; path = MJExtension/MJProperty.h; sourceTree = ""; }; - 1B493390BFB085C207195D0FFD8C73B3 /* sharpyuv.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv.c; path = sharpyuv/sharpyuv.c; sourceTree = ""; }; - 1B4EA8A05D522735104DD7E10130C37B /* Producer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Producer.swift; path = RxSwift/Observables/Producer.swift; sourceTree = ""; }; - 1B63629946BAA0F141F5000D45DF5B53 /* ssim_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = ssim_sse2.c; path = src/dsp/ssim_sse2.c; sourceTree = ""; }; - 1B662DE861161878956C798A09AAFD3D /* MAParticleOverlayOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlayOptions.h; path = MAMapKit.framework/Headers/MAParticleOverlayOptions.h; sourceTree = ""; }; - 1BCC4F82D2FB23B74FAFB19A6D5D21C1 /* OIMFaceElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMFaceElem.m; path = OpenIMSDK/Model/OIMFaceElem.m; sourceTree = ""; }; - 1C029410FACF307A2410FE68E0C0FBB4 /* Sink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sink.swift; path = RxSwift/Observables/Sink.swift; sourceTree = ""; }; - 1C1376FC7BB4470F53E0603A9A7FC1AC /* cost_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_neon.c; path = src/dsp/cost_neon.c; sourceTree = ""; }; - 1C1449F57688BEF3B9D5DCFB485E606C /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; - 1C1D99CE01FB6BB6346D7EBEF5BF9DFF /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = ""; }; - 1C2073401AAF79A598AB6B0B912877B8 /* OIMPictureElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMPictureElem.m; path = OpenIMSDK/Model/OIMPictureElem.m; sourceTree = ""; }; - 1C4A3B8F09E406012F86745357A1CD7D /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; - 1C50D5AF6E97AE83A91CBEDB011B783C /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = ""; }; - 1C537FE6F5932E4CC8555D24BCEFB66D /* YBImageBrowser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YBImageBrowser-dummy.m"; sourceTree = ""; }; - 1C65529B177CF37DE07312C17C19A0D6 /* cost_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_sse2.c; path = src/dsp/cost_sse2.c; sourceTree = ""; }; - 1C8B492C658E83648F36B13B1502DD29 /* io_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = io_dec.c; path = src/dec/io_dec.c; sourceTree = ""; }; - 1C8FFE3A4542A54D17DEA4F0A0654EDE /* SkipWhile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipWhile.swift; path = RxSwift/Observables/SkipWhile.swift; sourceTree = ""; }; - 1CDA320D71347555289F21E5F48A66BE /* MACircleRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACircleRenderer.h; path = MAMapKit.framework/Headers/MACircleRenderer.h; sourceTree = ""; }; - 1CF8E6F541077AC2F8784FCFDE14C12A /* ZXSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXSDK.debug.xcconfig; sourceTree = ""; }; - 1CFB860E83288CAFEBE347A6D5C2A748 /* lottie-ios-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-umbrella.h"; sourceTree = ""; }; - 1D2FE9608AAFE10B6C532B177274353D /* MJRefresh.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJRefresh.modulemap; sourceTree = ""; }; - 1D587347C55CFBF02E2405496E4C19F1 /* IQKeyboardToolbarConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarConstants.swift; path = IQKeyboardToolbarManager/Classes/Constants/IQKeyboardToolbarConstants.swift; sourceTree = ""; }; + 158C77258A2351E9D3B6E93C28100672 /* TAAbstractDotView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TAAbstractDotView.h; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAAbstractDotView.h; sourceTree = ""; }; + 15B4330482D87D40C8FC65666CF75DD1 /* SwiftSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftSupport.swift; path = RxSwift/SwiftSupport/SwiftSupport.swift; sourceTree = ""; }; + 15C41B1F75E0AE177414264D43A54B7D /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = ""; }; + 15C82964192FC0B4A30796ED44DCBAF0 /* AMapLocationVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationVersion.h; path = AMapLocationKit.framework/Headers/AMapLocationVersion.h; sourceTree = ""; }; + 15CF4020595F378B3FBC56EF16E33756 /* TimeStructures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimeStructures.swift; path = Sources/SwiftDate/Supports/TimeStructures.swift; sourceTree = ""; }; + 15DB7F8C2DB86CE0AAF598E6C439B423 /* CombinedShapeAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedShapeAnimation.swift; path = Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift; sourceTree = ""; }; + 1613AA53EE5A2A7A0235668A464EBB18 /* SwiftyJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftyJSON-Info.plist"; sourceTree = ""; }; + 165FE2BA9D7A569098A2DD6DEB322A92 /* lossless_enc_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_neon.c; path = src/dsp/lossless_enc_neon.c; sourceTree = ""; }; + 1661F2067BAE2A0A0E5D6C5585A309D4 /* IQKeyboardAppearanceManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardAppearanceManager+Internal.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceManager+Internal.swift"; sourceTree = ""; }; + 1692A7D7BE4DE1B7E024C490612EB31B /* DDContextFilterLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDContextFilterLogFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDContextFilterLogFormatter.m; sourceTree = ""; }; + 16B62285E67238FCDFC2EE5E85A20C18 /* UIView+ResignObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ResignObjc.swift"; path = "IQKeyboardManagerSwift/Resign/UIKItExtensions/UIView+ResignObjc.swift"; sourceTree = ""; }; + 16C74F65B7443D250D37B4BC5DD2083A /* AMapLocationCommonObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationCommonObj.h; path = AMapLocationKit.framework/Headers/AMapLocationCommonObj.h; sourceTree = ""; }; + 16DCBA13E1A91EBF16B2E98581173E18 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; + 17067DED77C9D2CFC9CF625FA24F832B /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = ""; }; + 1716B1D0D70C770AC24EDDD4C69E194B /* CocoaLumberjack.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.debug.xcconfig; sourceTree = ""; }; + 17213D82F9306746169202894B0EAD94 /* UISlider+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISlider+Rx.swift"; path = "RxCocoa/iOS/UISlider+Rx.swift"; sourceTree = ""; }; + 17272198BEED2330EBB2A866A7ABE400 /* OpenIMSDKCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OpenIMSDKCore.debug.xcconfig; sourceTree = ""; }; + 173E5A5AC9E0556461707258329978E9 /* VisibilityAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VisibilityAnimation.swift; path = Sources/Private/CoreAnimation/Animations/VisibilityAnimation.swift; sourceTree = ""; }; + 176B5986B4C5F9E607A7F9872F4E9DBC /* SGWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGWeakProxy.m; path = SGQRCode/WeakProxy/SGWeakProxy.m; sourceTree = ""; }; + 17C72523B93134AD24AD27FCC1289EBD /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = ""; }; + 17D15555C12B0AD21FDDB995C7FF080C /* FramePubRel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FramePubRel.swift; path = Source/FramePubRel.swift; sourceTree = ""; }; + 17D7819D2675E74CD46EF495115299E5 /* AlbumListConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumListConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/AlbumListConfiguration.swift; sourceTree = ""; }; + 17F4024785CE7E20270CB82E7E759217 /* SDCallbackQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDCallbackQueue.m; path = SDWebImage/Core/SDCallbackQueue.m; sourceTree = ""; }; + 1804279EFA58CB40CB913B6BA37A081A /* MAOfflineCity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineCity.h; path = MAMapKit.framework/Headers/MAOfflineCity.h; sourceTree = ""; }; + 18091BE40C28018BF17A58A3B4E68CDA /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 183ECF3CB3F9B9A28400DF0443F735D0 /* ignore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ignore.swift; path = Source/RxSwift/ignore.swift; sourceTree = ""; }; + 184F947CEF38F5F5A56AAC37D7C72109 /* IQTextInputViewInfoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewInfoModel.swift; path = IQKeyboardReturnManager/Classes/IQTextInputViewInfoModel.swift; sourceTree = ""; }; + 185DAF49A8E1175A987F04CE022957BE /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Utility/Box.swift; sourceTree = ""; }; + 187CD970712B0851A9470D28D04986D3 /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Sources/LayoutConstraintItem.swift; sourceTree = ""; }; + 188EA8631594375F44FE972823A25FAC /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; + 18A527F6E05456C08754EC86F74615F4 /* VideoEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorViewController.swift; path = Sources/HXPHPicker/Editor/Controller/VideoEditorViewController.swift; sourceTree = ""; }; + 18C57118977326E3AB3594BF47E4D50F /* TextDocument.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextDocument.swift; path = Sources/Private/Model/Text/TextDocument.swift; sourceTree = ""; }; + 18CCEF9F4B1E514EE1C151BAFB108BB2 /* MAOfflineItemCommonCity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemCommonCity.h; path = MAMapKit.framework/Headers/MAOfflineItemCommonCity.h; sourceTree = ""; }; + 18E56EA95B0B63455E9FD121268B2EAB /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Moya/Image.swift; sourceTree = ""; }; + 1900F12C0F59A2EE38FF64396E3A02DF /* OptionalType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OptionalType.swift; path = Sources/OptionalType.swift; sourceTree = ""; }; + 193E7324AAD235E26ADFD7F5B3EEB6C7 /* YBIBVideoData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoData.m; path = Video/YBIBVideoData.m; sourceTree = ""; }; + 1970F255FBB8A6704AB7CFD5716435DC /* IQKeyboardToolbarManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarManager.swift; path = IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager.swift; sourceTree = ""; }; + 198CEFDEA8156A3D6EA872BE843B4316 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MJRefresh.m"; path = "MJRefresh/NSBundle+MJRefresh.m"; sourceTree = ""; }; + 1990DB1381D06FADDBC58B8DE86F05D6 /* TagListView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "TagListView-Info.plist"; sourceTree = ""; }; + 19AB346F664AF3BB68015BA96F15CA47 /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = ""; }; + 19AC9477C2E6EE717E2515047C572475 /* YBImageBrowser-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBImageBrowser-umbrella.h"; sourceTree = ""; }; + 19B267246ED5549EBC604DE7947CDE89 /* DDAssert.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDAssert.swift; path = Sources/CocoaLumberjackSwift/DDAssert.swift; sourceTree = ""; }; + 19C4C26FFF512354F4D686A50594A869 /* Masonry-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Masonry-Info.plist"; sourceTree = ""; }; + 19D41911253A4EA902F92DB8C0EC5822 /* RxTableViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift; sourceTree = ""; }; + 19E88545F1377810D5192228482A9C6B /* CocoaMQTTDeliver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTDeliver.swift; path = Source/CocoaMQTTDeliver.swift; sourceTree = ""; }; + 1A065AF90B68633BBEC46B5E72F9476B /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; + 1A0AD4B77AA2B0C8F61E913F33E32B5D /* SwiftDate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftDate.release.xcconfig; sourceTree = ""; }; + 1A1FA30BD56F8630D1EBC9B27C1B166D /* Rectangle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rectangle.swift; path = Sources/Private/Model/ShapeItems/Rectangle.swift; sourceTree = ""; }; + 1A25B8A9E6FDF0123372C7099D17C0C5 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = ""; }; + 1A95E8634ABD3401F658163DA5877CED /* yuv.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv.c; path = src/dsp/yuv.c; sourceTree = ""; }; + 1ACCAE49580830784049EDF24569F21B /* BuiltIns.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BuiltIns.swift; path = Sources/BuiltIns.swift; sourceTree = ""; }; + 1AF1F452F9623F8A1F1BC97F1971B9AB /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; }; + 1B096CB908090AF2DD4E15675A33FD06 /* ImageLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageLayerModel.swift; path = Sources/Private/Model/Layers/ImageLayerModel.swift; sourceTree = ""; }; + 1B0F792B49D07BDC668FEA0FEE1D35C1 /* CocoaLumberjack.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaLumberjack.swift; path = Sources/CocoaLumberjackSwift/CocoaLumberjack.swift; sourceTree = ""; }; + 1B15C26343D5A8DE9B5A7A36BA7145FD /* OIMFullUserInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMFullUserInfo.h; path = OpenIMSDK/Model/OIMFullUserInfo.h; sourceTree = ""; }; + 1B20E54E915DD05D6DC0A202B6A746A5 /* IQKeyboardCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardCore-dummy.m"; sourceTree = ""; }; + 1B3CE22D40D563D3716D2B637C30D428 /* NetworkActivityPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkActivityPlugin.swift; path = Sources/Moya/Plugins/NetworkActivityPlugin.swift; sourceTree = ""; }; + 1B4759B2362FE048A89613C7D13FBE31 /* YBIBUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBUtilities.h; path = YBImageBrowser/Helper/YBIBUtilities.h; sourceTree = ""; }; + 1B4B16CEF33050278A4A904EC75AD40C /* iterator_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = iterator_enc.c; path = src/enc/iterator_enc.c; sourceTree = ""; }; + 1B549342902CF998B972113E3FFF6A2A /* EditorConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/EditorConfiguration.swift; sourceTree = ""; }; + 1B7EFA9029C4AA0F8E04C83D67306D6D /* RxCocoa.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxCocoa.modulemap; sourceTree = ""; }; + 1B7F5FD6DA9BADA51B3252CFD995B944 /* once.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = once.swift; path = Source/RxSwift/once.swift; sourceTree = ""; }; + 1B9BF634B186B10B3DEB036AF4CFC662 /* UIActivityIndicatorView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIActivityIndicatorView+Rx.swift"; path = "RxCocoa/iOS/UIActivityIndicatorView+Rx.swift"; sourceTree = ""; }; + 1BC19FD29586F1661E5FB91599DACA72 /* count.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = count.swift; path = Source/RxSwift/count.swift; sourceTree = ""; }; + 1BCC3CCFED5B0E4592E403671601ACEF /* RxDataSources-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxDataSources-umbrella.h"; sourceTree = ""; }; + 1BD6854C4461EA80B767FF2182ED6EF2 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; }; + 1BDE57FD5D9733AD03237000523DFF20 /* YBIBDataMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBDataMediator.h; path = YBImageBrowser/Base/YBIBDataMediator.h; sourceTree = ""; }; + 1BE3ED2D55A51CE30D6B35A81EEDBF70 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = ""; }; + 1BEFFF17F16298B1DF23F0FD66D7EADA /* UIView+IQKeyboardManagerExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardManagerExtensionObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIView+IQKeyboardManagerExtensionObjc.swift"; sourceTree = ""; }; + 1BF72D624C3A129C90AEC6EC4E3E5E41 /* RenderingEngineOption.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RenderingEngineOption.swift; path = Sources/Public/Configuration/RenderingEngineOption.swift; sourceTree = ""; }; + 1C112C980D7117A563F32576ED0A5757 /* EditorCropConfirmView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorCropConfirmView.swift; path = Sources/HXPHPicker/Editor/View/EditorCropConfirmView.swift; sourceTree = ""; }; + 1C1D9B69A7128BBCC29DD780202F2071 /* rescaler_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_mips32.c; path = src/dsp/rescaler_mips32.c; sourceTree = ""; }; + 1C469C15C143DCBCAD26D2F80E2A8BAD /* Atomic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Atomic.swift; path = Sources/Moya/Atomic.swift; sourceTree = ""; }; + 1C7BAAB90591C5F80AC0B54E492DC5FE /* DefaultsSerializable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsSerializable.swift; path = Sources/DefaultsSerializable.swift; sourceTree = ""; }; + 1C88283412781FE32730568EB4E8A4BF /* Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Map.swift; path = Sources/Map.swift; sourceTree = ""; }; + 1C8C4047820D21477920765A198889CD /* catchErrorJustComplete.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = catchErrorJustComplete.swift; path = Source/RxSwift/catchErrorJustComplete.swift; sourceTree = ""; }; + 1C91C661FD814F39CAB6325D8D4B7E37 /* Reduce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reduce.swift; path = RxSwift/Observables/Reduce.swift; sourceTree = ""; }; + 1CAD8E36D5A47E8FC472AD76480C5F1E /* rescaler_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = rescaler_utils.h; path = src/utils/rescaler_utils.h; sourceTree = ""; }; + 1CE5CC4648FB6DF842BA008DD474C9D0 /* alpha_processing_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_neon.c; path = src/dsp/alpha_processing_neon.c; sourceTree = ""; }; + 1D0927FACAB8AFC0577E10CE3E51400C /* RxCollectionViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourceProxy.swift; sourceTree = ""; }; + 1D623539744C92AC2DF81C3ABEF834DA /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = ""; }; 1D6CFC15839ACA2CFFE42FF0D4017A07 /* OpenIMSDK */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = OpenIMSDK; path = OpenIMSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1DB22D2FDDF12C37CFAA13FB3428AEAA /* Popover-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Popover-prefix.pch"; sourceTree = ""; }; - 1DB6B3A6190703C3CC0E2646340F58EC /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; }; - 1DEC4D97314748FED89C51384E90F8BB /* ControlTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlTarget.swift; path = RxCocoa/Common/ControlTarget.swift; sourceTree = ""; }; - 1DF1E44CD5D56F8194F2390A6116F36D /* IQKeyboardToolbar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbar.release.xcconfig; sourceTree = ""; }; - 1E168DF5E47CB8A301BCB3993A623844 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshGifHeader.m; path = MJRefresh/Custom/Header/MJRefreshGifHeader.m; sourceTree = ""; }; - 1E264ED86787D52D1A2FB9D1694D53EF /* MARouteOverlayModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MARouteOverlayModel.h; path = MAMapKit.framework/Headers/MARouteOverlayModel.h; sourceTree = ""; }; - 1E3A4D823011F833B4CE1C1AB3DC381E /* UIView+RespondersObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+RespondersObjc.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/UIView+RespondersObjc.swift"; sourceTree = ""; }; - 1E3D74F7DD766B0FCCC2830BEE031A12 /* Cancelable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancelable.swift; path = RxSwift/Cancelable.swift; sourceTree = ""; }; - 1E5EAE84819EF1BA77DF74FCED0F3399 /* OIMManager+Group.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Group.m"; path = "OpenIMSDK/Interface/OIMManager+Group.m"; sourceTree = ""; }; - 1E76BF6D7E4423019EBAB88941DBFA91 /* SharedSequence+Operators+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Operators+arity.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Operators+arity.swift"; sourceTree = ""; }; - 1E8354D6F5407F2DBB7BAE63AF881072 /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; - 1E93437C29905A7527D19EBEC710F418 /* KeychainItemAccessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainItemAccessibility.swift; path = SwiftKeychainWrapper/KeychainItemAccessibility.swift; sourceTree = ""; }; - 1EE98E60968603D5FA63AA72697BD268 /* MJRefreshTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshTrailer.h; path = MJRefresh/Base/MJRefreshTrailer.h; sourceTree = ""; }; - 1EEA2A47DAF2DB781EBC24E6A1DCA2E5 /* RxSwiftExt.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwiftExt.release.xcconfig; sourceTree = ""; }; - 1EFFF31201EE4BC724B9C92EB8A90677 /* GroupedObservable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupedObservable.swift; path = RxSwift/GroupedObservable.swift; sourceTree = ""; }; - 1F0F417D668A29E1F52CC4DA14DE80D6 /* WechatOpenSDK-XCFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "WechatOpenSDK-XCFramework.debug.xcconfig"; sourceTree = ""; }; - 1F58995D9C873B51C91694DA3DF853E2 /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/Core/SDImageTransformer.h; sourceTree = ""; }; - 1F5D6827AFB3166F91E146F96204DDFE /* MJExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJExtension.modulemap; sourceTree = ""; }; - 1F6B612D76BB12D1DD8A1C1714E48765 /* DotLottieFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieFile.swift; path = Sources/Public/DotLottie/DotLottieFile.swift; sourceTree = ""; }; - 1F6D81725FC20BBBDBDAE2433DCC141F /* Infallible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Infallible.swift; path = RxSwift/Traits/Infallible/Infallible.swift; sourceTree = ""; }; - 1F7005538E0ADBFEE28935345444E9BE /* upsampling_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_msa.c; path = src/dsp/upsampling_msa.c; sourceTree = ""; }; + 1D750F4A680320BE56EF1BDB092B3066 /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; + 1D7719DE8DCBAF91163BE806ED694652 /* GIFImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GIFImageView.swift; path = Sources/HXPHPicker/Picker/View/GIFImageView.swift; sourceTree = ""; }; + 1D8B96BC951501B73B984B3E5E73D45D /* IQKeyboardToolbarManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbarManager-umbrella.h"; sourceTree = ""; }; + 1DBBED0980B464762473A6C89F1C172D /* CALayer+fillBounds.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+fillBounds.swift"; path = "Sources/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift"; sourceTree = ""; }; + 1DBE5FAED8A096071298FA384ECCAB5D /* dec_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_msa.c; path = src/dsp/dec_msa.c; sourceTree = ""; }; + 1DC2D7AD3B62E3A2D0D88CB42FAE50CB /* Core+UIFont.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIFont.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIFont.swift"; sourceTree = ""; }; + 1DD2EEC1DF1BF388D4AF543887D09A83 /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/Features/MultipartUpload.swift; sourceTree = ""; }; + 1DD5BEDC44F138136A2BE5B82DDCB24F /* IQTextView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextView-prefix.pch"; sourceTree = ""; }; + 1DFBCAA5D961010443EE4E8BF7F440E3 /* GTCommonSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTCommonSDK.debug.xcconfig; sourceTree = ""; }; + 1E05D9021DDD8DE479F93C6DA29461F4 /* OIMSoundElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSoundElem.h; path = OpenIMSDK/Model/OIMSoundElem.h; sourceTree = ""; }; + 1E154A22F7BFD213343B11EF0EF10A5C /* thread_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = thread_utils.c; path = src/utils/thread_utils.c; sourceTree = ""; }; + 1E1B0A6502E32D023ACE68E9AAF41799 /* ControlEvent+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlEvent+Signal.swift"; path = "RxCocoa/Traits/Signal/ControlEvent+Signal.swift"; sourceTree = ""; }; + 1E1CA4230DC2DBBA4DE46A15D56461F6 /* SGQRCode-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SGQRCode-umbrella.h"; sourceTree = ""; }; + 1E29117C308DA807E6BE6C9C78F377D1 /* lottie-ios-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "lottie-ios-Info.plist"; sourceTree = ""; }; + 1E34C4B78DD7F2261388D210C5CADD36 /* IQKeyboardNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardNotification.release.xcconfig; sourceTree = ""; }; + 1E3BA316C2E40426CD457CC367902F1F /* RectangleAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RectangleAnimation.swift; path = Sources/Private/CoreAnimation/Animations/RectangleAnimation.swift; sourceTree = ""; }; + 1E591870392035106E96512F65102385 /* MAPolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolylineRenderer.h; path = MAMapKit.framework/Headers/MAPolylineRenderer.h; sourceTree = ""; }; + 1E60C88006022308DBE83289F5CB1A46 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 1E644A02D107EFCE505936D2C494F0D2 /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = ""; }; + 1E667A962419E1AC1223896870D663EF /* YBIBImageData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageData.h; path = YBImageBrowser/Image/YBIBImageData.h; sourceTree = ""; }; + 1EB524C0849E4B0FDC0EC4D3FBADF657 /* apply.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = apply.swift; path = Source/RxSwift/apply.swift; sourceTree = ""; }; + 1EBE8A67D212304EE2620BF3E7B9160A /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/Features/AuthenticationInterceptor.swift; sourceTree = ""; }; + 1EC1B8C248D81410FDAFCB9BE646654F /* YBIBVideoActionBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoActionBar.m; path = Video/YBIBVideoActionBar.m; sourceTree = ""; }; + 1ECB7D5AB4DB61A7C722388BBFF2BCD7 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = ""; }; + 1EF0D735372E69C9AC488BD364C4FBE3 /* AnimationImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationImageProvider.swift; path = Sources/Public/ImageProvider/AnimationImageProvider.swift; sourceTree = ""; }; + 1F18B21B8DF3684C2CE65E173E832352 /* LottieView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieView.swift; path = Sources/Public/Animation/LottieView.swift; sourceTree = ""; }; 1F742F9BBDEE927B1CEBB85C83810BC8 /* Pods-QuickLocation-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-QuickLocation-umbrella.h"; sourceTree = ""; }; - 1FA284AAEAD628F6B638EFC01ADF2225 /* URL+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+ZIP.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/URL+ZIP.swift"; sourceTree = ""; }; - 1FC105F4B4286E65A9A821818A51A5FB /* DDFileLogger+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDFileLogger+Internal.h"; path = "Sources/CocoaLumberjack/DDFileLogger+Internal.h"; sourceTree = ""; }; - 1FD460C65311A9B6AD426570D30A2EDE /* RxScrollViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxScrollViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift; sourceTree = ""; }; - 1FDD4EA270A2514B7D7491E50CF6BA4B /* KFImageOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageOptions.swift; path = Sources/SwiftUI/KFImageOptions.swift; sourceTree = ""; }; - 1FE7CCD2DB56740DB6C59A573D8DFB63 /* AMapFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapFoundation.debug.xcconfig; sourceTree = ""; }; - 1FE7D3EF3525CECB919C94B7CBAAEB8D /* UIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Hierarchy.swift"; path = "IQKeyboardCore/Classes/UIKitExtensions/UIView+Hierarchy.swift"; sourceTree = ""; }; - 1FF7131C55E627FF8ABFED611ABA66AC /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Sources/Networking/RedirectHandler.swift; sourceTree = ""; }; - 1FF7D4D50D65E9D4198254BB3BEA4CA0 /* EpoxyModeled.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyModeled.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModeled.swift; sourceTree = ""; }; + 1FA74D2870A019BA4740B7F676D3BE43 /* PhotoManager+Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoManager+Download.swift"; path = "Sources/HXPHPicker/Core/Util/PhotoManager+Download.swift"; sourceTree = ""; }; + 1FB1AF2C85681828F45ABCA77CA811B2 /* rescaler_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_sse2.c; path = src/dsp/rescaler_sse2.c; sourceTree = ""; }; + 1FBA36361856104A4D031F00072469BF /* Kingfisher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.release.xcconfig; sourceTree = ""; }; + 1FCDFD3479752F715448F3E88166C942 /* histogram_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = histogram_enc.h; path = src/enc/histogram_enc.h; sourceTree = ""; }; + 1FDBE017ACEAAA8AB1BCF651DB668698 /* TakeLast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeLast.swift; path = RxSwift/Observables/TakeLast.swift; sourceTree = ""; }; 1FFED36A657123030ABB700256D73F15 /* Masonry */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Masonry; path = Masonry.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 20042495A7F0AEBBC01B9CB26314CDD2 /* alpha_processing_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_neon.c; path = src/dsp/alpha_processing_neon.c; sourceTree = ""; }; - 203E00991678D02363AB9B6B65D253A5 /* SizeExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SizeExtensions.swift; path = Sources/Utility/SizeExtensions.swift; sourceTree = ""; }; - 2064CD5E88DCC289C0777852177E5B8D /* MAPointAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPointAnnotation.h; path = MAMapKit.framework/Headers/MAPointAnnotation.h; sourceTree = ""; }; - 20659E5169F93017F52987EB322E311C /* OpenIMSDK-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OpenIMSDK-umbrella.h"; sourceTree = ""; }; - 2082CF6101F2C1D95E6AA64DA48FA9C6 /* IQPlaceholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPlaceholderable.swift; path = IQKeyboardToolbar/Placeholderable/IQPlaceholderable.swift; sourceTree = ""; }; - 20831C4464FC6DB5647CA8FFB3BB782D /* libwebp-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libwebp-prefix.pch"; sourceTree = ""; }; - 20A1B6CDC1CCF4DEFD740A6FF78D001B /* AssetManager+ImageURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+ImageURL.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+ImageURL.swift"; sourceTree = ""; }; - 20FEFFB46CDB20A45D5D9381DA903496 /* RxRelay.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxRelay.modulemap; sourceTree = ""; }; - 20FFC6126E63DBE03B5555F2CEA45936 /* OIMGroupApplicationInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMGroupApplicationInfo.m; path = OpenIMSDK/Model/OIMGroupApplicationInfo.m; sourceTree = ""; }; - 2109F7F661446DA12643DCACFF4078C0 /* Core+PHAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+PHAsset.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+PHAsset.swift"; sourceTree = ""; }; - 212097E109C37ABABE45EE6C1CB93074 /* OIMMessageElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMMessageElem.m; path = OpenIMSDK/Model/OIMMessageElem.m; sourceTree = ""; }; - 2131626EC27604913E004ACB3CBC060A /* mapTo+RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "mapTo+RxCocoa.swift"; path = "Source/RxCocoa/mapTo+RxCocoa.swift"; sourceTree = ""; }; - 21951539AF1191589E265213E6B8D31C /* utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = utils.c; path = src/utils/utils.c; sourceTree = ""; }; - 21AA7EE52A3DAD218EF3EAB7703979AB /* RecursiveLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveLock.swift; path = Platform/RecursiveLock.swift; sourceTree = ""; }; - 21D531AE86A9BDBC117C3BE120B6E7E5 /* YBIBImageData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageData.m; path = YBImageBrowser/Image/YBIBImageData.m; sourceTree = ""; }; - 21DB69F87DC93861A4FEB14C6B788C7E /* PreviewVideoViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewVideoViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PreviewVideoViewCell.swift; sourceTree = ""; }; - 22363CA9E38F55410E8D888D617320B3 /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; }; - 22391A5817E334075345521FE1174BED /* ConnectableObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConnectableObservableType.swift; path = RxSwift/ConnectableObservableType.swift; sourceTree = ""; }; - 223F157AF2FE64BA22ABDDB993DFB6C2 /* anim_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; name = anim_decode.c; path = src/demux/anim_decode.c; sourceTree = ""; }; - 227FD73B3C6B806CCAF3C3B7499D12D0 /* MapError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MapError.swift; path = Sources/MapError.swift; sourceTree = ""; }; + 2065605DBD09C2F4550B75E77F9B778F /* AlbumView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumView.swift; path = Sources/HXPHPicker/Picker/View/AlbumView.swift; sourceTree = ""; }; + 208AFEA3CC5DD10476B29311F5E8F3EE /* TimePeriodCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodCollection.swift; path = Sources/SwiftDate/TimePeriod/Groups/TimePeriodCollection.swift; sourceTree = ""; }; + 208FBB9974C322A514DDB9CF05374E5E /* RxTableViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift; sourceTree = ""; }; + 20A89EBE355145B0F7D0CE86923C8686 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/Debug/IQKeyboardManager+Debug.swift"; sourceTree = ""; }; + 20DB58A377C820207F348BB5D7594CF2 /* YBImageBrowser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBImageBrowser-prefix.pch"; sourceTree = ""; }; + 213FF271A8C1EF4AFA83B16C94A7CD5E /* PrecompAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrecompAsset.swift; path = Sources/Private/Model/Assets/PrecompAsset.swift; sourceTree = ""; }; + 21539E4C77DD56C4E08819C238A77241 /* OIMFriendApplication.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMFriendApplication.h; path = OpenIMSDK/Model/OIMFriendApplication.h; sourceTree = ""; }; + 216E0D99EA559AD8E578C6AC676FFCBE /* DDASLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDASLLogger.h; sourceTree = ""; }; + 217E00EF02173DE5AA3D621B58AD5EA7 /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; + 21AAE531B9EF7DB927D524FE45E5365C /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQInvocation.swift; sourceTree = ""; }; + 21EB64BE1424FD67CBFD60640E5AC630 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = ""; }; + 21EF815B6C34644A35D6B92C9DF3DCEF /* OIMGroupApplicationInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMGroupApplicationInfo.h; path = OpenIMSDK/Model/OIMGroupApplicationInfo.h; sourceTree = ""; }; + 224EE27EF8A4CB6DE2A2994B3B4BA865 /* RxTextStorageDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTextStorageDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift; sourceTree = ""; }; + 227239C8727C62367AF6079F3FDB9577 /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/Networking/SessionDataTask.swift; sourceTree = ""; }; + 227F5DE5D7F361C0109ECD6AD1FED581 /* NopDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NopDisposable.swift; path = RxSwift/Disposables/NopDisposable.swift; sourceTree = ""; }; + 2287FFA8D1569A799C7199DEACC54A2A /* KeychainWrapperSubscript.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainWrapperSubscript.swift; path = SwiftKeychainWrapper/KeychainWrapperSubscript.swift; sourceTree = ""; }; + 228A5909B168591161C6BFFF967721A4 /* HXPHPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HXPHPicker.swift; path = Sources/HXPHPicker/Core/HXPHPicker.swift; sourceTree = ""; }; 2290594F0DEEB3EE8019DFED02EF0E1B /* Pods-QuickLocation-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-QuickLocation-resources.sh"; sourceTree = ""; }; - 22AAC60424375432315859887EDB95E9 /* repeatWithBehavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = repeatWithBehavior.swift; path = Source/RxSwift/repeatWithBehavior.swift; sourceTree = ""; }; - 22ADD96CD00B989B7126ACA192406A98 /* NSObject+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx.swift"; path = "RxCocoa/Foundation/NSObject+Rx.swift"; sourceTree = ""; }; - 22B0FE7857A3947DF75F30B19BA05CBD /* SynchronizedDisposeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedDisposeType.swift; path = RxSwift/Concurrency/SynchronizedDisposeType.swift; sourceTree = ""; }; - 22C59EA8496E114A956C1B762EB73B8A /* EpoxyModelStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyModelStorage.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelStorage.swift; sourceTree = ""; }; - 22EDB49EB35BB9C086E37ED89EAB052B /* YYImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = YYImage.modulemap; sourceTree = ""; }; - 22F84748D6A7D4D5AC3266CA17FFD1F5 /* AMapUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapUtility.h; path = AMapFoundationKit.framework/Headers/AMapUtility.h; sourceTree = ""; }; - 2324FAB2BCAFFED67E845E6DD9A96D61 /* YBIBImageLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageLayout.h; path = YBImageBrowser/Image/YBIBImageLayout.h; sourceTree = ""; }; - 2355152919250DBBD5FD5A9E31F11464 /* PreCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/PreCompositionLayer.swift; sourceTree = ""; }; - 23627BEB011259D12B07A6DA62769D64 /* AlbumTitleViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumTitleViewConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/AlbumTitleViewConfiguration.swift; sourceTree = ""; }; - 238EA027049C445CADBCD723D15850C9 /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; - 23B24E42476EAEB449B42C368E04FEBE /* Debounce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debounce.swift; path = RxSwift/Observables/Debounce.swift; sourceTree = ""; }; - 23BCD448D0D59E19E3DE5D1D80437EB0 /* Maybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Maybe.swift; path = RxSwift/Traits/PrimitiveSequence/Maybe.swift; sourceTree = ""; }; - 23DADD0A8F4BC93DE27A54C99980A205 /* Plugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Plugin.swift; path = Sources/Moya/Plugin.swift; sourceTree = ""; }; - 23F9CE86B59F74334043FA327497FA4A /* EditorToolOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorToolOptions.swift; path = Sources/HXPHPicker/Editor/Model/EditorToolOptions.swift; sourceTree = ""; }; - 244512DFD644D3AA431853F542C2A616 /* Masonry.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Masonry.modulemap; sourceTree = ""; }; - 2445A2BFA4F1F72112D3E9B9BD1ADDE7 /* KeyframeGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyframeGroup.swift; path = Sources/Private/Model/Keyframes/KeyframeGroup.swift; sourceTree = ""; }; - 247A39E873C37C701BDF648B2D50C5EC /* vp8_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8_dec.h; path = src/dec/vp8_dec.h; sourceTree = ""; }; - 249F08F366A61A80DBF012BB16BE82AC /* SetBehaviorsProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SetBehaviorsProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/SetBehaviorsProviding.swift; sourceTree = ""; }; - 24CF5FE8FABF08B21AE1B4496D4FD182 /* TraitCollectionProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TraitCollectionProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/TraitCollectionProviding.swift; sourceTree = ""; }; - 24EB183736E04F3300474C4908E03098 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = ""; }; - 25285C5E626F30148926D9D6A6202443 /* PickerTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerTypes.swift; path = Sources/HXPHPicker/Picker/Model/PickerTypes.swift; sourceTree = ""; }; - 25786E146AAE30629FEFFFCD7FEF1C8A /* YBIBVideoCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoCell.h; path = Video/YBIBVideoCell.h; sourceTree = ""; }; - 25A588051320603C531C4D4D035FD277 /* PhotoPreviewVideoView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewVideoView.swift; path = Sources/HXPHPicker/Picker/View/PhotoPreviewVideoView.swift; sourceTree = ""; }; - 25C66D833F862144506D82243BC20CBC /* Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Driver.swift; path = RxCocoa/Traits/Driver/Driver.swift; sourceTree = ""; }; - 25DE73A1EA9F7ECF0E1D5E9F2897CA07 /* PhotoPreviewViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewViewController.swift; path = Sources/HXPHPicker/Picker/Controller/PhotoPreviewViewController.swift; sourceTree = ""; }; - 260BDB88A25661D414D0FB98126D2229 /* SDCycleScrollView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDCycleScrollView.release.xcconfig; sourceTree = ""; }; - 261B8297554CE4FE7CB1170B6603261D /* AMap3DMap.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMap3DMap.debug.xcconfig; sourceTree = ""; }; - 263CA5BE93AE4924560E96B53D32776E /* AMapGeoFenceRegionObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceRegionObj.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceRegionObj.h; sourceTree = ""; }; - 2641DD06874437DB484DC2A833AACEDB /* Masonry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-umbrella.h"; sourceTree = ""; }; - 2678FFFB05AC0FF8ABF1EAE1D51210C5 /* Masonry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.debug.xcconfig; sourceTree = ""; }; - 2696085F8CF53F46F0711050C0A10E07 /* upsampling.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling.c; path = src/dsp/upsampling.c; sourceTree = ""; }; - 26C805396EBE9A3676570EE86EDD4E85 /* Moya-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Moya-umbrella.h"; sourceTree = ""; }; - 26E7CB556326C9077DF63BEEB7B2E40E /* YBIBImageCell+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBImageCell+Internal.h"; path = "YBImageBrowser/Image/YBIBImageCell+Internal.h"; sourceTree = ""; }; - 26EE58E648FD163D54D97151C69A93BA /* TransformType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformType.swift; path = Sources/TransformType.swift; sourceTree = ""; }; - 270430691446D7F2AA48696D223B3B36 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; }; - 2707006BD41B87DF0C15833B3D8A4253 /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; - 27137F8A01D16088D332E2DBCE90D361 /* UIPickerView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIPickerView+Rx.swift"; path = "RxCocoa/iOS/UIPickerView+Rx.swift"; sourceTree = ""; }; - 2721B15D69AAC9EDC592D8D91DE15A30 /* lossless_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_neon.c; path = src/dsp/lossless_neon.c; sourceTree = ""; }; - 2724F7D5E46D3CB108BBF81954389D65 /* YBIBCollectionViewLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBCollectionViewLayout.m; path = YBImageBrowser/Base/YBIBCollectionViewLayout.m; sourceTree = ""; }; - 277586195FD85080AED690938D317998 /* RootAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RootAnimationLayer.swift; path = Sources/Private/RootAnimationLayer.swift; sourceTree = ""; }; - 27759D268EA3293ACE7824423B8230A2 /* CurrentFileNameHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentFileNameHelper.swift; path = Sources/CocoaLumberjackSwift/CurrentFileNameHelper.swift; sourceTree = ""; }; - 2778EBCEEC14C4833D44342D5C11AD81 /* RxSearchControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxSearchControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift; sourceTree = ""; }; - 27B83BBA92B0D0F145F36F867F55084C /* SolidCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/SolidCompositionLayer.swift; sourceTree = ""; }; - 27C4EB466DCF1D0C56B87A1492131A17 /* OIMSimpleRequstInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSimpleRequstInfo.h; path = OpenIMSDK/Model/OIMSimpleRequstInfo.h; sourceTree = ""; }; - 27CFFE88BED57C1FE5BBB3011F19DBF3 /* EditorStickerTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerTextView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerTextView.swift; sourceTree = ""; }; - 27D9BE3D24E10967CFE1D61E94371D91 /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; }; - 27E55D0F439ED92B9740583CD3291EC1 /* UICollectionViewLayout+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewLayout+MJRefresh.h"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.h"; sourceTree = ""; }; - 27F811FC60FE7171767A66AB5F507804 /* alpha_processing_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_sse2.c; path = src/dsp/alpha_processing_sse2.c; sourceTree = ""; }; - 28028200CF5288C6709AF472B07A3E73 /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; - 28504FCCD451928D39B76F37745A0206 /* DDLoggerNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLoggerNames.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLoggerNames.h; sourceTree = ""; }; - 285EA2B479EE8B45155F473C9D20EED7 /* CALayer+addAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+addAnimation.swift"; path = "Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift"; sourceTree = ""; }; - 2860F4098A792B41F328813B0B8C63DE /* ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist"; sourceTree = ""; }; - 28D97C1931912760D88F8AEDC0081E77 /* YBIBAuxiliaryViewHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBAuxiliaryViewHandler.m; path = YBImageBrowser/AuxiliaryView/YBIBAuxiliaryViewHandler.m; sourceTree = ""; }; - 28DA339E778E6063A58C7ED7DB35705C /* ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist"; sourceTree = ""; }; - 28E32AB0F1A47BA5A7A51B18B2079AB8 /* YBIBAnimatedTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBAnimatedTransition.m; path = YBImageBrowser/Base/YBIBAnimatedTransition.m; sourceTree = ""; }; - 291F235F7EF38C4F833B4A14B6C4236F /* EpoxyModelArrayBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyModelArrayBuilder.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelArrayBuilder.swift; sourceTree = ""; }; - 294F945132A96401D8BB6AF1EE6285E1 /* RxCocoa-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxCocoa-dummy.m"; sourceTree = ""; }; - 29501204E1391BC59AB7AF310834F053 /* AnimatorNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatorNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Protocols/AnimatorNode.swift; sourceTree = ""; }; - 29C1F94D4278A162A285C44FE14DB4F6 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; - 29D2B882480874F42D53FD7B196E67AC /* Editor+PhotoTools.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Editor+PhotoTools.swift"; path = "Sources/HXPHPicker/Editor/Util/Editor+PhotoTools.swift"; sourceTree = ""; }; - 29EC4402BC322A41C3AC32102A7AD878 /* RxDataSources.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxDataSources.modulemap; sourceTree = ""; }; - 29F796D6472EA6FC82B038C97ECF4785 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 2A33292F139F4D03763C451D174D6627 /* NotificationCenter+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NotificationCenter+Rx.swift"; path = "RxCocoa/Foundation/NotificationCenter+Rx.swift"; sourceTree = ""; }; - 2A4FC0DEB2145AEA826609AB69FE096B /* Skip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Skip.swift; path = RxSwift/Observables/Skip.swift; sourceTree = ""; }; - 2A687625895E5B7535DC57C8C7718D36 /* Picker+UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+UIViewController.swift"; path = "Sources/HXPHPicker/Picker/Extension/Picker+UIViewController.swift"; sourceTree = ""; }; - 2A744FA8696B38DECAED24C7D0829A18 /* PathOutputNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PathOutputNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift; sourceTree = ""; }; - 2A75DA3631019C8E174047B15B8ABDEF /* ImageLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageLayer.swift; path = Sources/Private/CoreAnimation/Layers/ImageLayer.swift; sourceTree = ""; }; - 2AC04D79457374349B95B0B732D07A31 /* KeypathSearchable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeypathSearchable.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift; sourceTree = ""; }; - 2ACC2D2851101B7855064121BBFD5564 /* BehaviorSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorSubject.swift; path = RxSwift/Subjects/BehaviorSubject.swift; sourceTree = ""; }; - 2ADF97EACA948B2C7006B53AEB1FEF8E /* UIButton+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Rx.swift"; path = "RxCocoa/iOS/UIButton+Rx.swift"; sourceTree = ""; }; + 22A0CAC012E06B7CA4430A19FA504471 /* AMap.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = AMap.bundle; path = MAMapKit.framework/AMap.bundle; sourceTree = ""; }; + 22CFA28D77DC2B2A44D160C4087AC3B7 /* Bundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bundle.swift; path = Sources/Private/Model/Extensions/Bundle.swift; sourceTree = ""; }; + 22E6C6B2624EC3C4CEDDDE1149B64473 /* ViewDifferentiatorProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewDifferentiatorProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ViewDifferentiatorProviding.swift; sourceTree = ""; }; + 22F35B08FE80D620A4E10C301B3181A6 /* MAShape.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAShape.h; path = MAMapKit.framework/Headers/MAShape.h; sourceTree = ""; }; + 231246BF2A5913AF9CF769DF47AB7806 /* curry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = curry.swift; path = Source/Tools/curry.swift; sourceTree = ""; }; + 233D806C4FEE853AA2DB63AC1F837D4D /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; }; + 238363420B18595D15E9E84CC3740DB3 /* DDLogMessageFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDLogMessageFormat.swift; path = Sources/CocoaLumberjackSwift/DDLogMessageFormat.swift; sourceTree = ""; }; + 2393D8EC822992E154A2A546A2FA3CE3 /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = SDWebImage/Private/SDAssociatedObject.h; sourceTree = ""; }; + 23A4440664319022C5085EDC5E2C702D /* YBIBCollectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBCollectionView.m; path = YBImageBrowser/Base/YBIBCollectionView.m; sourceTree = ""; }; + 23C5E159C4F71F067E60F69603441421 /* YBIBPhotoAlbumManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBPhotoAlbumManager.m; path = YBImageBrowser/Helper/YBIBPhotoAlbumManager.m; sourceTree = ""; }; + 240416C6EF8122892481AB95ECC4CDC3 /* SGTorch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGTorch.h; path = SGQRCode/Torch/SGTorch.h; sourceTree = ""; }; + 2406927749C80BFC19A506CF84AFFDC5 /* WebPSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebPSerializer.swift; path = Sources/WebPSerializer.swift; sourceTree = ""; }; + 240B3E67D8767688B64A581BA5949261 /* backward_references_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = backward_references_enc.c; path = src/enc/backward_references_enc.c; sourceTree = ""; }; + 242D474AEFBC6106539C37EB2710B154 /* Merge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Merge.swift; path = RxSwift/Observables/Merge.swift; sourceTree = ""; }; + 245230D60496C156AA01F11BF0F5812A /* SwiftDate-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftDate-umbrella.h"; sourceTree = ""; }; + 2487C96BE7C199B1C2B818C214ACE2A1 /* VideoEditResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditResult.swift; path = Sources/HXPHPicker/Editor/VideoEditResult.swift; sourceTree = ""; }; + 248B06013737714E8413242881D097C9 /* ShapeTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeTransform.swift; path = Sources/Private/Model/ShapeItems/ShapeTransform.swift; sourceTree = ""; }; + 24A12D238EE2AFDFD11A5BF137C767AA /* Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Driver.swift; path = RxCocoa/Traits/Driver/Driver.swift; sourceTree = ""; }; + 24B4AEB38B8B095C56E839AEF1BCB6FB /* BaseCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseCompositionLayer.swift; path = Sources/Private/CoreAnimation/Layers/BaseCompositionLayer.swift; sourceTree = ""; }; + 24D2D7C0AE2ECF3BEFD1763BBEF314B8 /* bit_reader_inl_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_reader_inl_utils.h; path = src/utils/bit_reader_inl_utils.h; sourceTree = ""; }; + 24FC9168D387E6F56C45A5E422ED6057 /* cpu.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cpu.c; path = src/dsp/cpu.c; sourceTree = ""; }; + 2506741F9F50189A7DD54A4F356E1C0B /* TextAnimatorNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAnimatorNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift; sourceTree = ""; }; + 2529DAC0D802063EA30E377C208C274D /* GTCommonSDK-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "GTCommonSDK-xcframeworks.sh"; sourceTree = ""; }; + 254F53AF9EDB6FBC8B5E1899B6E3CFB4 /* SGPermissionCamera.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGPermissionCamera.h; path = SGQRCode/Permission/SGPermissionCamera.h; sourceTree = ""; }; + 258C47A66291BF50B67D2D63D3373BE1 /* SwiftKeychainWrapper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftKeychainWrapper-prefix.pch"; sourceTree = ""; }; + 259B8BB391902490BE6CB75B27D954D4 /* MAOfflineMapViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineMapViewController.h; path = MAMapKit.framework/Headers/MAOfflineMapViewController.h; sourceTree = ""; }; + 25B0AFDE6F490BD489C84DE9AB7B623F /* OIMManager+Connection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Connection.m"; path = "OpenIMSDK/Interface/OIMManager+Connection.m"; sourceTree = ""; }; + 263E0995DC5FBCEC84D7B86C4F00115D /* Task.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Task.swift; path = Sources/Moya/Task.swift; sourceTree = ""; }; + 2679C547D6616063B0D9FC6E558EBA1C /* Picker+PhotoAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+PhotoAsset.swift"; path = "Sources/HXPHPicker/Picker/Extension/Picker+PhotoAsset.swift"; sourceTree = ""; }; + 26A79D15CF7E56AB1249C65515C36E4B /* YYImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYImage.m; path = YYImage/YYImage.m; sourceTree = ""; }; + 26B386FB80AD4FBC1955D5C4F245DDFD /* Kingfisher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Kingfisher-dummy.m"; sourceTree = ""; }; + 26B525A296261CA1942BF343253871F1 /* OIMManager+Message.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Message.h"; path = "OpenIMSDK/Interface/OIMManager+Message.h"; sourceTree = ""; }; + 26D99830BD02D5E12946A9993FD9B433 /* Completable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Completable.swift; path = RxSwift/Traits/PrimitiveSequence/Completable.swift; sourceTree = ""; }; + 26E12650ACBFCF10361CA3BE989938D9 /* OIMAtElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMAtElem.m; path = OpenIMSDK/Model/OIMAtElem.m; sourceTree = ""; }; + 272F9E6947D5DFE5145771307773F9E9 /* YBIBImageScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageScrollView.h; path = YBImageBrowser/Image/YBIBImageScrollView.h; sourceTree = ""; }; + 2753B5C58645A09D290E600E3BC9DA7F /* MAHeatMapVectorOverlayRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorOverlayRender.h; path = MAMapKit.framework/Headers/MAHeatMapVectorOverlayRender.h; sourceTree = ""; }; + 275C9C22C6613394FF56DA407F7A0984 /* MACustomBuildingOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomBuildingOverlay.h; path = MAMapKit.framework/Headers/MACustomBuildingOverlay.h; sourceTree = ""; }; + 277192D403211FA10EEAC643C35570AD /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; + 2779AC1EA6378DFB55EC94CB2A921AEF /* UISearchBar+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISearchBar+Rx.swift"; path = "RxCocoa/iOS/UISearchBar+Rx.swift"; sourceTree = ""; }; + 278619F364243280567A6DC8713CF090 /* MACircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACircle.h; path = MAMapKit.framework/Headers/MACircle.h; sourceTree = ""; }; + 27A43B258704D27FDBD3E9FF44A51207 /* yuv_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_sse41.c; path = src/dsp/yuv_sse41.c; sourceTree = ""; }; + 27AAEC8EEACDCAE86C246C18B522A943 /* SGPermissionCamera.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGPermissionCamera.m; path = SGQRCode/Permission/SGPermissionCamera.m; sourceTree = ""; }; + 27CB1D6F3889BFEDD86BF0A7F0C55EFB /* AssetManager+AVAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+AVAsset.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+AVAsset.swift"; sourceTree = ""; }; + 27DD104205E990BA251147A8755AEFCE /* Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+arity.swift"; path = "RxSwift/Observables/Zip+arity.swift"; sourceTree = ""; }; + 27E062A58C2152A34289C191C1908410 /* HXPHPicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HXPHPicker-umbrella.h"; sourceTree = ""; }; + 27F320304CFB5F16992D6434DE4E65B7 /* DDTTYLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDTTYLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDTTYLogger.h; sourceTree = ""; }; + 27FBE8F4C6D9F3D5E81384DF8CE8969F /* AMapSearchError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchError.h; path = AMapSearchKit.framework/Headers/AMapSearchError.h; sourceTree = ""; }; + 284AC5B340F1DF3743C872CE02EE8A20 /* IQKeyboardToolbarManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbarManager.release.xcconfig; sourceTree = ""; }; + 2854C80D6EF7D3B7B82AD9C4ADC0FD64 /* IQKeyboardCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardCore.debug.xcconfig; sourceTree = ""; }; + 28853C4F1F0BE8910FC831A9312857F8 /* EmptyViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EmptyViewConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/EmptyViewConfiguration.swift; sourceTree = ""; }; + 289FCFE3D6DDD65B8122E6130BA5048A /* DDASLLogCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogCapture.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDASLLogCapture.h; sourceTree = ""; }; + 28B010A2146BDC61697A76663AF9803C /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQTitleBarButtonItem.swift; sourceTree = ""; }; + 28BE02DA192D2F9168548C9F3E648036 /* SGScanCodeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGScanCodeDelegate.h; path = SGQRCode/QRCode/SGScanCodeDelegate.h; sourceTree = ""; }; + 28BE9C4C4FD97745A47638677BEF26C1 /* YBIBLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBLoadingView.m; path = YBImageBrowser/AuxiliaryView/YBIBLoadingView.m; sourceTree = ""; }; + 28EC7434D8007BC07802B27B8D6FB1A8 /* UIView+Parent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Parent.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIView+Parent.swift"; sourceTree = ""; }; + 2911308F19328BC6C09F92A3C6D1A163 /* ObjectMapper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ObjectMapper.release.xcconfig; sourceTree = ""; }; + 294772D1AC56A8AFBAFF4406865E8529 /* OIMFaceElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMFaceElem.m; path = OpenIMSDK/Model/OIMFaceElem.m; sourceTree = ""; }; + 2960647473749EA8AEED48FB2BE7C79A /* GradientStroke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientStroke.swift; path = Sources/Private/Model/ShapeItems/GradientStroke.swift; sourceTree = ""; }; + 2994D8B96A2BDBA3F7FDC7E3829339CC /* Date+Compare.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Compare.swift"; path = "Sources/SwiftDate/Date/Date+Compare.swift"; sourceTree = ""; }; + 29B8A8985447E4E7823241EE353B3F48 /* SGQRCode.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SGQRCode.debug.xcconfig; sourceTree = ""; }; + 29DD63712BF5682DFBF582E1766154EC /* IQKeyboardNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardNotification-umbrella.h"; sourceTree = ""; }; + 2A02BEE14F8A62CDC43C3565AB0E2869 /* SGQRCode-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SGQRCode-dummy.m"; sourceTree = ""; }; + 2A0F966CE73BB9FB937DE773DED561BE /* YYImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYImage.debug.xcconfig; sourceTree = ""; }; + 2A115E0B3FC9B65949A9542E9CDB7BDF /* YYImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYImage-umbrella.h"; sourceTree = ""; }; + 2A6CF4F32816B8F9BEFB21EC84C87C8A /* AMapLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationManager.h; path = AMapLocationKit.framework/Headers/AMapLocationManager.h; sourceTree = ""; }; + 2A9598965144DCAD57DA3C09E9D9DF65 /* SDImageFramePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFramePool.h; path = SDWebImage/Private/SDImageFramePool.h; sourceTree = ""; }; + 2AA67AD732C1703650AD66B7B46B75A3 /* ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist"; sourceTree = ""; }; + 2ABDDD2F889B1861B14D2F1D61F16BA8 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; + 2AD1A0DA62E38A2270776CBC8949C349 /* Source.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Source.swift; path = Sources/General/ImageSource/Source.swift; sourceTree = ""; }; + 2B0CEDCECE8F6A5932A40B0EE599F5F8 /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = ""; }; 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJExtension; path = MJExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2BD48D1D20B426CEAFFB0CD0AA66CB69 /* AMapLocationKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationKit.h; path = AMapLocationKit.framework/Headers/AMapLocationKit.h; sourceTree = ""; }; - 2C298B2A388307DD5D979FAA27BF366A /* UIView+ParentObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ParentObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIView+ParentObjc.swift"; sourceTree = ""; }; - 2C321D034B37C49F688AD559C13A62F5 /* IQKeyboardNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardNotification-prefix.pch"; sourceTree = ""; }; - 2C37D8F8F5792C0FBB119534DD5A5838 /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; - 2C6A602E36472CC2DC2327225B04D330 /* DiffableSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffableSection.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/DiffableSection.swift; sourceTree = ""; }; - 2C6E0BBACCC2ABD7E1753510C4D994B7 /* RxPickerViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift; sourceTree = ""; }; - 2C7BD137F313AB234AA39F9298734472 /* GYSDK-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "GYSDK-xcframeworks.sh"; sourceTree = ""; }; - 2CA207F1841764F2BDB2505E309C0D98 /* MASUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASUtilities.h; path = Masonry/MASUtilities.h; sourceTree = ""; }; - 2D48CB3120F622B1DC4E9B3AF51D0A7F /* UISlider+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISlider+Rx.swift"; path = "RxCocoa/iOS/UISlider+Rx.swift"; sourceTree = ""; }; - 2D6F3E223EDDA7BB3F9C466B9984E79C /* InfiniteSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteSequence.swift; path = Platform/DataStructures/InfiniteSequence.swift; sourceTree = ""; }; - 2D7480D6550C594F75C2C72FDFB92E91 /* IQKeyboardConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardConstants.swift; path = IQKeyboardCore/Classes/Constants/IQKeyboardConstants.swift; sourceTree = ""; }; - 2D85C068680B34A7EEFF48F7268DD710 /* Glyph.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Glyph.swift; path = Sources/Private/Model/Text/Glyph.swift; sourceTree = ""; }; - 2D91FA48911FBC42CEFF73EEF6FBC3B2 /* SwiftDate-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftDate-Info.plist"; sourceTree = ""; }; - 2DABBD081B5C4DA063F4DB121147E586 /* StrokeAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StrokeAnimation.swift; path = Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift; sourceTree = ""; }; - 2DB115166094A8D48E376C2F668892BE /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQTextView/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 2DB8DC9169D71A0D31807029AF82F168 /* UITextView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextView+Rx.swift"; path = "RxCocoa/iOS/UITextView+Rx.swift"; sourceTree = ""; }; - 2DBF29A5234553C463B88860B18F477F /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/Features/RequestInterceptor.swift; sourceTree = ""; }; - 2DD95C19D05E5141AD09F08757FE2699 /* quant_levels_dec_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant_levels_dec_utils.h; path = src/utils/quant_levels_dec_utils.h; sourceTree = ""; }; - 2DE4D17C8433A44E4298C409C0D34F11 /* Buffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Buffer.swift; path = RxSwift/Observables/Buffer.swift; sourceTree = ""; }; - 2E084374ABF7B54C419FC9A80C6AA656 /* SGPermissionCamera.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGPermissionCamera.h; path = SGQRCode/Permission/SGPermissionCamera.h; sourceTree = ""; }; - 2E18007B9B2D27C7163D2478DCA136F4 /* YBIBDefaultWebImageMediator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBDefaultWebImageMediator.m; path = YBImageBrowser/WebImageMediator/YBIBDefaultWebImageMediator.m; sourceTree = ""; }; - 2E2DA381D265C5A84E4274615BD3C37F /* RxSwiftExt-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwiftExt-prefix.pch"; sourceTree = ""; }; - 2E60DA40527A43576DB5B9BD90EF96BE /* ViewType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewType.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/ViewType.swift; sourceTree = ""; }; - 2EC2049C823875676B5A5A9A7CF7CCCA /* Collection+Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+Diff.swift"; path = "Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/Collection+Diff.swift"; sourceTree = ""; }; - 2ED6C4C1077B91FD00A25B4E57EA4C75 /* PhotoCroppingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoCroppingConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/PhotoCroppingConfiguration.swift; sourceTree = ""; }; - 2F1EE42D6061CE2501B5E1A22B55D08D /* lossless_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_sse41.c; path = src/dsp/lossless_sse41.c; sourceTree = ""; }; - 2F523AE274FF96B23B5AE0188D46239B /* MJRefreshConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConfig.m; path = MJRefresh/MJRefreshConfig.m; sourceTree = ""; }; - 2F5E0EBA29568C35DF864FAF6CBA4DD6 /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; - 2F630C8FCE62218432F68271134AD87F /* SerialDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDispatchQueueScheduler.swift; path = RxSwift/Schedulers/SerialDispatchQueueScheduler.swift; sourceTree = ""; }; - 2F65A5161CB9361350076FDB1F6C69D5 /* PhotoAsset+Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoAsset+Request.swift"; path = "Sources/HXPHPicker/Picker/Model/PhotoAsset+Request.swift"; sourceTree = ""; }; - 2F6640032ED9681A09BA524C5F3EECC6 /* CGImage+WebP.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CGImage+WebP.m"; path = "Sources/KingfisherWebP-ObjC/CGImage+WebP.m"; sourceTree = ""; }; - 2F762DB144E20011CDA76B1FFE2F011D /* SGQRCode-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SGQRCode-Info.plist"; sourceTree = ""; }; - 2FA02D6C631F6C170C069CABD449F276 /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; }; - 2FB634BBC441E1A91C3B4D8D27BFF7BD /* ssim.c */ = {isa = PBXFileReference; includeInIndex = 1; name = ssim.c; path = src/dsp/ssim.c; sourceTree = ""; }; - 2FC7510690F9C1195797935F509A996D /* LottieAnimationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationView.swift; path = Sources/Public/Animation/LottieAnimationView.swift; sourceTree = ""; }; + 2B6298FFD801309A5E645D5E694C08F2 /* _RXDelegateProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXDelegateProxy.m; path = RxCocoa/Runtime/_RXDelegateProxy.m; sourceTree = ""; }; + 2BD8508309633303254E1D0D64DC2DF9 /* MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtension.h; path = MJExtension/MJExtension.h; sourceTree = ""; }; + 2BDC74945EC8BC04AD74B2B1BE2EB72B /* Shape.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Shape.swift; path = Sources/Private/Model/ShapeItems/Shape.swift; sourceTree = ""; }; + 2BEE403D1E699A5CEDB82263240DDC64 /* EditorToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorToolView.swift; path = Sources/HXPHPicker/Editor/View/EditorToolView.swift; sourceTree = ""; }; + 2C03FDAE6EE74E76EBA2288AEB50A1EA /* Observable+Alias.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Alias.swift"; path = "Source/Tools/Observable+Alias.swift"; sourceTree = ""; }; + 2CB958102E3830756508C5AE67B201BE /* OIMDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMDefine.h; path = OpenIMSDK/Utils/OIMDefine.h; sourceTree = ""; }; + 2CC755210EE7CF0DEB9FD2F3DBDE1873 /* FrameUnsubscribe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameUnsubscribe.swift; path = Source/FrameUnsubscribe.swift; sourceTree = ""; }; + 2CDE862D7BF7002E18408BEC71411A53 /* RxDataSources-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxDataSources-dummy.m"; sourceTree = ""; }; + 2CE9DBE9C323FFDFD3869DAF5A13CFF9 /* StartWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StartWith.swift; path = RxSwift/Observables/StartWith.swift; sourceTree = ""; }; + 2CF7AFA4E3D64A4BA4D1B1B57212C941 /* enc_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_mips_dsp_r2.c; path = src/dsp/enc_mips_dsp_r2.c; sourceTree = ""; }; + 2D5A618038C5542D4884F2ADAEB84259 /* SkipWhile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipWhile.swift; path = RxSwift/Observables/SkipWhile.swift; sourceTree = ""; }; + 2D5B12012F6233B5D8F331C901A7869C /* AnimationConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationConfiguration.swift; path = Sources/RxDataSources/AnimationConfiguration.swift; sourceTree = ""; }; + 2D5E0EC291F4571118276A49CD3A886D /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Sources/Moya/MultipartFormData.swift; sourceTree = ""; }; + 2D7D7A97A7089AEDDA405B472981349F /* MJFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJFoundation.h; path = MJExtension/MJFoundation.h; sourceTree = ""; }; + 2D95A95805D665C143687E0AF8794CAC /* YBIBScreenRotationHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBScreenRotationHandler.h; path = YBImageBrowser/Base/YBIBScreenRotationHandler.h; sourceTree = ""; }; + 2DD7CB878C4C7757197E5D41FE20B750 /* libwebp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = libwebp.release.xcconfig; sourceTree = ""; }; + 2DFB101CA626227DCFB08754A265952E /* ItemPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ItemPath.swift; path = Sources/Differentiator/ItemPath.swift; sourceTree = ""; }; + 2E17D7BAA52A7884B7F49C0C06778BF7 /* YBIBDataProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBDataProtocol.h; path = YBImageBrowser/Protocol/YBIBDataProtocol.h; sourceTree = ""; }; + 2E2140737C3E93134F8FDB59AB754F8E /* RectNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RectNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/RectNode.swift; sourceTree = ""; }; + 2E4D9D32F645C0F77FE2B2594942BD5A /* Core+UIColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIColor.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIColor.swift"; sourceTree = ""; }; + 2E82BF932F82DDF213C52EC34483CFB3 /* UISegmentedControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISegmentedControl+Rx.swift"; path = "RxCocoa/iOS/UISegmentedControl+Rx.swift"; sourceTree = ""; }; + 2EBE4B32A33B53EEC1777BCF15861D1E /* SwiftyUserDefaults-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyUserDefaults-dummy.m"; sourceTree = ""; }; + 2ECDE574BC8FD1E32B99075B12144063 /* not.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = not.swift; path = Source/RxSwift/not.swift; sourceTree = ""; }; + 2EF18E46D35DFA8EA15926BDEF825725 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = ""; }; + 2EFECD383B69C269278B54B4C8841167 /* AMapSearchKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapSearchKit.framework; sourceTree = ""; }; + 2F2C087558ADE98640782FDA625F779D /* Differentiator-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Differentiator-umbrella.h"; sourceTree = ""; }; + 2F5FB553F91C4DAAD1EEBAB85DD87170 /* IQKeyboardNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardNotification-dummy.m"; sourceTree = ""; }; + 2F63AC006B2627EE41E02B5552FA3FDC /* ObservableConvertibleType+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+SharedSequence.swift"; path = "RxCocoa/Traits/SharedSequence/ObservableConvertibleType+SharedSequence.swift"; sourceTree = ""; }; + 2F9DB03149250DF330B6D48C0E61D964 /* CallbackContextEpoxyModeled.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallbackContextEpoxyModeled.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/CallbackContextEpoxyModeled.swift; sourceTree = ""; }; + 2FA9E6EBAB2A16F4CB0E52505E665B07 /* Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Create.swift; path = RxSwift/Observables/Create.swift; sourceTree = ""; }; 2FC7D0890A2DCAA85AFA92E9014FBB85 /* KingfisherWebP */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = KingfisherWebP; path = KingfisherWebP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 301C9D054BD58240F500E205344E5E3C /* SwiftKeychainWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SwiftKeychainWrapper.h; path = SwiftKeychainWrapper/SwiftKeychainWrapper.h; sourceTree = ""; }; - 302F5D48423E1570B6919F852C173899 /* ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; sourceTree = ""; }; - 3031EF8A675A49AB3D585F9F2A638A62 /* OIMGroupMemberInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMGroupMemberInfo.m; path = OpenIMSDK/Model/OIMGroupMemberInfo.m; sourceTree = ""; }; - 3046218CAE71E06503DEE56FE37F2119 /* MarqueeLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MarqueeLabel-dummy.m"; sourceTree = ""; }; - 3081092804875B0A054049768857C958 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; }; - 309006C332A939D8335F54EDC23F48A6 /* RxCocoa-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxCocoa-umbrella.h"; sourceTree = ""; }; - 3099CDBCAB77ED24E860C30FE72F7E92 /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/Features/ServerTrustEvaluation.swift; sourceTree = ""; }; - 30A2150EA6103CF85276C506513884F1 /* GYSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GYSDK.release.xcconfig; sourceTree = ""; }; - 30AA8EAC742EC556E68712FF9D8F74D3 /* Using.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Using.swift; path = RxSwift/Observables/Using.swift; sourceTree = ""; }; - 30ABC2B69AA7FDD403BBA66A483AA50B /* DashPattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DashPattern.swift; path = Sources/Private/Model/Objects/DashPattern.swift; sourceTree = ""; }; - 30BB18DD5E18152570847746CA122253 /* HXPHPicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HXPHPicker-dummy.m"; sourceTree = ""; }; - 30BCDBE3285AAC94EE2E1B2D935E8DCD /* OIMManager+Friend.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Friend.m"; path = "OpenIMSDK/Interface/OIMManager+Friend.m"; sourceTree = ""; }; - 30D98D1A29F5DC6D072CD99F8B268931 /* YBIBContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBContainerView.h; path = YBImageBrowser/Base/YBIBContainerView.h; sourceTree = ""; }; - 30EAD96D230B4FD77745E03EFA29E7D5 /* KingfisherWebP-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KingfisherWebP-prefix.pch"; sourceTree = ""; }; - 30EC231840F6732A56ACD926EEC9A53D /* UITextField+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextField+Rx.swift"; path = "RxCocoa/iOS/UITextField+Rx.swift"; sourceTree = ""; }; - 3189E630103A74A0218C59894B1E16A8 /* BaseConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseConfiguration.swift; path = Sources/HXPHPicker/Core/Config/BaseConfiguration.swift; sourceTree = ""; }; - 3189E69539A5AFB420AA7887844BAD4F /* ViewDifferentiatorProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewDifferentiatorProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ViewDifferentiatorProviding.swift; sourceTree = ""; }; - 31C067D5AA45DE8118D9B9C303CDF1C5 /* PointValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PointValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/PointValueProvider.swift; sourceTree = ""; }; - 31C67847AA0011E797287DE347F30612 /* YBIBImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageCache.h; path = YBImageBrowser/Image/YBIBImageCache.h; sourceTree = ""; }; - 31E78FA0D84F351E9823CE5E2062575E /* toSortedArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = toSortedArray.swift; path = Source/RxSwift/toSortedArray.swift; sourceTree = ""; }; - 32262A01385AA280BD0BCCC5C70A0237 /* YYImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYImage.h; path = YYImage/YYImage.h; sourceTree = ""; }; - 322A857D4ABEF831EE7D2DB55B47440C /* AMapSearchVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchVersion.h; path = AMapSearchKit.framework/Headers/AMapSearchVersion.h; sourceTree = ""; }; - 326281CC28396A68E89160486CB6C8EF /* bufferWithTrigger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = bufferWithTrigger.swift; path = Source/RxSwift/bufferWithTrigger.swift; sourceTree = ""; }; - 32FEFE432FBEFC662E16C8BDE4DA9817 /* SDGraphicsImageRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDGraphicsImageRenderer.h; path = SDWebImage/Core/SDGraphicsImageRenderer.h; sourceTree = ""; }; - 3315C38767856D68C851A907CE93A414 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; - 3341A7FC89EF4648B74656D78B47F6E2 /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = RxSwift/Observables/Zip.swift; sourceTree = ""; }; - 3359376B97F44EDE8A748CC630F6B455 /* ImageProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessor.swift; path = Sources/Image/ImageProcessor.swift; sourceTree = ""; }; - 3363755C6A144FD04CC1F79B7234245C /* unwrap+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "unwrap+SharedSequence.swift"; path = "Source/RxCocoa/unwrap+SharedSequence.swift"; sourceTree = ""; }; - 3371BF35BC76F7D9FEB483B31F4A8082 /* UIGestureRecognizer+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIGestureRecognizer+Rx.swift"; path = "RxCocoa/iOS/UIGestureRecognizer+Rx.swift"; sourceTree = ""; }; - 3372B0460260FFF150042F100790D87B /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; - 33DAC44C2ADAB17A1E18E59C3363BA98 /* PathElement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PathElement.swift; path = Sources/Private/Utility/Primitives/PathElement.swift; sourceTree = ""; }; - 33E53F7946D28A4A15CE8D0B0AF85E2C /* DDDispatchQueueLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDDispatchQueueLogFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDDispatchQueueLogFormatter.h; sourceTree = ""; }; - 33ED4054AFA9102DE2DFF8413FBF3767 /* Core+CALayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+CALayer.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+CALayer.swift"; sourceTree = ""; }; - 340B01518155A1C6DF9490C3B5583041 /* Trim.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Trim.swift; path = Sources/Private/Model/ShapeItems/Trim.swift; sourceTree = ""; }; - 342385D452E45822DD7ECD2003E65B56 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Sources/Debugging.swift; sourceTree = ""; }; - 3439F956E2BEC0F71B3AC96FAE151B38 /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; }; - 344CE732EC91350D560B03E4C413A059 /* SwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftUIView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/SwiftUIView.swift; sourceTree = ""; }; - 345CFF4C2DE56AFB5B6B340E3433F8F5 /* Optional+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Optional+Extensions.swift"; path = "Sources/Differentiator/Optional+Extensions.swift"; sourceTree = ""; }; - 346BF7588267CADD317DE1D52AD7134D /* EditorStickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerView.swift; sourceTree = ""; }; - 34B31BD1C43D0EDD718C40AF38280324 /* OIMLocationElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMLocationElem.m; path = OpenIMSDK/Model/OIMLocationElem.m; sourceTree = ""; }; - 34C85D236A09B50BBAE08B7FB20C1142 /* IQScrollViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQScrollViewConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQScrollViewConfiguration.swift; sourceTree = ""; }; - 350390ECD2B359290A8084CB7DDCEF31 /* NodePropertyMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NodePropertyMap.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift; sourceTree = ""; }; - 35375E5ADCE5DCF4EBBD0DD0B80966E4 /* SGPermissionPhoto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGPermissionPhoto.h; path = SGQRCode/Permission/SGPermissionPhoto.h; sourceTree = ""; }; - 355C2A9EBE4A9B292FB4090BC017E1E8 /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = ""; }; - 356B08F72A46EBDA220703321CE1814C /* UIRefreshControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIRefreshControl+Rx.swift"; path = "RxCocoa/iOS/UIRefreshControl+Rx.swift"; sourceTree = ""; }; - 35940441E1F35674BCA1B41D098A3ED3 /* quant_levels_dec_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_levels_dec_utils.c; path = src/utils/quant_levels_dec_utils.c; sourceTree = ""; }; - 35ADFB58A321E02490B12260E9A6DC63 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; - 35B2495153788DD6EBBE5BF78859D1A2 /* Archive+Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Helpers.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+Helpers.swift"; sourceTree = ""; }; - 35D0028F706E6F2DD1BBA09C9DD8E405 /* AnyEpoxyModelProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyEpoxyModelProperty.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Internal/AnyEpoxyModelProperty.swift; sourceTree = ""; }; - 35E8846F57F00F87FD95FD897542C502 /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASAdditions.h"; path = "Masonry/NSArray+MASAdditions.h"; sourceTree = ""; }; - 36018657F97ACBD41941D6142C29AED7 /* SwiftyUserDefaults-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftyUserDefaults-Info.plist"; sourceTree = ""; }; - 36203684131055DB499F60D39CE2F9CA /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = ""; }; - 36609CDD2BC9353598397AC9D8CB42AA /* sharpyuv_dsp.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_dsp.c; path = sharpyuv/sharpyuv_dsp.c; sourceTree = ""; }; - 366510E521C9064578CB795725F0EF55 /* YYAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYAnimatedImageView.m; path = YYImage/YYAnimatedImageView.m; sourceTree = ""; }; - 3672AB437DFA2D3DB0B46CE5363FFC21 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Sources/Private/Model/ShapeItems/Fill.swift; sourceTree = ""; }; - 36CF504BACFF929BC4D8BACB9C800E9F /* MainThreadAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainThreadAnimationLayer.swift; path = Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift; sourceTree = ""; }; - 36E652E445F8CECC432D298A13A78229 /* OIMGCDMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMGCDMulticastDelegate.m; path = OpenIMSDK/Callbacker/OIMGCDMulticastDelegate.m; sourceTree = ""; }; - 36F5425BDC1B6DC62C60458D483CDA77 /* CachedImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedImageProvider.swift; path = Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift; sourceTree = ""; }; - 3702CCA67B68183FAC858084EE553452 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 37195C83073D00C327F9B6C8E49E6096 /* RxPickerViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxPickerViewDataSourceProxy.swift; sourceTree = ""; }; - 371C690B36365A3FC898E515449C2217 /* SwiftDate.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftDate.release.xcconfig; sourceTree = ""; }; - 3735BF48C165F1FF3722190A8D76CEAB /* ViewProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ViewProviding.swift; sourceTree = ""; }; + 2FC8DE6CE3CC887158E8DC8331DFDB39 /* ObservableType+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+Extensions.swift"; path = "RxSwift/ObservableType+Extensions.swift"; sourceTree = ""; }; + 2FD132A96BC176A0BD3C8AB88344FAC5 /* ignoreErrors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ignoreErrors.swift; path = Source/RxSwift/ignoreErrors.swift; sourceTree = ""; }; + 2FD7EEBE586F6B453B12A099DEC36BF7 /* SGQRCodeLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGQRCodeLog.m; path = SGQRCode/SGQRCodeLog.m; sourceTree = ""; }; + 2FE035ECA7BD09E6EF69413B6CB12ACB /* StrokeNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StrokeNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift; sourceTree = ""; }; + 2FE743B0489172B9D8AFCA90B825A0C6 /* SingleAssignmentDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAssignmentDisposable.swift; path = RxSwift/Disposables/SingleAssignmentDisposable.swift; sourceTree = ""; }; + 2FFC90957F5D67E24F21D774D7AA39C2 /* Documentation.docc */ = {isa = PBXFileReference; includeInIndex = 1; name = Documentation.docc; path = Sources/Documentation.docc; sourceTree = ""; }; + 2FFD6FB05FFB92E52545C479B4BFCF7C /* SDCycleScrollView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDCycleScrollView.debug.xcconfig; sourceTree = ""; }; + 306934A83C5EFAA04DB020939FC11FD0 /* MAOverlayPathRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlayPathRenderer.h; path = MAMapKit.framework/Headers/MAOverlayPathRenderer.h; sourceTree = ""; }; + 30BD85190BA6619C60F905C8C99773A9 /* SDImageFrame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFrame.m; path = SDWebImage/Core/SDImageFrame.m; sourceTree = ""; }; + 30CCA1EB71E8556A17A5DB3D0EF72902 /* AsMaybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsMaybe.swift; path = RxSwift/Observables/AsMaybe.swift; sourceTree = ""; }; + 30D9D5041CB0B73D214303A39FE8ADAB /* FramePingReq.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FramePingReq.swift; path = Source/FramePingReq.swift; sourceTree = ""; }; + 31095D3E6FF883967D59CFEE2575C384 /* dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dsp.h; path = src/dsp/dsp.h; sourceTree = ""; }; + 310A752EAADFC795CC0A69824946DC22 /* CacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheSerializer.swift; path = Sources/Cache/CacheSerializer.swift; sourceTree = ""; }; + 312BAA0DB116CC685C2FA70D3B0E3B3C /* AnimatorNodeDebugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatorNodeDebugging.swift; path = Sources/Private/Utility/Debugging/AnimatorNodeDebugging.swift; sourceTree = ""; }; + 31391E8B55977047175BC0FA348319BA /* quant_levels_dec_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_levels_dec_utils.c; path = src/utils/quant_levels_dec_utils.c; sourceTree = ""; }; + 316B60AE42434791E20A83CEC6A09383 /* CocoaLumberjack-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaLumberjack-umbrella.h"; sourceTree = ""; }; + 319D35D1874FB0C1965D7307152759D2 /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; + 31A4A6EECE7B81CAF7FDDD1978EE7249 /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; + 31B8537D70EEE6E1BCF41B5917CDDC13 /* OIMManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMManager.m; path = OpenIMSDK/Interface/OIMManager.m; sourceTree = ""; }; + 31C046C0CC4193B0A2A553D90BB92F7F /* CGColor+RGB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGColor+RGB.swift"; path = "Sources/Private/Utility/Extensions/CGColor+RGB.swift"; sourceTree = ""; }; + 31F9C25C7025E7B07803B95DD09EB95F /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = ""; }; + 322E4310DE8158FCAE06CF313CB5D549 /* MqttConnectProperties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttConnectProperties.swift; path = Source/MqttConnectProperties.swift; sourceTree = ""; }; + 323F33641A0EBD63B2A4092E2A400D62 /* MAMultiColoredPolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiColoredPolylineRenderer.h; path = MAMapKit.framework/Headers/MAMultiColoredPolylineRenderer.h; sourceTree = ""; }; + 325E7C92D696471576D9735C82973FFD /* Region.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Region.swift; path = Sources/SwiftDate/DateInRegion/Region.swift; sourceTree = ""; }; + 328666E1FE05310AC0A5D3D31B1E08E1 /* RxCollectionViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift; sourceTree = ""; }; + 32898454CB13100812704D30105A0D45 /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = ""; }; + 328DDF3378405C46687D785CD170BBE8 /* MAArc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAArc.h; path = MAMapKit.framework/Headers/MAArc.h; sourceTree = ""; }; + 32D89F076C7EB0BF35FCEAEE0CADD189 /* YBImageBrowserDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBImageBrowserDataSource.h; path = YBImageBrowser/Protocol/YBImageBrowserDataSource.h; sourceTree = ""; }; + 33019DB9E82E9B11DA3C4C5B100E7390 /* TransformOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformOperators.swift; path = Sources/TransformOperators.swift; sourceTree = ""; }; + 3333FB4826A1B7E11CD9D053ECCD0B71 /* StyledView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StyledView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/StyledView.swift; sourceTree = ""; }; + 33480720859FB80422F18693CD711143 /* PhotoPickerViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPickerViewCell.swift; sourceTree = ""; }; + 335078A0CED7AAD0119A29BAF4421016 /* bit_writer_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = bit_writer_utils.c; path = src/utils/bit_writer_utils.c; sourceTree = ""; }; + 3353B782D463177D03DE0F388380825C /* FrameConnAck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameConnAck.swift; path = Source/FrameConnAck.swift; sourceTree = ""; }; + 335488488BA5012989636955BBCB8F05 /* SDCycleScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDCycleScrollView.m; path = SDCycleScrollView/Lib/SDCycleScrollView/SDCycleScrollView.m; sourceTree = ""; }; + 3393DA8B4838F6ACE600A7599089C08E /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; + 3399796C15028FAAB7F429D5AEE0D825 /* PhotoAsset+URL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoAsset+URL.swift"; path = "Sources/HXPHPicker/Picker/Model/PhotoAsset+URL.swift"; sourceTree = ""; }; + 33A714CAD18FD98B82C934FCD845F5A4 /* OIMManager+Friend.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Friend.m"; path = "OpenIMSDK/Interface/OIMManager+Friend.m"; sourceTree = ""; }; + 33B78742EEB2B26C6433B045E4C130E7 /* SDCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDCollectionViewCell.m; path = SDCycleScrollView/Lib/SDCycleScrollView/SDCollectionViewCell.m; sourceTree = ""; }; + 33F3EFA42D26365BF6A13F0710A58980 /* alpha_processing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing.c; path = src/dsp/alpha_processing.c; sourceTree = ""; }; + 33F42C258DDB2E31077B9DE98F72F3B4 /* lossless_enc_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_sse41.c; path = src/dsp/lossless_enc_sse41.c; sourceTree = ""; }; + 3419BDD44F6743C4AC46FA04B2350FAF /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; + 3419D2C8671536D5EF4FAFBBECE79EE0 /* muxedit.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxedit.c; path = src/mux/muxedit.c; sourceTree = ""; }; + 341EC2C4A70106EB67DB74B8C4440046 /* MqttCocoaAsyncSocket-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MqttCocoaAsyncSocket-prefix.pch"; sourceTree = ""; }; + 34853EDCAAF81DB2B6643A784E02B2A3 /* DelaySubscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelaySubscription.swift; path = RxSwift/Observables/DelaySubscription.swift; sourceTree = ""; }; + 3486E48D7F4ECF13A667832E910CCC60 /* OIMFaceElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMFaceElem.h; path = OpenIMSDK/Model/OIMFaceElem.h; sourceTree = ""; }; + 34C7C1820ED663FD4EDC639404C09D55 /* EditorChartletView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorChartletView.swift; path = Sources/HXPHPicker/Editor/View/EditorChartletView.swift; sourceTree = ""; }; + 34D94319150FBBDA5DBC6B33CE2A3F42 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardManagerSwift/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 34FD978A375670AC41396D2A0C366330 /* AnyObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyObserver.swift; path = RxSwift/AnyObserver.swift; sourceTree = ""; }; + 35095A89B3C9A2BF1B30A1C61D469BA6 /* SDImageFramePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFramePool.m; path = SDWebImage/Private/SDImageFramePool.m; sourceTree = ""; }; + 35129EBA9B173E46DF2F6DFB335E986C /* SGScanCode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGScanCode.m; path = SGQRCode/QRCode/SGScanCode.m; sourceTree = ""; }; + 3526170ED597B2F4DF1BF8DD590D5391 /* TAAnimatedDotView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TAAnimatedDotView.h; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAAnimatedDotView.h; sourceTree = ""; }; + 3538D5D07C7C1EEA48969493103616C5 /* LegacyGradientFillRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyGradientFillRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift; sourceTree = ""; }; + 3541337BA25DD5A16B674D1ACD6A6DF1 /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RxSwift/Observables/Optional.swift; sourceTree = ""; }; + 3543AC184D347C03D551F192980FD16A /* IQKeyboardReturnManager+UITextFieldDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnManager+UITextFieldDelegate.swift"; path = "IQKeyboardReturnManager/Classes/Delegates/IQKeyboardReturnManager+UITextFieldDelegate.swift"; sourceTree = ""; }; + 35B8F8C3682AB04ABE8141037BDAA739 /* MBProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.release.xcconfig; sourceTree = ""; }; + 35BDD75E89E9E5DD5191A7DBE6C746BE /* PickerCamerViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerCamerViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PickerCamerViewCell.swift; sourceTree = ""; }; + 35D06090901658DC9635ABC2BCBFACEE /* CombineLatest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombineLatest.swift; path = RxSwift/Observables/CombineLatest.swift; sourceTree = ""; }; + 35E53EB427E531962F3F3AAD0D6BE4FD /* SetContentProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SetContentProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/SetContentProviding.swift; sourceTree = ""; }; + 360CE21F80E46FEB77949658AF62C5B3 /* RxSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-prefix.pch"; sourceTree = ""; }; + 36150B9A092CEA623ED750B37621BEA4 /* DDDispatchQueueLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDDispatchQueueLogFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDDispatchQueueLogFormatter.h; sourceTree = ""; }; + 362C318AC23BC309320600A5C2B2254E /* CGImage+WebP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CGImage+WebP.h"; path = "Sources/KingfisherWebP-ObjC/include/CGImage+WebP.h"; sourceTree = ""; }; + 362ECCD2645D282758EFF964B9C6ABA9 /* TailRecursiveSink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TailRecursiveSink.swift; path = RxSwift/Observers/TailRecursiveSink.swift; sourceTree = ""; }; + 365A6611E9FB12240170EE665EF48284 /* AnyEncodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyEncodable.swift; path = Sources/Moya/AnyEncodable.swift; sourceTree = ""; }; + 365D92843D9B2C992588045959368206 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = ""; }; + 3676B48C2F610BF5A549DEC0E3237259 /* Differentiator-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Differentiator-dummy.m"; sourceTree = ""; }; + 36867FE9CEB2E51AD35828908BE554DB /* backward_references_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = backward_references_enc.h; path = src/enc/backward_references_enc.h; sourceTree = ""; }; + 368D0A9669610E6142622A7EBCBB1BEE /* OIMMessageElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMMessageElem.h; path = OpenIMSDK/Model/OIMMessageElem.h; sourceTree = ""; }; + 36D13BB9A77FB2ADAE7FB83B1A7DCFB4 /* Zip+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+Collection.swift"; path = "RxSwift/Observables/Zip+Collection.swift"; sourceTree = ""; }; + 36DB87A7158E945BAE661177931BBB5B /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; + 3712A5FE54262D3B1DDB054BC62A6930 /* Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Fill.swift; path = Sources/Private/Model/ShapeItems/Fill.swift; sourceTree = ""; }; + 3712FB2901390F9631B6F18D49E764B1 /* Picker+UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+UIImageView.swift"; path = "Sources/HXPHPicker/Picker/Extension/Picker+UIImageView.swift"; sourceTree = ""; }; + 37248EC9C1A753806439CCF5D8B1413C /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; 3756A9BBE41ABEE8DCBF5BCA6972C4DA /* Moya */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Moya; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 37835981F866845A76C1CFB6F3D10614 /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+Reading.swift"; sourceTree = ""; }; - 37C4D8AE7174BB9A4533DE44B3F11254 /* ScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItem.swift; path = RxSwift/Schedulers/Internal/ScheduledItem.swift; sourceTree = ""; }; - 380BDB77A870AFA5A57428CCF35356E9 /* GradientValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift; sourceTree = ""; }; - 384D8E218EB66167C5F83EADB6F99879 /* DDLogMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLogMacros.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLogMacros.h; sourceTree = ""; }; - 386033983F3A03681989750FE5B69703 /* SDImageFramePool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageFramePool.m; path = SDWebImage/Private/SDImageFramePool.m; sourceTree = ""; }; - 38A2C4F42AAAE1661BF9821201515A70 /* SDWebImageDownloaderResponseModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderResponseModifier.m; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.m; sourceTree = ""; }; - 38CA5BA20DA63D05E0C03D744AEB70E8 /* SectionedViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionedViewDataSourceType.swift; path = RxCocoa/Common/SectionedViewDataSourceType.swift; sourceTree = ""; }; - 38E3AB8EB5CD905844D10DD03E94B4F6 /* MASLayoutConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASLayoutConstraint.h; path = Masonry/MASLayoutConstraint.h; sourceTree = ""; }; - 38EEDE814FAD2740F02699B6E4BB0001 /* CustomPathAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomPathAnimation.swift; path = Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift; sourceTree = ""; }; - 38F94877CEF3C20AB5A2BC7EECB7F447 /* DDLogMessageFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDLogMessageFormat.swift; path = Sources/CocoaLumberjackSwift/DDLogMessageFormat.swift; sourceTree = ""; }; - 3901977A60BEA76544CA1152762821E1 /* SolidLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidLayerModel.swift; path = Sources/Private/Model/Layers/SolidLayerModel.swift; sourceTree = ""; }; - 390E8573959FA2A886CC5567D09B09F6 /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentDispatchQueueScheduler.swift; path = RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; }; - 3934EA26369C7ED8AC99BDB4DF11A6E2 /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; - 393D78DFF9D51838A2054D5FB8A454BE /* Date+Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Create.swift"; path = "Sources/SwiftDate/Date/Date+Create.swift"; sourceTree = ""; }; - 3959E727B7E6D436C58E8154A7EBB3E0 /* Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Defaults.swift; path = Sources/Defaults.swift; sourceTree = ""; }; - 39DCD7EF97C0B500D13C50F86E116058 /* dec_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_msa.c; path = src/dsp/dec_msa.c; sourceTree = ""; }; - 39FED66228C9465702293375314C454F /* OIMCustomElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMCustomElem.h; path = OpenIMSDK/Model/OIMCustomElem.h; sourceTree = ""; }; - 3A27D042C38FA3F775A3165A4F4623C4 /* DropShadowAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropShadowAnimation.swift; path = Sources/Private/CoreAnimation/Animations/DropShadowAnimation.swift; sourceTree = ""; }; - 3A5135277BD48056B6627693C1C65126 /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/Private/EmbeddedLibraries/ZipFoundation/Archive.swift; sourceTree = ""; }; - 3A5605DFB255E8E50316E27C2AC51298 /* SwiftyUserDefaults-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyUserDefaults-dummy.m"; sourceTree = ""; }; - 3AC0F3EEDD22751DD4EF0DA40250DC07 /* AMapLocation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapLocation.release.xcconfig; sourceTree = ""; }; - 3AC4B8F50BFE837EACFBE3C44B0388D1 /* PhotoEditorBrushColorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorBrushColorView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorBrushColorView.swift; sourceTree = ""; }; - 3ACE2A2FCD1CB79DDBD88BFB0583269E /* KFImageRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageRenderer.swift; path = Sources/SwiftUI/KFImageRenderer.swift; sourceTree = ""; }; - 3AED09C9DE5A12779617977F55045734 /* MJRefreshStateTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m; sourceTree = ""; }; - 3B194370CEEC58191F152D61913EAED0 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackFooter.m; path = MJRefresh/Base/MJRefreshBackFooter.m; sourceTree = ""; }; - 3B1FD911A7C53A5154FB7647CA6EFC70 /* Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sequence.swift; path = RxSwift/Observables/Sequence.swift; sourceTree = ""; }; - 3B254E7B7EBE8EE0B7A1BB6FEDE08103 /* WebPProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebPProcessor.swift; path = Sources/WebPProcessor.swift; sourceTree = ""; }; - 3B2B2FCF8F9A4061EFB2C1C80198FBF1 /* TAAbstractDotView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TAAbstractDotView.m; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAAbstractDotView.m; sourceTree = ""; }; + 375820DF14407C740784DFFB937AD921 /* vp8l_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8l_dec.c; path = src/dec/vp8l_dec.c; sourceTree = ""; }; + 376332B7BB7B62B68F0FF48144147A45 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 3771450394E341C8109007FD4453F6EF /* AssetManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssetManager.swift; path = Sources/HXPHPicker/Core/Util/AssetManager.swift; sourceTree = ""; }; + 377728AD2BBD2505210A33E908AD69AC /* Generate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generate.swift; path = RxSwift/Observables/Generate.swift; sourceTree = ""; }; + 378372F498F665F3FFD43D996BC74AD0 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = ""; }; + 378A71B05B4B6E35FEFA06A102708B90 /* YYImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YYImage-dummy.m"; sourceTree = ""; }; + 378E212C4FE47178EBCE8F98BAB1B1D8 /* DDOSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDOSLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDOSLogger.h; sourceTree = ""; }; + 378F46BB261081002D3462443D321F6E /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyJSON.modulemap; sourceTree = ""; }; + 3799191460893486B21344FB44085E5A /* Popover.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Popover.debug.xcconfig; sourceTree = ""; }; + 37A76EC7E372C59E5A53839B2D5EC932 /* bit_reader_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_reader_utils.h; path = src/utils/bit_reader_utils.h; sourceTree = ""; }; + 37CD281275F1894727824699298D37B6 /* RxCocoa-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxCocoa-Info.plist"; sourceTree = ""; }; + 37D11A371CBE51534B1035243FE652C8 /* YBIBAuxiliaryViewHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBAuxiliaryViewHandler.m; path = YBImageBrowser/AuxiliaryView/YBIBAuxiliaryViewHandler.m; sourceTree = ""; }; + 3806C8AFF5367B3A08DDDCB3A210C4BC /* URLNavigator-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "URLNavigator-Info.plist"; sourceTree = ""; }; + 380D1F16AEB20A423847C1057BF1B74D /* AnimationTextProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationTextProvider.swift; path = Sources/Public/TextProvider/AnimationTextProvider.swift; sourceTree = ""; }; + 380D33A71478D6A19360DAADF01641A2 /* OIMConversationInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMConversationInfo.m; path = OpenIMSDK/Model/OIMConversationInfo.m; sourceTree = ""; }; + 380EC785DA86FF910564CC64B9092D82 /* ObjectMapper.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ObjectMapper.modulemap; sourceTree = ""; }; + 3841269555E945A5F05B6B656275018E /* Amb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Amb.swift; path = RxSwift/Observables/Amb.swift; sourceTree = ""; }; + 385A5B781881CF05DA0885623E2F500E /* libwebp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "libwebp-dummy.m"; sourceTree = ""; }; + 387A1E82C97FC165F805C0A885316D08 /* OIMManager+Conversation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Conversation.h"; path = "OpenIMSDK/Interface/OIMManager+Conversation.h"; sourceTree = ""; }; + 38BE8955A2F8AA0C1F76F5B85C29BB9B /* RxTableViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDataSourcePrefetchingProxy.swift; sourceTree = ""; }; + 38D2052BC73AF3D0CEB469FDC3D6C867 /* TADotView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TADotView.m; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TADotView.m; sourceTree = ""; }; + 38F764035CA9E883524E86CEB7BF6FF7 /* toSortedArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = toSortedArray.swift; path = Source/RxSwift/toSortedArray.swift; sourceTree = ""; }; + 39139551D157EE1146CC15CFBEAFC945 /* ValueProviderStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueProviderStore.swift; path = Sources/Private/CoreAnimation/ValueProviderStore.swift; sourceTree = ""; }; + 392F545C5B87288F9B4FD5543E7ED91D /* URLRequest+Encoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Encoding.swift"; path = "Sources/Moya/URLRequest+Encoding.swift"; sourceTree = ""; }; + 394D94A4C79F8E0EE3A26D9204D6DC3F /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; + 3959D145FD2E8F762316E0F5B249252D /* GraphicsContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GraphicsContext.swift; path = Sources/Image/GraphicsContext.swift; sourceTree = ""; }; + 397F90741022772F19158E4EB60AC6C5 /* SendMessageCallbackProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SendMessageCallbackProxy.h; path = OpenIMSDK/CallbackProxy/SendMessageCallbackProxy.h; sourceTree = ""; }; + 39B0A6CA0BD6828A3BDAC8FDCB446598 /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; + 39F33078ADCADC74D51595069A4B4F27 /* IQKeyboardCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardCore-umbrella.h"; sourceTree = ""; }; + 39F3484843917C882FECBCCF7474F59F /* IQKeyboardToolbar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbar-umbrella.h"; sourceTree = ""; }; + 3A044FDCB634FCC2E2D4514A1D478D6E /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; + 3A0488FD76DB5F611BF73447B6E0CF0E /* CompatibilityTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompatibilityTracker.swift; path = Sources/Private/CoreAnimation/CompatibilityTracker.swift; sourceTree = ""; }; + 3A24B45B99DABB55846B35CC63B19366 /* Date+Math.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Math.swift"; path = "Sources/SwiftDate/Date/Date+Math.swift"; sourceTree = ""; }; + 3A36550B8B2CBBB52150C46F5E083568 /* YBIBCollectionViewLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBCollectionViewLayout.m; path = YBImageBrowser/Base/YBIBCollectionViewLayout.m; sourceTree = ""; }; + 3A5972F6E217179DC514AFBE7916229A /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = ""; }; + 3A5E30809D431C734969D9A65F160C87 /* filters_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_utils.c; path = src/utils/filters_utils.c; sourceTree = ""; }; + 3A67D1CB2FA1AD2A0DE5714D70C5376D /* IQKeyboardToolbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardToolbar-Info.plist"; sourceTree = ""; }; + 3AC8482EF4E24B214C0C7B9E49611EE5 /* NSObject+MJProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJProperty.h"; path = "MJExtension/NSObject+MJProperty.h"; sourceTree = ""; }; + 3ACFB997E95585F568A813FF855B02A2 /* Entry+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+Serialization.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Entry+Serialization.swift"; sourceTree = ""; }; + 3AD14D0F84352B2B3E7EEA1BB4CAA493 /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; + 3AE15C20A74AE7258AF74FD1B506F1AA /* KeyframeInterpolator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyframeInterpolator.swift; path = Sources/Private/Utility/Interpolatable/KeyframeInterpolator.swift; sourceTree = ""; }; + 3B1A2F0EC904214E6975457AE08127B3 /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = ""; }; + 3B3B4B9F481B229260E949B4E0BFD04D /* MAAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotation.h; path = MAMapKit.framework/Headers/MAAnnotation.h; sourceTree = ""; }; 3B3FEC1DFBF7036B761FB944F2B9F817 /* Pods-QuickLocation-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-QuickLocation-dummy.m"; sourceTree = ""; }; - 3B5D16C00716DB3F723ABA16AD0C73F6 /* MAOfflineItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItem.h; path = MAMapKit.framework/Headers/MAOfflineItem.h; sourceTree = ""; }; - 3BBC561B29ED22D84456A56B25487B1A /* Kingfisher.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.release.xcconfig; sourceTree = ""; }; - 3BE0270AFD495A209831013F68A46EAA /* OptionalType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OptionalType.swift; path = Sources/OptionalType.swift; sourceTree = ""; }; - 3BED3A0B0A00EA2FA5675D1740AB8EBD /* InvocableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableType.swift; path = RxSwift/Schedulers/Internal/InvocableType.swift; sourceTree = ""; }; - 3C0C914066C13DD1C227163AE269AE08 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 3C0CF0C62F67692E4295190EE91E610F /* UploadFileCallbackProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UploadFileCallbackProxy.h; path = OpenIMSDK/CallbackProxy/UploadFileCallbackProxy.h; sourceTree = ""; }; - 3C0DBF3930B6D9B41590221ED28D0ABD /* ImageDownloader+LivePhoto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageDownloader+LivePhoto.swift"; path = "Sources/Networking/ImageDownloader+LivePhoto.swift"; sourceTree = ""; }; - 3C25F3519ADD38A0760C364F56755FA4 /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJKeyValue.h"; path = "MJExtension/NSObject+MJKeyValue.h"; sourceTree = ""; }; - 3C30CD98BDFEAFA1281C881CB316CD95 /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextStorage+Rx.swift"; path = "RxCocoa/iOS/NSTextStorage+Rx.swift"; sourceTree = ""; }; - 3C47797CF83C8275EB25B782A05E26C0 /* syntax_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = syntax_enc.c; path = src/enc/syntax_enc.c; sourceTree = ""; }; - 3C4791B8C2A49D72E41FF9376B1ABA2C /* KingfisherWebP.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = KingfisherWebP.modulemap; sourceTree = ""; }; - 3C6988BCE07821C58551CEC828E29088 /* FillNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FillNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift; sourceTree = ""; }; - 3CC8BB6787C7BA9EA081B229A0B0AB07 /* Bag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bag.swift; path = Platform/DataStructures/Bag.swift; sourceTree = ""; }; - 3D01AEE6FEB31BADC6ABBB964F92BFA6 /* ToJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToJSON.swift; path = Sources/ToJSON.swift; sourceTree = ""; }; - 3D0DB1CEB05AC969288DEAFEB20F65F0 /* Differentiator.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Differentiator.release.xcconfig; sourceTree = ""; }; - 3D3A69BB5C302A89D95825EEBCFE3F76 /* Moya.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Moya.debug.xcconfig; sourceTree = ""; }; - 3D5CC7490D18D68B024892F6BD86A7B6 /* nwise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = nwise.swift; path = Source/RxSwift/nwise.swift; sourceTree = ""; }; - 3D9CC311816278CAC539F9972CCF9467 /* SwiftSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftSupport.swift; path = RxSwift/SwiftSupport/SwiftSupport.swift; sourceTree = ""; }; - 3DA7C83A39038CA118B3CB12DA8280B4 /* PublishSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublishSubject.swift; path = RxSwift/Subjects/PublishSubject.swift; sourceTree = ""; }; - 3DC2D83167741CC204B2EC3E267BCF7E /* AppearanceStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppearanceStyle.swift; path = Sources/HXPHPicker/Core/Model/AppearanceStyle.swift; sourceTree = ""; }; - 3DE1CB79BCC5D870E0A0F8AE2B4A1461 /* sharpyuv_cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv_cpu.h; path = sharpyuv/sharpyuv_cpu.h; sourceTree = ""; }; - 3E17ECF721B2913CE636674C037654C6 /* DDMultiFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDMultiFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDMultiFormatter.m; sourceTree = ""; }; - 3E47F234141A9130E3D666C798E5329B /* OIMCallbacker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMCallbacker.m; path = OpenIMSDK/Callbacker/OIMCallbacker.m; sourceTree = ""; }; - 3E4BEB998FE521E695D73DC9BF2ECA90 /* DataIDProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataIDProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DataIDProviding.swift; sourceTree = ""; }; - 3F4975EE0DFB3B2FF2DC34F0C3FAD60E /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = ""; }; - 3F73DD0E591F2EA915EE953972CB39F5 /* OpenIMSDKCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OpenIMSDKCore.debug.xcconfig; sourceTree = ""; }; - 3F8733BFF5C1688EA0DA6F27C8A71E52 /* KVORepresentable+Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KVORepresentable+Swift.swift"; path = "RxCocoa/Foundation/KVORepresentable+Swift.swift"; sourceTree = ""; }; - 3F90E27702A8F171A62776D2F844F0A4 /* EditorChartlet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorChartlet.swift; path = Sources/HXPHPicker/Editor/Model/EditorChartlet.swift; sourceTree = ""; }; - 3F91D8352B875D35E55568B695E6F368 /* RecursiveScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveScheduler.swift; path = RxSwift/Schedulers/RecursiveScheduler.swift; sourceTree = ""; }; - 3F982914D28918E5ED7DABBD318AB9CC /* PhotoEditorCropToolModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorCropToolModel.swift; path = Sources/HXPHPicker/Editor/Model/PhotoEditorCropToolModel.swift; sourceTree = ""; }; - 3FEC6077DC3237CA46D42ABFDC14A37E /* Defaults+Subscripts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+Subscripts.swift"; path = "Sources/Defaults+Subscripts.swift"; sourceTree = ""; }; - 3FFB55FA3F07B1F7CDEF3C5945A8B171 /* AnimatedImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImageView.swift; path = Sources/Views/AnimatedImageView.swift; sourceTree = ""; }; - 402415CFF7312E2B08AADA79DA73A4E1 /* Editor+UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Editor+UIImageView.swift"; path = "Sources/HXPHPicker/Editor/Util/Editor+UIImageView.swift"; sourceTree = ""; }; - 40AA1A10068FA06843F9B866D1548021 /* Queue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Queue.swift; path = Platform/DataStructures/Queue.swift; sourceTree = ""; }; - 40AB53811E5578E0AAB0E63564BD139D /* RxCocoa-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxCocoa-Info.plist"; sourceTree = ""; }; - 40B3777A774404758AB6FCB677DE0654 /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; - 40F6DF23FC61D59800559E8381531BC1 /* PublishRelay+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PublishRelay+Signal.swift"; path = "RxCocoa/Traits/Signal/PublishRelay+Signal.swift"; sourceTree = ""; }; - 40FD25DC1921B871C7F788075D01E4BD /* RxSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxSwift-dummy.m"; sourceTree = ""; }; - 4123C8FEAA4B2A821DFD684756000B82 /* vp8l_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8l_enc.c; path = src/enc/vp8l_enc.c; sourceTree = ""; }; - 41249D28A0A1532043F7069D1A9E3DEB /* UINavigationController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UINavigationController+Rx.swift"; path = "RxCocoa/iOS/UINavigationController+Rx.swift"; sourceTree = ""; }; - 4132CF769C59E4962F728199F4EFDCCB /* Bundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bundle.swift; path = Sources/Private/Model/Extensions/Bundle.swift; sourceTree = ""; }; - 414EA10691F9648F2A822D776442BEE8 /* retryWithBehavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = retryWithBehavior.swift; path = Source/RxSwift/retryWithBehavior.swift; sourceTree = ""; }; - 4163D447B518D4BC6E0EE0EAC80736EC /* RxDataSources-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxDataSources-umbrella.h"; sourceTree = ""; }; + 3B4B5E7AE632CD74BA805CCB171392AF /* OpenIMSDK-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OpenIMSDK-prefix.pch"; sourceTree = ""; }; + 3B59F6D2D32C4EEE3ECDEF9CE11B50D4 /* huffman_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = huffman_utils.h; path = src/utils/huffman_utils.h; sourceTree = ""; }; + 3B8AA282E96B073F73D645D38CE1096E /* YYImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYImage.h; path = YYImage/YYImage.h; sourceTree = ""; }; + 3B8C00943FF7F8CFAD73B6BE0A6D3985 /* EllipseNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EllipseNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift; sourceTree = ""; }; + 3B9CB5F944772CAB0E89F0484325B547 /* PhotoEditorContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorContentView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorContentView.swift; sourceTree = ""; }; + 3BB45BC95DC9AF301D42F5B0E83A6F91 /* SGQRCode.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SGQRCode.modulemap; sourceTree = ""; }; + 3BC91B6AC1E57B084227D354F0152109 /* ObservableConvertibleType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableConvertibleType.swift; path = RxSwift/ObservableConvertibleType.swift; sourceTree = ""; }; + 3BE64571CFA39F6E7F89C21A96D1D7FB /* not+RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "not+RxCocoa.swift"; path = "Source/RxCocoa/not+RxCocoa.swift"; sourceTree = ""; }; + 3C07F59A034811F4CBBF62F8E736ECAA /* picture_csp_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_csp_enc.c; path = src/enc/picture_csp_enc.c; sourceTree = ""; }; + 3C45BD99F26D6E924687C0DEF6BD9871 /* CallbackQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallbackQueue.swift; path = Sources/Utility/CallbackQueue.swift; sourceTree = ""; }; + 3C4FA82069B6C1E054035B43140BE929 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJExtension.m"; path = "MJRefresh/UIScrollView+MJExtension.m"; sourceTree = ""; }; + 3C61A14610D0126017F22A925514C694 /* CocoaMQTT-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaMQTT-dummy.m"; sourceTree = ""; }; + 3C6C2C1E35F34598B436A9715B3178E9 /* MACustomCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomCalloutView.h; path = MAMapKit.framework/Headers/MACustomCalloutView.h; sourceTree = ""; }; + 3C75D009CCCA844FCC9AB9C57F1EFD1F /* SwiftKeychainWrapper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftKeychainWrapper.release.xcconfig; sourceTree = ""; }; + 3C837B2221F8E0307B9986F0D7DE84AC /* PhotoListConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoListConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PhotoListConfiguration.swift; sourceTree = ""; }; + 3CAE77C1FDFE55D88382565774039932 /* OIMFileElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMFileElem.m; path = OpenIMSDK/Model/OIMFileElem.m; sourceTree = ""; }; + 3CB8C613628313363644BD09AD359103 /* _RX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RX.h; path = RxCocoa/Runtime/include/_RX.h; sourceTree = ""; }; + 3CDA05AE0A1D88DBAE40E62638BF3C8A /* Popover-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Popover-dummy.m"; sourceTree = ""; }; + 3CE5BD03C703D73BE31F3D87E1B5DC08 /* cost_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_sse2.c; path = src/dsp/cost_sse2.c; sourceTree = ""; }; + 3CEFA599307C4B7B9E0ADBD31EC1E745 /* OIMLocationElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMLocationElem.h; path = OpenIMSDK/Model/OIMLocationElem.h; sourceTree = ""; }; + 3CF535FBA7A17C38D87E054E77B938BC /* InvocableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableType.swift; path = RxSwift/Schedulers/Internal/InvocableType.swift; sourceTree = ""; }; + 3CF92AF5D8DFCE759BF000B71F0DA02E /* MJRefreshNormalTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h; sourceTree = ""; }; + 3CFB128BAD33D109C98CF3A44600DE0B /* GradientAnimations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientAnimations.swift; path = Sources/Private/CoreAnimation/Animations/GradientAnimations.swift; sourceTree = ""; }; + 3CFF889EB81CC40894452F644825AF71 /* NSTextField+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextField+Rx.swift"; path = "RxCocoa/macOS/NSTextField+Rx.swift"; sourceTree = ""; }; + 3D12B6120AA47A34F846154D94CAA3F4 /* PublishRelay+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PublishRelay+Signal.swift"; path = "RxCocoa/Traits/Signal/PublishRelay+Signal.swift"; sourceTree = ""; }; + 3D3412FCB9DBC857F8F90239397E20ED /* DidDisplayProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DidDisplayProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidDisplayProviding.swift; sourceTree = ""; }; + 3D365F8F2795391FEA3A7976186221B1 /* MAMapView+Resource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MAMapView+Resource.h"; path = "MAMapKit.framework/Headers/MAMapView+Resource.h"; sourceTree = ""; }; + 3D5452FF8CDB97481CA818937F4AA899 /* TimePeriodGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodGroup.swift; path = Sources/SwiftDate/TimePeriod/Groups/TimePeriodGroup.swift; sourceTree = ""; }; + 3D695561A56C2DD9E3D9132C6DF66CAA /* dec_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_mips32.c; path = src/dsp/dec_mips32.c; sourceTree = ""; }; + 3D87137706F35911310CFABBD8880A4D /* AMapFoundationKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapFoundationKit.framework; sourceTree = ""; }; + 3D933D12E317B5FD83E880AB561D94EA /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; }; + 3DB6E6F409BB82016215077AA58FFE0F /* Array+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Sort.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/Array+Sort.swift"; sourceTree = ""; }; + 3DD12149762F4B3855CF74E1E89307DD /* DownloadRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownloadRequest.swift; path = Source/Core/DownloadRequest.swift; sourceTree = ""; }; + 3DD1F18C6797FFFC1703236E67AD6096 /* SwiftKeychainWrapper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftKeychainWrapper-umbrella.h"; sourceTree = ""; }; + 3DE36367B42A69FD745A52FC145EF3CE /* UIImage+GIF.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+GIF.m"; path = "SDWebImage/Core/UIImage+GIF.m"; sourceTree = ""; }; + 3E2853814085998597B40FCD6FF69185 /* IQKeyboardToolbar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardToolbar-dummy.m"; sourceTree = ""; }; + 3E321387479547D50CFE05D0B62300A0 /* unwrap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = unwrap.swift; path = Source/RxSwift/unwrap.swift; sourceTree = ""; }; + 3E734FF2DDA8DAB55B08800FDD08E017 /* SDImageAssetManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAssetManager.h; path = SDWebImage/Private/SDImageAssetManager.h; sourceTree = ""; }; + 3E7390C91862B0B79A6128AFE4A9B5F5 /* MJExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.debug.xcconfig; sourceTree = ""; }; + 3E811FDD3EDFA0440713C2597DF1941A /* CompatibleAnimationKeypath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompatibleAnimationKeypath.swift; path = Sources/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift; sourceTree = ""; }; + 3EA07675D341B40B3A11C882628547EF /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = ""; }; + 3ED6DCACD44E7EC0DE34BDE788A9AFB3 /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; + 3EFC0DEF7F6680D04A5987FBBF719161 /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/Extensions/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; + 3F080FACE9A2AB9E5FF8918DF0CD166E /* SwiftyUserDefaults.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyUserDefaults.debug.xcconfig; sourceTree = ""; }; + 3F20D74BF18F61F2F8043E9BB9261874 /* DateInRegion+Math.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Math.swift"; path = "Sources/SwiftDate/DateInRegion/DateInRegion+Math.swift"; sourceTree = ""; }; + 3F24D6C58E498E7B37DF8D75A1208F70 /* CAAnimation+TimingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CAAnimation+TimingConfiguration.swift"; path = "Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift"; sourceTree = ""; }; + 3F309E5C6296297419BFF8A326FBA8A3 /* RxDataSources.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxDataSources.debug.xcconfig; sourceTree = ""; }; + 3F30D8D00A655C7EC5DA8DC98A8361B5 /* RxScrollViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxScrollViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxScrollViewDelegateProxy.swift; sourceTree = ""; }; + 3F5BBFBC93786C1203D7B9FC6A5D8002 /* ObservableConvertibleType+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Driver.swift"; path = "RxCocoa/Traits/Driver/ObservableConvertibleType+Driver.swift"; sourceTree = ""; }; + 3F6B9B8EEDDD183E1425AB22C7937309 /* FilepathImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilepathImageProvider.swift; path = Sources/Public/iOS/FilepathImageProvider.swift; sourceTree = ""; }; + 3F7489B3075663D6DD35FC554D303EC6 /* ValueContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueContainer.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueContainer.swift; sourceTree = ""; }; + 3F79F59C81E9BD55D2300957A95BFEE2 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; + 3F7EED91CF0B4D7A89C11A806293769A /* EditorImageResizerControlView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorImageResizerControlView.swift; path = Sources/HXPHPicker/Editor/View/Photo/EditorImageResizerControlView.swift; sourceTree = ""; }; + 3FB7A78444CD136A1E106D7281BB2012 /* Moya.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Moya.release.xcconfig; sourceTree = ""; }; + 3FBB5BAF1EB447A1809BF7973FC37468 /* Masonry-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-prefix.pch"; sourceTree = ""; }; + 3FED4232B22574120FFCBC78B2130061 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/Core/SessionDelegate.swift; sourceTree = ""; }; + 4009BD16431C62C0B7BE3CB189F750B2 /* Editor+PhotoTools.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Editor+PhotoTools.swift"; path = "Sources/HXPHPicker/Editor/Util/Editor+PhotoTools.swift"; sourceTree = ""; }; + 4041C387548214F751404450BF39B769 /* NSObject+YBImageBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+YBImageBrowser.m"; path = "YBImageBrowser/Base/NSObject+YBImageBrowser.m"; sourceTree = ""; }; + 406F8443BD9B36DA3D96980140325A1D /* GradientRenderLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientRenderLayer.swift; path = Sources/Private/CoreAnimation/Layers/GradientRenderLayer.swift; sourceTree = ""; }; + 4076244D29A019001FE69F99345FC805 /* ImageProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProcessor.swift; path = Sources/Image/ImageProcessor.swift; sourceTree = ""; }; + 40A7089ADE900B568CDC7B11FC4C263B /* SGQRCode.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SGQRCode.bundle; path = SGQRCode/SGQRCode.bundle; sourceTree = ""; }; + 40AD8D7E0434ABAC40ADD7301AF66559 /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; + 40BC21F8CF8714BDE827D23C7C0AA1FF /* SGGenerateQRCode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGGenerateQRCode.m; path = SGQRCode/QRCode/SGGenerateQRCode.m; sourceTree = ""; }; + 410138B7DB73A37EA3B12FDE47EC6909 /* RxCollectionViewReactiveArrayDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewReactiveArrayDataSource.swift; path = RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift; sourceTree = ""; }; + 410BD1B04CE17FB86D3C4FB7427E2E8A /* SwiftyUserDefaults-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyUserDefaults-umbrella.h"; sourceTree = ""; }; + 41497B385EDAC9F73A4855C08692FDB1 /* RxCocoaObjCRuntimeError+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RxCocoaObjCRuntimeError+Extensions.swift"; path = "RxCocoa/Common/RxCocoaObjCRuntimeError+Extensions.swift"; sourceTree = ""; }; 4173C63C9C2260C59FD9E0AD257A1200 /* URLNavigator */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = URLNavigator; path = URLNavigator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4183C044A4BC7762B0A05245AEA4D915 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Sources/Networking/SessionDelegate.swift; sourceTree = ""; }; - 41ABD5255F5B3887A1E6C0B3CD1A9071 /* DefaultsSerializable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsSerializable.swift; path = Sources/DefaultsSerializable.swift; sourceTree = ""; }; - 41B686351F84A98FEEC222FA207E8D99 /* OIMManager+Message.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Message.m"; path = "OpenIMSDK/Interface/OIMManager+Message.m"; sourceTree = ""; }; - 41C0F4847E0F170E3F59D0BC7F2811ED /* cost_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cost_enc.h; path = src/enc/cost_enc.h; sourceTree = ""; }; - 41CC3F3DD2BB8D3B4156748F2141ED40 /* AnimationContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationContext.swift; path = Sources/Private/Utility/Helpers/AnimationContext.swift; sourceTree = ""; }; - 41E7C809EA33C0393A6AE27000AB14AA /* Keyframes+combined.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Keyframes+combined.swift"; path = "Sources/Private/CoreAnimation/Extensions/Keyframes+combined.swift"; sourceTree = ""; }; - 41EBF466F9F250D801B4F6EF7B1879E1 /* HXPHPicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HXPHPicker-prefix.pch"; sourceTree = ""; }; - 41F90D943D1430057060CE7D0D884CEC /* PhotoEditorMosaicToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorMosaicToolView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorMosaicToolView.swift; sourceTree = ""; }; - 41FAE3704616441F385176547E15B85F /* EnumOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnumOperators.swift; path = Sources/EnumOperators.swift; sourceTree = ""; }; - 41FEE0B7FFF23C3578AAA6B48F10FD1E /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; + 41A4DBD37D4C7EDFBB298F5BFE487E1C /* Endpoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Endpoint.swift; path = Sources/Moya/Endpoint.swift; sourceTree = ""; }; + 41A60F1CDF890259E3C6967417E873B4 /* msa_macro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = msa_macro.h; path = src/dsp/msa_macro.h; sourceTree = ""; }; + 41ADAA54FC8D80364D38BC19F8E41595 /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/Core/RequestTaskMap.swift; sourceTree = ""; }; + 41CEA18D25AEC926DA2658E42254B462 /* color_cache_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = color_cache_utils.h; path = src/utils/color_cache_utils.h; sourceTree = ""; }; + 41D8AE7E514A94049498276F4D7A2EA8 /* PathOutputNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PathOutputNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift; sourceTree = ""; }; + 41E3FAAD2234BC50D877D8712F227C53 /* sharpyuv_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_sse2.c; path = sharpyuv/sharpyuv_sse2.c; sourceTree = ""; }; + 41F496A6B5F759F53792DE5EB4472DB8 /* SwiftKeychainWrapper-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftKeychainWrapper-Info.plist"; sourceTree = ""; }; 420D86B6DE49D1E1898C3A498E4F4195 /* RxSwift-RxSwift_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "RxSwift-RxSwift_Privacy"; path = RxSwift_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 4218E7AB0F97FEEDD00E4E037614FB34 /* SectionModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionModel.swift; path = Sources/Differentiator/SectionModel.swift; sourceTree = ""; }; - 421FF5F39905655DDCE1A5F2FF2176D9 /* BooleanDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BooleanDisposable.swift; path = RxSwift/Disposables/BooleanDisposable.swift; sourceTree = ""; }; - 42313B5EA1C08DEBCB6B59020C9314BA /* Picker+PhotoAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+PhotoAsset.swift"; path = "Sources/HXPHPicker/Picker/Extension/Picker+PhotoAsset.swift"; sourceTree = ""; }; - 424C1229D81117AFB23943DBBE7C4DCE /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = ""; }; - 428BD599C962D9E479FAFFBC60859CF5 /* AssetManager+Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+Image.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+Image.swift"; sourceTree = ""; }; - 4298E753B82537A2B8C44313CCC2E168 /* GIFAnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GIFAnimatedImage.swift; path = Sources/Image/GIFAnimatedImage.swift; sourceTree = ""; }; - 42B114F0B8206EEAB6F552D7C4F863ED /* NopDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NopDisposable.swift; path = RxSwift/Disposables/NopDisposable.swift; sourceTree = ""; }; - 42B2824679F61129A99A02FB3B02A3D9 /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; }; - 42C932923F54BF07D5682A760F4539BF /* ofType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ofType.swift; path = Source/RxSwift/ofType.swift; sourceTree = ""; }; - 42F1702D21C1AAA9E33E2984581D4FCA /* AlipaySDK-iOS-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "AlipaySDK-iOS-xcframeworks.sh"; sourceTree = ""; }; - 4301E59E401F1C6F4638E1B62F53C1DD /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = ""; }; - 433934F1DC56FCF3A68958D44ADBFE90 /* RefCountDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RefCountDisposable.swift; path = RxSwift/Disposables/RefCountDisposable.swift; sourceTree = ""; }; - 43409DB5BB90B590069DBF410D50DD04 /* backward_references_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = backward_references_enc.c; path = src/enc/backward_references_enc.c; sourceTree = ""; }; - 43601022A470E6D853FE16759BDC655E /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; }; - 43CBA87A6062D67B43C728A78CDD889F /* ClassReference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ClassReference.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Internal/ClassReference.swift; sourceTree = ""; }; - 43E499C40D12F0BA44448C3A8FE1BA57 /* EditorStickerTrashView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerTrashView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerTrashView.swift; sourceTree = ""; }; - 43E68058B169D1FBD605BEB82E2A7B8F /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 422984CB36725E3CF2CFC36BC69EC1FE /* EditorImageResizerMaskView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorImageResizerMaskView.swift; path = Sources/HXPHPicker/Editor/View/Photo/EditorImageResizerMaskView.swift; sourceTree = ""; }; + 423169ACF822472DA2500156F0733BB8 /* MAMapAccessibilityIdentifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapAccessibilityIdentifier.h; path = MAMapKit.framework/Headers/MAMapAccessibilityIdentifier.h; sourceTree = ""; }; + 423264E105440A0186760072DCD20FCC /* OIMGCDMulticastDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMGCDMulticastDelegate.m; path = OpenIMSDK/Callbacker/OIMGCDMulticastDelegate.m; sourceTree = ""; }; + 423CB5BAFBC5B1B7B8867FCF7091EAFD /* BlendMode+Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BlendMode+Filter.swift"; path = "Sources/Private/Utility/Extensions/BlendMode+Filter.swift"; sourceTree = ""; }; + 429D673B66BF996BECCA85690BDC4240 /* SGScanView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGScanView.h; path = SGQRCode/ScanView/SGScanView.h; sourceTree = ""; }; + 42A180547A0748580216D31947FCF91D /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; + 42AAC5C25F48FDAE17B347BE4BC0FB10 /* sharpyuv_gamma.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_gamma.c; path = sharpyuv/sharpyuv_gamma.c; sourceTree = ""; }; + 42BAAA1958F2B74B2EBA9E6128334A32 /* ResourceBundle-Privacy-ObjectMapper-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Privacy-ObjectMapper-Info.plist"; sourceTree = ""; }; + 42D00A5C619445D1495B62A932B9DE3B /* MAGroundOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGroundOverlay.h; path = MAMapKit.framework/Headers/MAGroundOverlay.h; sourceTree = ""; }; + 42FEFD5D7BAEE2B475CA21E3B18847DA /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+Writing.swift"; sourceTree = ""; }; + 43047DBE059866A1011930C625E2B47E /* IQKeyboardReturnManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardReturnManager-Info.plist"; sourceTree = ""; }; + 430D8BCB203E6FA33D34F430A850845B /* Dematerialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Dematerialize.swift; path = RxSwift/Observables/Dematerialize.swift; sourceTree = ""; }; + 432FA1B90521DCF2ABD467F6CB5BE0D8 /* muxinternal.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxinternal.c; path = src/mux/muxinternal.c; sourceTree = ""; }; + 43406D3985E9918221FE0A4DE1B571DA /* Bag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bag.swift; path = Platform/DataStructures/Bag.swift; sourceTree = ""; }; + 43460343EA43EE4FC9F9EF609A697333 /* IQKeyboardReturnManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardReturnManager-prefix.pch"; sourceTree = ""; }; + 43A35A16C9716924B97B9D53A78A0391 /* FramePublish.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FramePublish.swift; path = Source/FramePublish.swift; sourceTree = ""; }; + 43CD18A02BC6362BD60A9F8A895C6881 /* YBIBCollectionViewLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBCollectionViewLayout.h; path = YBImageBrowser/Base/YBIBCollectionViewLayout.h; sourceTree = ""; }; + 43D070FA933209AA2B933B1574913A3F /* WechatOpenSDK-XCFramework-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "WechatOpenSDK-XCFramework-xcframeworks.sh"; sourceTree = ""; }; 43EAAD2AB7E6B407E80E95F643F93D22 /* MJExtension-MJExtension */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "MJExtension-MJExtension"; path = MJExtension.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 43FB9E973A47305B19D631375B80A59A /* IQKeyboardManager+ToolbarManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarManager.swift"; path = "IQKeyboardManagerSwift/IQKeyboardToolbarManager/IQKeyboardManager+ToolbarManager.swift"; sourceTree = ""; }; - 443DB1392864611F254C77FA4329F1D1 /* Bag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bag.swift; path = Platform/DataStructures/Bag.swift; sourceTree = ""; }; - 44456B4A49FD97858C88390117FC8890 /* OIMManager+Group.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Group.h"; path = "OpenIMSDK/Interface/OIMManager+Group.h"; sourceTree = ""; }; - 445052D7B6C3849EF4DC935731E697FC /* Picker+UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+UIImageView.swift"; path = "Sources/HXPHPicker/Picker/Extension/Picker+UIImageView.swift"; sourceTree = ""; }; - 449956C48B59A346D76D820B80C026D9 /* MAUserLocationRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAUserLocationRepresentation.h; path = MAMapKit.framework/Headers/MAUserLocationRepresentation.h; sourceTree = ""; }; - 44AA35264925F43D3EC251BF229096B1 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = ""; }; - 44D3D9364C5E3681429B741A17C6D231 /* RxSwiftExt.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxSwiftExt.modulemap; sourceTree = ""; }; - 44EBEF9387307DC81A32EFFE81F6035F /* AnimatedProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/AnimatedProviding.swift; sourceTree = ""; }; - 450ACC10D4C6E5EF773D09E25222F0C0 /* SGQRCode-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SGQRCode-umbrella.h"; sourceTree = ""; }; - 453CA5B7C2555E48218CED21C1BC8519 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = ""; }; + 44070D625BBD8D72169C7EAC92037AAA /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = ""; }; + 442AB6262AFA4173559DD94C6274239F /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = ""; }; + 442B1083EAD63EC2E04EE79B2C02102A /* EpoxyLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyLogger.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Logging/EpoxyLogger.swift; sourceTree = ""; }; + 44443D8FED362A663B7F86031F24FBC4 /* DDAssertMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAssertMacros.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDAssertMacros.h; sourceTree = ""; }; + 4448D42457474E9CEFD9FDDB43FCDE90 /* YBIBVideoData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoData.h; path = Video/YBIBVideoData.h; sourceTree = ""; }; + 4471EC3FFF68A5CB2C39BF14527FC3D8 /* CocoaLumberjack.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.release.xcconfig; sourceTree = ""; }; + 44BDF7C88D11E13B365E3AF156FE327A /* OIMAttachedInfoElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMAttachedInfoElem.h; path = OpenIMSDK/Model/OIMAttachedInfoElem.h; sourceTree = ""; }; + 44D897C6C7596759284807513D0F656D /* MAGroundOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGroundOverlayRenderer.h; path = MAMapKit.framework/Headers/MAGroundOverlayRenderer.h; sourceTree = ""; }; + 44EA28130A47103E346AEA431BD8AB23 /* CGFloatExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGFloatExtensions.swift; path = Sources/Private/Utility/Extensions/CGFloatExtensions.swift; sourceTree = ""; }; + 4538D166A896DAD1AB3BFE037F3EFE5C /* LottieViewType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieViewType.swift; path = Sources/Public/Controls/LottieViewType.swift; sourceTree = ""; }; 45528F89822ACD0BFE4789411E978828 /* RxCocoa-RxCocoa_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "RxCocoa-RxCocoa_Privacy"; path = RxCocoa_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 4559C34E42D4D2C64A174AA002B8056D /* ProgressImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProgressImageView.swift; path = Sources/HXPHPicker/Core/View/ProgressImageView.swift; sourceTree = ""; }; - 456E97C9FEB89B1B0A86B831368F12E0 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackNormalFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h; sourceTree = ""; }; - 457470DF1C51CF053BB4ED593859965A /* URLNavigator-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "URLNavigator-dummy.m"; sourceTree = ""; }; - 45A6C83A799C0C051A71B753EBF2E0C4 /* filters_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_sse2.c; path = src/dsp/filters_sse2.c; sourceTree = ""; }; - 45A82B7D82427BF1446499386E18E4FB /* mux_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mux_types.h; path = src/webp/mux_types.h; sourceTree = ""; }; - 45AD7FAD1E5345477CDADB368908F59E /* bit_reader_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = bit_reader_utils.c; path = src/utils/bit_reader_utils.c; sourceTree = ""; }; - 45AEBEE9E3F79E4CDD32A46B927067A9 /* UIView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MJExtension.h"; path = "MJRefresh/UIView+MJExtension.h"; sourceTree = ""; }; - 45D6D7BCFDFDF29A6DBD06C86894A520 /* PhotoListConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoListConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PhotoListConfiguration.swift; sourceTree = ""; }; - 45DECE1C164F713D09FCC8D39EE8815F /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/Core/ParameterEncoder.swift; sourceTree = ""; }; - 4606C2115D48BBA83BE7F9CC386AB737 /* _RXObjCRuntime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXObjCRuntime.m; path = RxCocoa/Runtime/_RXObjCRuntime.m; sourceTree = ""; }; - 462A0CFAB7382F9081365327D7F33267 /* PhotoPickerSelectableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerSelectableViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPickerSelectableViewCell.swift; sourceTree = ""; }; - 4658669320F17E4FF1069C73ED9C3838 /* YBImageBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBImageBrowser.m; path = YBImageBrowser/YBImageBrowser.m; sourceTree = ""; }; - 466A603F12FA5BB31841F6365BACD39E /* webp_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = webp_enc.c; path = src/enc/webp_enc.c; sourceTree = ""; }; - 46A9779C47951687DB62763E0DD55E55 /* IQKeyboardReturnManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardReturnManager.debug.xcconfig; sourceTree = ""; }; - 46C3470E48B1D31E09FFD503615D9BB6 /* WithUnretained.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WithUnretained.swift; path = RxSwift/Observables/WithUnretained.swift; sourceTree = ""; }; - 46CA00F3ED3A39266FD0485E6A9A52E8 /* YBIBGetBaseInfoProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBGetBaseInfoProtocol.h; path = YBImageBrowser/Protocol/YBIBGetBaseInfoProtocol.h; sourceTree = ""; }; - 46FA4E5C6AB9828AA051B5295DB7401A /* Mask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mask.swift; path = Sources/Private/Model/Objects/Mask.swift; sourceTree = ""; }; - 471AA0E6419BEC2F99BC28C13F677E88 /* EllipseAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EllipseAnimation.swift; path = Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift; sourceTree = ""; }; - 477382C0F53729E89AD8720A95AB42A7 /* ErasedContentProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErasedContentProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ErasedContentProviding.swift; sourceTree = ""; }; - 479A5976FAAC7CD00DADE00121C3194C /* HXPHPicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "HXPHPicker-Info.plist"; sourceTree = ""; }; - 47C1FF137DA42CBB07A1EF1B8D4A2D29 /* PhotoEditorViewController+Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoEditorViewController+Request.swift"; path = "Sources/HXPHPicker/Editor/Controller/PhotoEditorViewController+Request.swift"; sourceTree = ""; }; - 47F4417E91DBF2662F9F10B3EE2F3C18 /* AsyncLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncLock.swift; path = RxSwift/Concurrency/AsyncLock.swift; sourceTree = ""; }; - 4829363F4F1E0B4952D62D858E19E4AD /* SessionDataTask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDataTask.swift; path = Sources/Networking/SessionDataTask.swift; sourceTree = ""; }; - 483A34A8F177C29CC7FBA298C2881921 /* EditorToolViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorToolViewCell.swift; path = Sources/HXPHPicker/Editor/View/EditorToolViewCell.swift; sourceTree = ""; }; - 4846DEBD1B88739515A29CBE64DAD34F /* MJRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJRefresh-dummy.m"; sourceTree = ""; }; - 486BC245372C2FC6F3B475C1D0AC365B /* OpenIMCore.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; name = OpenIMCore.xcframework; path = Framework/OpenIMCore.xcframework; sourceTree = ""; }; - 486C16E381473095D0AA5D90E00E5843 /* Navigator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Navigator.swift; path = Sources/URLNavigator/Navigator.swift; sourceTree = ""; }; - 486D15A5F82C8985A0E6751D00D794DA /* MAOfflineCity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineCity.h; path = MAMapKit.framework/Headers/MAOfflineCity.h; sourceTree = ""; }; - 486DBFE0E0D4096F665E6499011A443F /* Binder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Binder.swift; path = RxSwift/Binder.swift; sourceTree = ""; }; - 489954733A3E65665BFD9C14B718677E /* common_sse41.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_sse41.h; path = src/dsp/common_sse41.h; sourceTree = ""; }; - 489AB4A9B338E825DFFB1745D2B1E16E /* Vector1DEffectValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Vector1DEffectValue.swift; path = Sources/Private/Model/LayerEffects/EffectValues/Vector1DEffectValue.swift; sourceTree = ""; }; - 48A8FEED501EFD1067CE5D1499B5B075 /* ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist"; sourceTree = ""; }; - 48F6E0EA41E40ECC2E2F6DD4D0B38CB1 /* EffectValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EffectValue.swift; path = Sources/Private/Model/LayerEffects/EffectValues/EffectValue.swift; sourceTree = ""; }; - 49053A2947EE78436A16A7AA161489FB /* PriorityQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PriorityQueue.swift; path = Platform/DataStructures/PriorityQueue.swift; sourceTree = ""; }; - 49109E0282ED87E8EDD6FB47CB18C964 /* MarqueeLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MarqueeLabel-umbrella.h"; sourceTree = ""; }; - 4912A79A08146F11C569FC6DA4735C57 /* count.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = count.swift; path = Source/RxSwift/count.swift; sourceTree = ""; }; - 49624603A0AE8BE4B18806F2DAD7B3D4 /* PhotoEditorCropToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorCropToolView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorCropToolView.swift; sourceTree = ""; }; - 496745A7F3A4397C33365DC9AA2BBD27 /* MBProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.debug.xcconfig; sourceTree = ""; }; - 49B0BA1B9007316089950248F030BD49 /* libwebp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libwebp-umbrella.h"; sourceTree = ""; }; - 49B2C730E8574BF4D63DAF8204DC6409 /* OIMGroupInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMGroupInfo.m; path = OpenIMSDK/Model/OIMGroupInfo.m; sourceTree = ""; }; - 49B3B5C8918A70D85AC76D63AB8FEF7C /* MATouchPoi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATouchPoi.h; path = MAMapKit.framework/Headers/MATouchPoi.h; sourceTree = ""; }; - 49CE288F45AE14A8ACBCB47C4E6EF706 /* ObjectMapper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ObjectMapper-dummy.m"; sourceTree = ""; }; - 4A094F4CEA1C525291A1DA9D1530B5BD /* Reactive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reactive.swift; path = RxSwift/Reactive.swift; sourceTree = ""; }; - 4A2B506E2416B5C91B799DFE0B69F278 /* AssetManager+VideoURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+VideoURL.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+VideoURL.swift"; sourceTree = ""; }; - 4A695E041567399C0A6E1B8B2BB5790E /* distinct.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = distinct.swift; path = Source/RxSwift/distinct.swift; sourceTree = ""; }; - 4A843D530EED2334A0CD6860F27AE9F7 /* DateInRegion+Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Create.swift"; path = "Sources/SwiftDate/DateInRegion/DateInRegion+Create.swift"; sourceTree = ""; }; - 4A86205BBD9A0C0A9ABA8E148F66C648 /* ignoreErrors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ignoreErrors.swift; path = Source/RxSwift/ignoreErrors.swift; sourceTree = ""; }; - 4AB0C8AFD4E85D17435F4F56F8794C41 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Core/Request.swift; sourceTree = ""; }; - 4AB6CBC4746778086E329DD344D09063 /* UIView+SDExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+SDExtension.m"; path = "SDCycleScrollView/Lib/SDCycleScrollView/UIView+SDExtension.m"; sourceTree = ""; }; - 4AC41A04D19C36C0AA63528AA7AFDC61 /* libwebp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "libwebp-Info.plist"; sourceTree = ""; }; - 4B030D7D5D8F6147979F920E9EDD6CB0 /* IQKeyboardReturnManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardReturnManager.modulemap; sourceTree = ""; }; - 4B160D855FFEF98949AC7D84DF900D91 /* OIMQuoteElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMQuoteElem.m; path = OpenIMSDK/Model/OIMQuoteElem.m; sourceTree = ""; }; - 4B3F4F75DEDBE40BA5CC5D419F97FA1F /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; - 4B56B9C4446B4864B2E6EC9FA7AB1F4C /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/Extensions/OperationQueue+Alamofire.swift"; sourceTree = ""; }; - 4B65AF04777A2385E03DD8913EFAE5D7 /* CurrentThreadScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentThreadScheduler.swift; path = RxSwift/Schedulers/CurrentThreadScheduler.swift; sourceTree = ""; }; - 4B8D141C5CB92565EBE4E408187A268A /* MJRefresh.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MJRefresh.bundle; path = MJRefresh/MJRefresh.bundle; sourceTree = ""; }; - 4BA7E8D0376529DEF59A4B52463226CE /* URLRequest+Encoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Encoding.swift"; path = "Sources/Moya/URLRequest+Encoding.swift"; sourceTree = ""; }; - 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 4BE739C8611B660926CA6A0474569860 /* AMapNearbyUploadInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNearbyUploadInfo.h; path = AMapSearchKit.framework/Headers/AMapNearbyUploadInfo.h; sourceTree = ""; }; - 4C04BCB613C18841E80E12AD65B54EB5 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = ""; }; - 4C16BCB8E73F50157A1D93FED070EE1D /* LegacyGradientFillRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyGradientFillRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift; sourceTree = ""; }; - 4C27FEE1D4334F4976A5F419C24858EB /* DDContextFilterLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDContextFilterLogFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDContextFilterLogFormatter.h; sourceTree = ""; }; - 4C2FF52A2AD4EFB49CA6B7904FDF26EA /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; - 4C52DF26092158048682358F43565CB5 /* CompatibleAnimationKeypath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompatibleAnimationKeypath.swift; path = Sources/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift; sourceTree = ""; }; - 4CBDB659ECA60E466DDE07E7F3188D9B /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; - 4D03C4A705D61C193A9538DBE31D5AA6 /* EmptyView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EmptyView.swift; path = Sources/HXPHPicker/Picker/View/EmptyView.swift; sourceTree = ""; }; - 4D15A1A1C3D45C5DBC427A6AA27A1645 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackGifFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m; sourceTree = ""; }; - 4D51AEB7941D5096807E59C7B4F7596A /* TagListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagListView.swift; path = TagListView/TagListView.swift; sourceTree = ""; }; - 4D6D43780E33C2CDBD9719B5CA9CD786 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = ""; }; - 4D8BD69420673B5C0598B75F654685F3 /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = SDWebImage/Private/SDDisplayLink.m; sourceTree = ""; }; - 4DAF97AA6C3E4088F2E9F27E50E1B400 /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/Features/RedirectHandler.swift; sourceTree = ""; }; - 4DC53E0ABF02CD9BBAB8D62559EA0E36 /* vp8_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8_dec.c; path = src/dec/vp8_dec.c; sourceTree = ""; }; - 4DC7F488D40CE43018AB21B6B897E2FC /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; }; - 4DD2273F4ADC8FF6EB64FA7E9A31E108 /* SGPermission.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGPermission.m; path = SGQRCode/Permission/SGPermission.m; sourceTree = ""; }; - 4DECC62F44E2E42AF9DA7B4D12D109AD /* Entry+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+Serialization.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Entry+Serialization.swift"; sourceTree = ""; }; - 4DF16DAEEB6F7357BF3520DDEBB204C5 /* NavigatorDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigatorDelegate.swift; path = Sources/URLNavigator/NavigatorDelegate.swift; sourceTree = ""; }; - 4DF522262FD43A31939B404FAB1CDBF3 /* MultipartUpload.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartUpload.swift; path = Source/Features/MultipartUpload.swift; sourceTree = ""; }; - 4E088D11842C15829D25C41127693532 /* Font.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Font.swift; path = Sources/Private/Model/Text/Font.swift; sourceTree = ""; }; - 4E106F539EFD985E901DB6221706FA68 /* MJPropertyType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyType.m; path = MJExtension/MJPropertyType.m; sourceTree = ""; }; - 4E167799FA0AC9BA04FEF298D51921F2 /* UIActivityIndicatorView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIActivityIndicatorView+Rx.swift"; path = "RxCocoa/iOS/UIActivityIndicatorView+Rx.swift"; sourceTree = ""; }; - 4E2DA31BB5B71385C2113C242EC8B930 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; }; - 4E5481FAD7A37F467015F2E5F084A2F1 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = ""; }; - 4E591ECDB169F1C1FEA1146E243A7C90 /* YBIBCopywriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBCopywriter.h; path = YBImageBrowser/Helper/YBIBCopywriter.h; sourceTree = ""; }; - 4E618947B25509EAF74A486F71C3AD21 /* NSObject+MJClass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJClass.h"; path = "MJExtension/NSObject+MJClass.h"; sourceTree = ""; }; - 4E9B98311325CDF25036C3281CDBCA4D /* YBIBCollectionViewLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBCollectionViewLayout.h; path = YBImageBrowser/Base/YBIBCollectionViewLayout.h; sourceTree = ""; }; - 4EA880E07DFDD100C561A72CF77D3DB3 /* YBIBDefaultWebImageMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBDefaultWebImageMediator.h; path = YBImageBrowser/WebImageMediator/YBIBDefaultWebImageMediator.h; sourceTree = ""; }; - 4ED0F1D4E099A8871122580C0CEA500F /* IQKeyboardNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardNotification.release.xcconfig; sourceTree = ""; }; - 4EF86CFFD59506D2A1BC9B5A27F56AA8 /* MAArcRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAArcRenderer.h; path = MAMapKit.framework/Headers/MAArcRenderer.h; sourceTree = ""; }; - 4F32E9C5ED25E45138C2B009244D8436 /* YBIBVideoView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoView.m; path = Video/YBIBVideoView.m; sourceTree = ""; }; - 4F68BD6425465F18A23B292AC6D7B869 /* KingfisherWebP-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KingfisherWebP-umbrella.h"; sourceTree = ""; }; - 4FA8FC41EA3473140B417F7087C0C8B5 /* NSString+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MJExtension.h"; path = "MJExtension/NSString+MJExtension.h"; sourceTree = ""; }; - 4FD48EA2FBFB0058F98D944DAAEBE7C6 /* WKWebView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "WKWebView+Rx.swift"; path = "RxCocoa/iOS/WKWebView+Rx.swift"; sourceTree = ""; }; - 4FE8974D1F8254C4E1857EBC09B66C6F /* AMapLocationVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationVersion.h; path = AMapLocationKit.framework/Headers/AMapLocationVersion.h; sourceTree = ""; }; - 5001850E080A2D52833E20CF7C699547 /* ImmutableMappable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImmutableMappable.swift; path = Sources/ImmutableMappable.swift; sourceTree = ""; }; - 500A5FEB2506800042D1146A691F3EAA /* zipWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = zipWith.swift; path = Source/RxSwift/zipWith.swift; sourceTree = ""; }; - 50577F76F9EACE83C1F8DB7EEEED065B /* SubscribeOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscribeOn.swift; path = RxSwift/Observables/SubscribeOn.swift; sourceTree = ""; }; + 45676A1039F53B7B44E96257EFC0755B /* SDDiskCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDiskCache.h; path = SDWebImage/Core/SDDiskCache.h; sourceTree = ""; }; + 456C8BCCDAD47FF8693D75400A0E6323 /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; + 45847A481163BB50EC86B3708DED15B7 /* UITextField+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextField+Rx.swift"; path = "RxCocoa/iOS/UITextField+Rx.swift"; sourceTree = ""; }; + 458E91DE3D1A4CB674A1B648258294A3 /* AssetManager+ImageURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+ImageURL.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+ImageURL.swift"; sourceTree = ""; }; + 45CE67E2BB4A7AEE69B84C4CB510B2F2 /* ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist"; sourceTree = ""; }; + 45F9E01CB1B5AD57F4855BEAFABE70FF /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardNotification/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 461F530A1AE9AF2A8B01A2FA5A394E06 /* Data+CompressionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+CompressionDeprecated.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Data+CompressionDeprecated.swift"; sourceTree = ""; }; + 46401BF2160F11FED118E9A0C76EDE18 /* TAAnimatedDotView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TAAnimatedDotView.m; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAAnimatedDotView.m; sourceTree = ""; }; + 464B9757D797F887E5C3971471FC51EE /* ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist"; sourceTree = ""; }; + 465B409F53432E81A5A256AE2E926B8C /* YBIBSentinel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBSentinel.m; path = YBImageBrowser/Helper/YBIBSentinel.m; sourceTree = ""; }; + 467D1F0F2F8DC4407D4DE1A116DA6822 /* SDAnimatedImagePlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImagePlayer.h; path = SDWebImage/Core/SDAnimatedImagePlayer.h; sourceTree = ""; }; + 468FE65CB846EAB3F699F8E68CCDFC1E /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; }; + 469BBA85B3B01F0A015C20C5026AC171 /* YBIBCopywriter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBCopywriter.h; path = YBImageBrowser/Helper/YBIBCopywriter.h; sourceTree = ""; }; + 46A6A76613C60A158BED1E4B71FF5A5E /* dec_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_sse41.c; path = src/dsp/dec_sse41.c; sourceTree = ""; }; + 46F633D702261FD3818B8BC3F02C82DC /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; + 477AB1A71336EC844111AF30835E2B70 /* DiskStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiskStorage.swift; path = Sources/Cache/DiskStorage.swift; sourceTree = ""; }; + 4781270B7E505D46B77FC0AAE0844B23 /* DiffableSection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiffableSection.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/DiffableSection.swift; sourceTree = ""; }; + 47B17333D0907CCF5AF2E8678FD6D83A /* PhotoManager+Language.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoManager+Language.swift"; path = "Sources/HXPHPicker/Core/Util/PhotoManager+Language.swift"; sourceTree = ""; }; + 47B192A3DA152CDAA23C460A7AE465C0 /* AMapLocation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapLocation.debug.xcconfig; sourceTree = ""; }; + 47FF8124BAC952F35B2E4461CF41D102 /* RxTableViewSectionedAnimatedDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewSectionedAnimatedDataSource.swift; path = Sources/RxDataSources/RxTableViewSectionedAnimatedDataSource.swift; sourceTree = ""; }; + 480D5CF8CBC208B22CD517AAD0704692 /* CompoundBezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompoundBezierPath.swift; path = Sources/Private/Utility/Primitives/CompoundBezierPath.swift; sourceTree = ""; }; + 480FA25861EA5315A0609447A82AA5C2 /* MeasuringViewRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MeasuringViewRepresentable.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/LayoutUtilities/MeasuringViewRepresentable.swift; sourceTree = ""; }; + 48235EA9287F0138124F456EEB881070 /* OIMUpdateFriendsReq.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMUpdateFriendsReq.m; path = OpenIMSDK/Model/OIMUpdateFriendsReq.m; sourceTree = ""; }; + 482D2B3E2E595AC7494A2C02FBBBF93E /* HistoricalSchedulerTimeConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalSchedulerTimeConverter.swift; path = RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift; sourceTree = ""; }; + 488940941E25EEC0F1419CDC1C942616 /* ViewEpoxyModeled.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewEpoxyModeled.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/ViewEpoxyModeled.swift; sourceTree = ""; }; + 4898667850B1F683D057A578214EAE3E /* IQTextInputViewNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextInputViewNotification-prefix.pch"; sourceTree = ""; }; + 48C0D0820DEB2784A88DFE222DDC52D5 /* AnimationCacheProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationCacheProvider.swift; path = Sources/Public/AnimationCache/AnimationCacheProvider.swift; sourceTree = ""; }; + 48C58BD4112BA7365B046A10EC59B716 /* DDLoggerNames.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLoggerNames.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLoggerNames.h; sourceTree = ""; }; + 48D3D3955FABE41F8DDF194B898A86F8 /* IdentifiableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IdentifiableType.swift; path = Sources/Differentiator/IdentifiableType.swift; sourceTree = ""; }; + 4988D7FAB199524EF97468FDA1024E50 /* AMapUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapUtility.h; path = AMapFoundationKit.framework/Headers/AMapUtility.h; sourceTree = ""; }; + 49B586C2492DB8E3B98452DAA26E3559 /* AMapFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapFoundation.release.xcconfig; sourceTree = ""; }; + 4A1C62F9A38F1FD80FB92031BAFDFAF5 /* MAOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlayRenderer.h; path = MAMapKit.framework/Headers/MAOverlayRenderer.h; sourceTree = ""; }; + 4A22DBEDA2395191F537EFCBEB528C98 /* DataRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataRequest.swift; path = Source/Core/DataRequest.swift; sourceTree = ""; }; + 4A2965AF467F1BD2E4E571F66AA1F8EA /* AsyncLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncLock.swift; path = RxSwift/Concurrency/AsyncLock.swift; sourceTree = ""; }; + 4A821688C0C584B0F53FDAD23FCBF38E /* TransformLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformLayer.swift; path = Sources/Private/CoreAnimation/Layers/TransformLayer.swift; sourceTree = ""; }; + 4A932087ABB9A35400DD7C526A39F7CA /* SDImageCachesManagerOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManagerOperation.m; path = SDWebImage/Private/SDImageCachesManagerOperation.m; sourceTree = ""; }; + 4AACBABCF5B90F04C33A9FECD309A234 /* UIViewController+ParentContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+ParentContainer.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIViewController+ParentContainer.swift"; sourceTree = ""; }; + 4AB1931CF524B963B8848089EAC19A28 /* SchedulerServices+Emulation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SchedulerServices+Emulation.swift"; path = "RxSwift/Schedulers/SchedulerServices+Emulation.swift"; sourceTree = ""; }; + 4AC29025924C23D539E1D1221AC29A60 /* BaseAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseAnimationLayer.swift; path = Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift; sourceTree = ""; }; + 4AFBBCC3AC2D57FEB1F37DD9DD64C777 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; + 4B116CF6C24DE8991292084F188FE48C /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; + 4B1B2B7ADF26863573179177D46607DB /* OIMSimpleRequstInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSimpleRequstInfo.m; path = OpenIMSDK/Model/OIMSimpleRequstInfo.m; sourceTree = ""; }; + 4B3761DE77E2B197B16591EDBD27853D /* GYSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GYSDK.release.xcconfig; sourceTree = ""; }; + 4B3A498E078050E333B31F85315541AC /* UITabBarController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITabBarController+Rx.swift"; path = "RxCocoa/iOS/UITabBarController+Rx.swift"; sourceTree = ""; }; + 4B3B1BFD01D9928B8320CCFBE483C0B6 /* PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrimitiveSequence.swift; path = RxSwift/Traits/PrimitiveSequence/PrimitiveSequence.swift; sourceTree = ""; }; + 4B4488AE2B9DCBD2B129E527FCB438E2 /* AMapSearchObjV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchObjV1.h; path = AMapSearchKit.framework/Headers/AMapSearchObjV1.h; sourceTree = ""; }; + 4B629D4BA0B10122B36F8D3078B38BA6 /* Event.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Event.swift; path = RxSwift/Event.swift; sourceTree = ""; }; + 4BB38AD055FDA8B028F1CFCB6AC51C95 /* IQKeyboardInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardInfo.swift; path = IQKeyboardNotification/Classes/IQKeyboardInfo.swift; sourceTree = ""; }; + 4BB5E60ABB3231746217C7BE67D898E0 /* NSObject+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx.swift"; path = "RxCocoa/Foundation/NSObject+Rx.swift"; sourceTree = ""; }; + 4BC960EB9A445C244712AC3B35F7B71F /* PhotoEditorCropToolModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorCropToolModel.swift; path = Sources/HXPHPicker/Editor/Model/PhotoEditorCropToolModel.swift; sourceTree = ""; }; + 4BE6176D5BCDA6C689675AD9CC5D2E6B /* View+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "View+MASAdditions.m"; path = "Masonry/View+MASAdditions.m"; sourceTree = ""; }; + 4C05ACB5044590C564E48226710D1D64 /* DotLottieFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieFile.swift; path = Sources/Public/DotLottie/DotLottieFile.swift; sourceTree = ""; }; + 4C0D804C76B78471CEB59B3283599A1A /* DefaultAnimationCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAnimationCache.swift; path = Sources/Public/AnimationCache/DefaultAnimationCache.swift; sourceTree = ""; }; + 4C1A9571D4A22125DDC26AAC81C21512 /* ShapeNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift; sourceTree = ""; }; + 4C7BC7D5D706A55CD1A71A40EB4D8F08 /* AnonymousObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousObserver.swift; path = RxSwift/Observers/AnonymousObserver.swift; sourceTree = ""; }; + 4C84C4C711FFA7CF45DD30F7F1B9F6FB /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQTextView/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 4C9C1726151F48CC295DA74726E495B9 /* RxSearchControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxSearchControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxSearchControllerDelegateProxy.swift; sourceTree = ""; }; + 4CC6AA20493473721AA86C0A1A50A8DD /* ShareReplayScope.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShareReplayScope.swift; path = RxSwift/Observables/ShareReplayScope.swift; sourceTree = ""; }; + 4CD359CC21DFC73BA0F1DDCAF0486162 /* idec_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = idec_dec.c; path = src/dec/idec_dec.c; sourceTree = ""; }; + 4CDD47B22A2046775AB63801AE6381A4 /* UISwitch+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISwitch+Rx.swift"; path = "RxCocoa/iOS/UISwitch+Rx.swift"; sourceTree = ""; }; + 4CE033DD89D2C7F468E6CF4145EF8AB3 /* Masonry-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Masonry-umbrella.h"; sourceTree = ""; }; + 4CE1D44D51C8A45FD369FE3952E1D2B2 /* CocoaMQTTStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTStorage.swift; path = Source/CocoaMQTTStorage.swift; sourceTree = ""; }; + 4CFB6F6DFDEB8E69C4A18B6691BBDD7F /* SharedSequence+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Concurrency.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Concurrency.swift"; sourceTree = ""; }; + 4D15480DB79AA35C1FA293BFB624DD79 /* URLNavigator-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "URLNavigator-prefix.pch"; sourceTree = ""; }; + 4D21C7C434B3F4BDFF04AA060D589C0E /* FormatIndicatedCacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FormatIndicatedCacheSerializer.swift; path = Sources/Cache/FormatIndicatedCacheSerializer.swift; sourceTree = ""; }; + 4D2A4FB1654D2C01A0BB8DF98D396CF8 /* MarqueeLabel-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MarqueeLabel-umbrella.h"; sourceTree = ""; }; + 4D47A9F8604BB1D7EE3F6CC46B6939B1 /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; + 4D4805E9DDAB51282FCDDBEF197F3FFC /* IQKeyboardConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardConstants.swift; path = IQKeyboardCore/Classes/Constants/IQKeyboardConstants.swift; sourceTree = ""; }; + 4D4B40182162CD669ED8D1D713C1A108 /* Core+UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIImageView.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIImageView.swift"; sourceTree = ""; }; + 4D526378FA358EC2F96BAC5D581EFC75 /* ObserverType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverType.swift; path = RxSwift/ObserverType.swift; sourceTree = ""; }; + 4DDFE96FD63E4568E70A89429B350567 /* RxSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.release.xcconfig; sourceTree = ""; }; + 4DEA470D696BF33083541B017CF60B05 /* PreviewPhotoViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewPhotoViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PreviewPhotoViewCell.swift; sourceTree = ""; }; + 4DF8F1CDC802D0250733D25924A17835 /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = ""; }; + 4E1182014BA99CB0BFD1ED56B36F4889 /* Date+Components.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Components.swift"; path = "Sources/SwiftDate/Date/Date+Components.swift"; sourceTree = ""; }; + 4E15CCE57FB545DAC0D33E55EBB19B2A /* yuv_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_sse2.c; path = src/dsp/yuv_sse2.c; sourceTree = ""; }; + 4E1B70895E7D4B191C6A7482FF45BC2E /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/Features/NetworkReachabilityManager.swift; sourceTree = ""; }; + 4E2E8E4E7D7E410B6C94E5C4C0C3DC04 /* NSTextAttachment+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextAttachment+Kingfisher.swift"; path = "Sources/Extensions/NSTextAttachment+Kingfisher.swift"; sourceTree = ""; }; + 4E36CFCF21F8FB81BAA8FBA2F261E949 /* DictionaryTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DictionaryTransform.swift; path = Sources/DictionaryTransform.swift; sourceTree = ""; }; + 4E558D8C6D3AFA14C61F24DA97C33E8F /* YBImageBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBImageBrowser.h; path = YBImageBrowser/YBImageBrowser.h; sourceTree = ""; }; + 4E62540E472572F4BB15B036489695F3 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJExtension/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 4E65F085B0A0714C132C36302B52DEF4 /* WebP.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebP.framework; path = Vendor/WebP.framework; sourceTree = ""; }; + 4E70EBF8D3A2110BAE7AB2F5C0FCE6B7 /* YBIBVideoCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoCell.h; path = Video/YBIBVideoCell.h; sourceTree = ""; }; + 4E8D0DAD81814DB92CFEE73A78339252 /* tree_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = tree_enc.c; path = src/enc/tree_enc.c; sourceTree = ""; }; + 4E9633A6F0549DD0FA20124BD54A186F /* MJRefreshConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConfig.m; path = MJRefresh/MJRefreshConfig.m; sourceTree = ""; }; + 4EB58ABC19057B8242704E3499769C82 /* KeychainWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainWrapper.swift; path = SwiftKeychainWrapper/KeychainWrapper.swift; sourceTree = ""; }; + 4EC813ED21BF52910890B2D6E3F54ECD /* YYAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYAnimatedImageView.h; path = YYImage/YYAnimatedImageView.h; sourceTree = ""; }; + 4EEDDA2C8BA124FCC4F0D3BA74E7881E /* ZXSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXSDK.debug.xcconfig; sourceTree = ""; }; + 4EF66DE3B3203486D7F366B2E5AAD62A /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; + 4F087BB3235520C3C84B06484C182445 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; + 4F193B62510CE37DFCF289B85FBBE78F /* LottieSwitch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieSwitch.swift; path = Sources/Public/Controls/LottieSwitch.swift; sourceTree = ""; }; + 4F1DC11660BCCAEE4264510FD65F5749 /* CollectionViewSectionedDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CollectionViewSectionedDataSource.swift; path = Sources/RxDataSources/CollectionViewSectionedDataSource.swift; sourceTree = ""; }; + 4F2253C444203F6FFFE1CEF38084CC72 /* IQKeyboardToolbar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbar-prefix.pch"; sourceTree = ""; }; + 4F3BA19563A1CD125A820FAECF01DAD1 /* PrimitiveSequence+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Zip+arity.swift"; path = "RxSwift/Traits/PrimitiveSequence/PrimitiveSequence+Zip+arity.swift"; sourceTree = ""; }; + 4F4493CF215BF661CDF160795093A360 /* lossless_enc_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_mips_dsp_r2.c; path = src/dsp/lossless_enc_mips_dsp_r2.c; sourceTree = ""; }; + 4F4A9FE6A3F2ACD446C28FAE8E1F0E53 /* UIView+SwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+SwiftUIView.swift"; path = "Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/UIView+SwiftUIView.swift"; sourceTree = ""; }; + 4FB94AE8C5C0B522D4E322D48D4429C0 /* EpoxyableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyableView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/EpoxyableView.swift; sourceTree = ""; }; + 4FCC1C19DDE1E49C438978C0B7E9C33E /* IQKeyboardManager+ActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ActiveConfiguration.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ActiveConfiguration.swift"; sourceTree = ""; }; + 4FCEA9AD6C802E052AB4F36F955C37E9 /* PreCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/PreCompositionLayer.swift; sourceTree = ""; }; + 4FE9017C4BF1888D86038C0AADE59478 /* FramePingResp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FramePingResp.swift; path = Source/FramePingResp.swift; sourceTree = ""; }; + 4FF5C188C69C55F5F58943A32C6A5590 /* filter_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filter_enc.c; path = src/enc/filter_enc.c; sourceTree = ""; }; + 500DC6BC616ED25251A50A86C36870BA /* CocoaMQTT5Message.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTT5Message.swift; path = Source/CocoaMQTT5Message.swift; sourceTree = ""; }; + 503405F11788ADB88FD0ED81209159EE /* KingfisherManager+LivePhoto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KingfisherManager+LivePhoto.swift"; path = "Sources/General/KingfisherManager+LivePhoto.swift"; sourceTree = ""; }; + 504C9200A2BCDBCE5D1038BE5C36DC92 /* Defaults+StringToBool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+StringToBool.swift"; path = "Sources/Defaults+StringToBool.swift"; sourceTree = ""; }; + 5057B056546FEDFFD71C7FFDC03FF7D0 /* DDASLLogCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogCapture.m; path = Sources/CocoaLumberjack/DDASLLogCapture.m; sourceTree = ""; }; 5069D199AB328CCD047E61C632CD7C32 /* SwiftKeychainWrapper */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftKeychainWrapper; path = SwiftKeychainWrapper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 50B45299DA66A11F777502AF15634A23 /* Picker+PhotoTools.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+PhotoTools.swift"; path = "Sources/HXPHPicker/Picker/Util/Picker+PhotoTools.swift"; sourceTree = ""; }; - 50B830DCD4FD06C452454EBFFF301A61 /* huffman_encode_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = huffman_encode_utils.h; path = src/utils/huffman_encode_utils.h; sourceTree = ""; }; - 50BEB8D58D55B2FCF2EC6E5DFC90DAC7 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = ""; }; - 50D8313D8270CA25B860F255BE28A21D /* TakeLast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeLast.swift; path = RxSwift/Observables/TakeLast.swift; sourceTree = ""; }; - 50ED832AF109F2B258D94F54C004E6F6 /* SDImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoder.m; path = SDWebImage/Core/SDImageCoder.m; sourceTree = ""; }; - 5110D595F02FD67EECD601B158E606C1 /* TextAnimatorNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAnimatorNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift; sourceTree = ""; }; - 511BDA791EC00DB0404C15C4E11A8BA1 /* MAGroundOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGroundOverlayRenderer.h; path = MAMapKit.framework/Headers/MAGroundOverlayRenderer.h; sourceTree = ""; }; - 5164BCEA802EC5E7E644A805573775FB /* MAMultiPointOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPointOverlay.h; path = MAMapKit.framework/Headers/MAMultiPointOverlay.h; sourceTree = ""; }; + 507C90449A9C2A97E2871ACAC9B1A441 /* alpha_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_dec.c; path = src/dec/alpha_dec.c; sourceTree = ""; }; + 50A29C91398140EF644669A498986A8D /* PhotoListCellConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoListCellConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PhotoListCellConfiguration.swift; sourceTree = ""; }; + 50A7A193651AB0CFCF223595CA19AA95 /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/Private/EmbeddedLibraries/ZipFoundation/Entry.swift; sourceTree = ""; }; + 50B2799B201F8DE8120BD7D5DF850756 /* YBIBContainerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBContainerView.h; path = YBImageBrowser/Base/YBIBContainerView.h; sourceTree = ""; }; + 50B69BB9C494FCADD9F52F68B4745C13 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Image/Filter.swift; sourceTree = ""; }; + 50E385227AF12ECBFB0513F6D086049E /* IQKeyboardCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardCore-Info.plist"; sourceTree = ""; }; + 50E7654753D12870F9957B1D05E0070F /* MAGeodesicPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGeodesicPolyline.h; path = MAMapKit.framework/Headers/MAGeodesicPolyline.h; sourceTree = ""; }; + 5163127D0CC7B14BDF70ED1E3ABB888C /* quant.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant.h; path = src/dsp/quant.h; sourceTree = ""; }; + 518C08021C81FCD665925D5FE7DB2D2D /* TextCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/TextCompositionLayer.swift; sourceTree = ""; }; 518C323F07471B8EF777A8488A6431AF /* Pods-QuickLocation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-QuickLocation.release.xcconfig"; sourceTree = ""; }; - 5199447D815E8771DC0B057BD811E2AE /* OIMMergeElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMMergeElem.m; path = OpenIMSDK/Model/OIMMergeElem.m; sourceTree = ""; }; 519AF98C92B517DD023896CD077EBFD4 /* CocoaLumberjack-CocoaLumberjackPrivacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "CocoaLumberjack-CocoaLumberjackPrivacy"; path = CocoaLumberjackPrivacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 51BA12DF890414FF3DD09E9C68FA652D /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/AssetsLibrary.framework; sourceTree = DEVELOPER_DIR; }; 51BA97E8B5085EFFB47BC9C0B785CEA7 /* lottie-ios */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "lottie-ios"; path = Lottie.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 51C1A964478BEE6F4C1DE2808C0CB83F /* SGWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGWeakProxy.m; path = SGQRCode/WeakProxy/SGWeakProxy.m; sourceTree = ""; }; - 51DC42C2419121C34A1A37FAEF5CADCD /* YBIBDataMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBDataMediator.h; path = YBImageBrowser/Base/YBIBDataMediator.h; sourceTree = ""; }; - 51F0C1F7C00691BEF0CFA4F31C54FF3A /* AssetManager+Authorization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+Authorization.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+Authorization.swift"; sourceTree = ""; }; - 51F373DF5148C21C78733AFACF8E29F0 /* GradientStrokeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientStrokeRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift; sourceTree = ""; }; - 51F6B5ECB20B05B4A5117043241B8C90 /* UIView+WebCacheState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheState.m"; path = "SDWebImage/Core/UIView+WebCacheState.m"; sourceTree = ""; }; - 522FFC7277C7384DC812F49DAC6A2BD7 /* AnimationSubview.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationSubview.swift; path = Sources/Public/iOS/AnimationSubview.swift; sourceTree = ""; }; - 525CD205D27F9863472F14703FE96F86 /* IQKeyboardCore-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardCore-dummy.m"; sourceTree = ""; }; - 5267B7BCFE0BDC27381D9A3718337CFC /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Sources/Utility/Result.swift; sourceTree = ""; }; - 52826A20DDBD116B62604609F4896887 /* cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = src/dsp/cpu.h; sourceTree = ""; }; - 52A9B8EECAC572CE3407A8026D6DA569 /* IntegerType+IdentifiableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IntegerType+IdentifiableType.swift"; path = "Sources/RxDataSources/IntegerType+IdentifiableType.swift"; sourceTree = ""; }; - 52DBEA1CC4EF7DC089E199B3B942A583 /* TimeInterval+Formatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TimeInterval+Formatter.swift"; path = "Sources/SwiftDate/Foundation+Extras/TimeInterval+Formatter.swift"; sourceTree = ""; }; - 52DFC3D116D363CE880108238BB7C1B9 /* IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbar.swift; path = IQKeyboardToolbar/Classes/IQKeyboardToolbar.swift; sourceTree = ""; }; - 52E0374CED5B77EA1A9488888C3A901E /* DDFileLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDFileLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDFileLogger.h; sourceTree = ""; }; - 52F73D847B989EAAA31283582D8074C4 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = ""; }; - 5318EE889AE2ED47F81CC78C2069CB35 /* OIMGroupInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMGroupInfo.h; path = OpenIMSDK/Model/OIMGroupInfo.h; sourceTree = ""; }; - 533D9571D1EC332BF0EBA2C3A4F8E994 /* TimePeriod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriod.swift; path = Sources/SwiftDate/TimePeriod/TimePeriod.swift; sourceTree = ""; }; - 5369DE443FA67414E25C47C16C19CDD2 /* YYFrameImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYFrameImage.h; path = YYImage/YYFrameImage.h; sourceTree = ""; }; - 53902042B5E9FA22F75D07AD3A462902 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/Features/ResponseSerialization.swift; sourceTree = ""; }; - 5393BC5A87C5F37D204A620A3F1979BA /* OIMManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMManager.h; path = OpenIMSDK/Interface/OIMManager.h; sourceTree = ""; }; - 53E27EF908C7FB5EFEE14ADD95C69C96 /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; - 53EE3FDC6BBE60EB6D5FD6C0201E710A /* PhotoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoManager.swift; path = Sources/HXPHPicker/Core/Util/PhotoManager.swift; sourceTree = ""; }; - 53F1950A2EA3EAEE2DB8542A2B3D3F33 /* PhotoPickerViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPickerViewCell.swift; sourceTree = ""; }; - 541168B5F63506CE532597108DD96983 /* SGScanCodeDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGScanCodeDelegate.h; path = SGQRCode/QRCode/SGScanCodeDelegate.h; sourceTree = ""; }; - 541F4A250353BC493AD6863F891D9F95 /* SDFileAttributeHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDFileAttributeHelper.m; path = SDWebImage/Private/SDFileAttributeHelper.m; sourceTree = ""; }; - 5437C08DBD79B497818F7354E847A2DD /* SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SharedSequence.swift; path = RxCocoa/Traits/SharedSequence/SharedSequence.swift; sourceTree = ""; }; - 5453B61652D70959B356E49D87F13FA2 /* YBIBImageCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageCell.h; path = YBImageBrowser/Image/YBIBImageCell.h; sourceTree = ""; }; - 547E17D5968AAA672C509552228E9667 /* anim_encode.c */ = {isa = PBXFileReference; includeInIndex = 1; name = anim_encode.c; path = src/mux/anim_encode.c; sourceTree = ""; }; - 5481AA91905207DFC89661643C0EFD89 /* DDLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDLog.m; path = Sources/CocoaLumberjack/DDLog.m; sourceTree = ""; }; - 5481E8B55B3E97A187B601A410FD66DB /* DisplayLink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisplayLink.swift; path = Sources/Utility/DisplayLink.swift; sourceTree = ""; }; - 54840BCE2FF7D34360F15C8D7EE872EC /* OIMSearchParam.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSearchParam.h; path = OpenIMSDK/Model/OIMSearchParam.h; sourceTree = ""; }; - 54869EC81C5539A8AD92881BFD342D18 /* LayerEffect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerEffect.swift; path = Sources/Private/Model/LayerEffects/LayerEffect.swift; sourceTree = ""; }; - 54A3F0BF75389BB6C8ACD25D8C0B04B9 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = ""; }; - 54B4A854479D2A862E4A10285D168D0F /* ImageTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTransition.swift; path = Sources/Image/ImageTransition.swift; sourceTree = ""; }; - 54D4326B12078EADA37433D8A7688F45 /* MASConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraint.m; path = Masonry/MASConstraint.m; sourceTree = ""; }; - 5581B1DE9E573F96230513861EAC652D /* fromAsync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = fromAsync.swift; path = Source/RxSwift/fromAsync.swift; sourceTree = ""; }; - 558D712381B568AD9457624A9865B29B /* RxSwiftExt-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxSwiftExt-dummy.m"; sourceTree = ""; }; - 5592B24A3177FEA4ABEED9D0B3A6F84B /* ShapeRenderLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeRenderLayer.swift; path = Sources/Private/MainThread/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift; sourceTree = ""; }; - 559EB65974650632BD59D0C0A9472C5E /* RxRelay-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxRelay-Info.plist"; sourceTree = ""; }; - 55A2692DAD3BED620DA0EB83FC8A09FE /* yuv_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_mips_dsp_r2.c; path = src/dsp/yuv_mips_dsp_r2.c; sourceTree = ""; }; - 55EA2E5B9949ED4975A64ED4EF5C4522 /* RequestCompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestCompression.swift; path = Source/Features/RequestCompression.swift; sourceTree = ""; }; - 55FD0B6A9D6EEFE6A1C9B281B105F80F /* AnimationImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationImageProvider.swift; path = Sources/Public/ImageProvider/AnimationImageProvider.swift; sourceTree = ""; }; - 560ABA646A2022BD1E5E93D0A9E39B26 /* OIMGroupApplicationInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMGroupApplicationInfo.h; path = OpenIMSDK/Model/OIMGroupApplicationInfo.h; sourceTree = ""; }; - 5631AFA1B502DB722A84A7D8AEBC9608 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardNotification/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 564EC0EDD2FAFB0AF6925E211B89F1CD /* SDImageFramePool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFramePool.h; path = SDWebImage/Private/SDImageFramePool.h; sourceTree = ""; }; - 565598230E6135EF0029F6DFA99179EE /* OIMFullUserInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMFullUserInfo.m; path = OpenIMSDK/Model/OIMFullUserInfo.m; sourceTree = ""; }; - 568B09274F880366B93DA437F7833148 /* YBIBLoadingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBLoadingView.m; path = YBImageBrowser/AuxiliaryView/YBIBLoadingView.m; sourceTree = ""; }; - 56AE43789F036F7E37E7C78CE526A331 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = ""; }; - 56B8A080F84269FEB98617E83C0454DC /* CallbackProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CallbackProxy.m; path = OpenIMSDK/CallbackProxy/CallbackProxy.m; sourceTree = ""; }; - 56C83FF28405BC4C60D1E897F48C954F /* thread_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = thread_utils.c; path = src/utils/thread_utils.c; sourceTree = ""; }; - 56C8858466B5059D32D3438BB36FF23C /* SDDeviceHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDeviceHelper.h; path = SDWebImage/Private/SDDeviceHelper.h; sourceTree = ""; }; - 571DADB16DAF9DD3606BAC0AD82E99A9 /* URL+Moya.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+Moya.swift"; path = "Sources/Moya/URL+Moya.swift"; sourceTree = ""; }; - 573439E4451FA391A0ED73513D17D6D4 /* MAMapView+Resource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MAMapView+Resource.h"; path = "MAMapKit.framework/Headers/MAMapView+Resource.h"; sourceTree = ""; }; - 574CAF553188FC3A01A0AEDBB464EF34 /* MATerrainOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATerrainOverlay.h; path = MAMapKit.framework/Headers/MATerrainOverlay.h; sourceTree = ""; }; - 5751CB4FB7042A2EF15A1E430570581E /* Region.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Region.swift; path = Sources/SwiftDate/DateInRegion/Region.swift; sourceTree = ""; }; - 5761947A8E5C4B96B80D8634E5181BC3 /* KeychainWrapperSubscript.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainWrapperSubscript.swift; path = SwiftKeychainWrapper/KeychainWrapperSubscript.swift; sourceTree = ""; }; - 57693EF93CD5CEFDC6308D6BDAB5934B /* VideoEditorCropViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorCropViewCell.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorCropViewCell.swift; sourceTree = ""; }; - 576B79FED5EC1392CFDE58BFFB2CC4A0 /* BinaryDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDisposable.swift; path = RxSwift/Disposables/BinaryDisposable.swift; sourceTree = ""; }; - 57760EBDF3FB84060CA612EBDDE56C1C /* StarNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StarNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/StarNode.swift; sourceTree = ""; }; - 577E69204BACD94290D8AA0F05255858 /* EnumTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnumTransform.swift; path = Sources/EnumTransform.swift; sourceTree = ""; }; - 57B0EA9833CE74F30D475E5DEED4A1DC /* MAAnimatedAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnimatedAnnotation.h; path = MAMapKit.framework/Headers/MAAnimatedAnnotation.h; sourceTree = ""; }; - 57C5F40A9D38F5D71424CF3307F62112 /* SDWebImageTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransition.h; path = SDWebImage/Core/SDWebImageTransition.h; sourceTree = ""; }; - 57CDD5F0D5ADF12E245977A57296A75F /* MakeViewProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MakeViewProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/MakeViewProviding.swift; sourceTree = ""; }; - 57E2B9941F8CBF419C46C68C9AF8CE62 /* SDCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDCollectionViewCell.h; path = SDCycleScrollView/Lib/SDCycleScrollView/SDCollectionViewCell.h; sourceTree = ""; }; - 57E9017AEEC33B5ECECDD10EAB6C564E /* RxDataSources-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxDataSources-dummy.m"; sourceTree = ""; }; - 57ECE45D936904EF5023F94ACECA8520 /* ControlEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlEvent.swift; path = RxCocoa/Traits/ControlEvent.swift; sourceTree = ""; }; - 57F2F6105FAEB977A72B69CDA9E35CEF /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = ""; }; - 57F981F58E1DB9D729CF4481BFD2287F /* DDAssert.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DDAssert.swift; path = Sources/CocoaLumberjackSwift/DDAssert.swift; sourceTree = ""; }; - 580691100EB70A5ACF290F17FF4D84F6 /* PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrimitiveSequence.swift; path = RxSwift/Traits/PrimitiveSequence/PrimitiveSequence.swift; sourceTree = ""; }; - 58210E256435ABC11184FBEC80BBAD31 /* AMapSearch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapSearch.release.xcconfig; sourceTree = ""; }; - 583EBFC93BECC151571D0013BD13AE47 /* tree_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = tree_enc.c; path = src/enc/tree_enc.c; sourceTree = ""; }; - 584B397D010BE3052C3967E87A313165 /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; - 587526430D6035E65DAF5B13CA90B45D /* HistoricalSchedulerTimeConverter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalSchedulerTimeConverter.swift; path = RxSwift/Schedulers/HistoricalSchedulerTimeConverter.swift; sourceTree = ""; }; - 5875DE076530A11A7D58B4A3F7C35B1C /* KingfisherWebP.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KingfisherWebP.release.xcconfig; sourceTree = ""; }; - 58A066A3C3FB7F76C197EADAE084688C /* YBIBUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBUtilities.m; path = YBImageBrowser/Helper/YBIBUtilities.m; sourceTree = ""; }; + 51C4B6A72A5C25F467F679AA6756374B /* Maybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Maybe.swift; path = RxSwift/Traits/PrimitiveSequence/Maybe.swift; sourceTree = ""; }; + 520200F35D7AC74EBA71E00F2CBF4F38 /* alpha_processing_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_sse2.c; path = src/dsp/alpha_processing_sse2.c; sourceTree = ""; }; + 522607A5314BF8105FC7AA0003C2790A /* YBIBVideoView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoView.h; path = Video/YBIBVideoView.h; sourceTree = ""; }; + 524B28EBB88699EA3D332A42A3619B8E /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; + 524F638285FA3A2ABDFCF6B787490342 /* rescaler_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_utils.c; path = src/utils/rescaler_utils.c; sourceTree = ""; }; + 5262A8466C222B81F01152B34DA64A09 /* AVAssetImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AVAssetImageDataProvider.swift; path = Sources/General/ImageSource/AVAssetImageDataProvider.swift; sourceTree = ""; }; + 52A20B3BF7B48A758BC8D999EB4539AE /* URLMatchResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLMatchResult.swift; path = Sources/URLMatcher/URLMatchResult.swift; sourceTree = ""; }; + 52B031927313E161861104668E21A8DE /* OIMNotificationElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMNotificationElem.h; path = OpenIMSDK/Model/OIMNotificationElem.h; sourceTree = ""; }; + 52C8C7A591F76293D6D6BEE0D5C27010 /* AMapSearchKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchKit.h; path = AMapSearchKit.framework/Headers/AMapSearchKit.h; sourceTree = ""; }; + 52D1166499BF80F225745AF3A61670DD /* EditorImageResizerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorImageResizerView.swift; path = Sources/HXPHPicker/Editor/View/Photo/EditorImageResizerView.swift; sourceTree = ""; }; + 52DE37F1AAEEF218852464F11E143656 /* LayerDebugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerDebugging.swift; path = Sources/Private/Utility/Debugging/LayerDebugging.swift; sourceTree = ""; }; + 52DF6CFFEA5B2F7347476A2524E03780 /* filters_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_sse2.c; path = src/dsp/filters_sse2.c; sourceTree = ""; }; + 52E0CA4A9F089F647F586FB444DBEF13 /* OIMNotificationElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMNotificationElem.m; path = OpenIMSDK/Model/OIMNotificationElem.m; sourceTree = ""; }; + 52ED7B4D2CAEA2EACAF3CAE743DB8D1D /* UIView+IQKeyboardExtensionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtensionDeprecated.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtensionDeprecated.swift"; sourceTree = ""; }; + 52F8D243AD8458EB2B14CD5EFB786D3A /* ObjectMapper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ObjectMapper-umbrella.h"; sourceTree = ""; }; + 530D37E6D2B62B3C6E8375CD070A1ED6 /* IQKeyboardManager+Appearance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Appearance.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance.swift"; sourceTree = ""; }; + 53184C1114CEE9521E8AB97A2DB43893 /* EditorStickerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerView.swift; sourceTree = ""; }; + 532E9030A15F6711B544C8BEAAB3529F /* LottieAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimation.swift; path = Sources/Public/Animation/LottieAnimation.swift; sourceTree = ""; }; + 53594C8166DD9CECAC206989DD8F274D /* MJFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJFoundation.m; path = MJExtension/MJFoundation.m; sourceTree = ""; }; + 536DEEB258E2B70900710B5E8FC66D08 /* MAAnnotationMoveAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotationMoveAnimation.h; path = MAMapKit.framework/Headers/MAAnnotationMoveAnimation.h; sourceTree = ""; }; + 5395433AE72618F4C6E62E1EAD06583D /* MACircleRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACircleRenderer.h; path = MAMapKit.framework/Headers/MACircleRenderer.h; sourceTree = ""; }; + 53A4EFF13E5D8770804115A05B68B1C5 /* SDDisplayLink.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDisplayLink.m; path = SDWebImage/Private/SDDisplayLink.m; sourceTree = ""; }; + 53A748F8442ACE4E6959806D00DB0272 /* Changeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Changeset.swift; path = Sources/Differentiator/Changeset.swift; sourceTree = ""; }; + 53CAB2921C752E78CA55B05D3BE85065 /* OIMSearchResultInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSearchResultInfo.m; path = OpenIMSDK/Model/OIMSearchResultInfo.m; sourceTree = ""; }; + 53F52C3A02F01324899BC12175E83B1E /* FloatValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FloatValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift; sourceTree = ""; }; + 53F75E2A009040E7C88B0F41EF87FC7B /* Editor+UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Editor+UIImageView.swift"; path = "Sources/HXPHPicker/Editor/Util/Editor+UIImageView.swift"; sourceTree = ""; }; + 53F8B1507A4C52B30BD509386B591FD6 /* Data+Serialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Serialization.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Data+Serialization.swift"; sourceTree = ""; }; + 540AF0A1A3033C4B8E1EA0CD46426BD6 /* DispatchQueueConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DispatchQueueConfiguration.swift; path = RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift; sourceTree = ""; }; + 543767B9CF81EDA9400B0DF8D3EEE564 /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; }; + 543C52D19DFF7450FD0F1BFCDEBDB90B /* MarqueeLabel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MarqueeLabel.release.xcconfig; sourceTree = ""; }; + 546737B43CD88885573162690F1B1567 /* URLNavigator-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "URLNavigator-umbrella.h"; sourceTree = ""; }; + 548902D1C1F1F472857640F1054B46CC /* TagListView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagListView.swift; path = TagListView/TagListView.swift; sourceTree = ""; }; + 54C7EFF876F691F4BD0D240C539E241D /* AddRef.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AddRef.swift; path = RxSwift/Observables/AddRef.swift; sourceTree = ""; }; + 54CE1D0923681693A97900F260F5D57A /* SGGenerateQRCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGGenerateQRCode.h; path = SGQRCode/QRCode/SGGenerateQRCode.h; sourceTree = ""; }; + 54E4EED20E396CB065FE382ED36B44A1 /* DataSources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataSources.swift; path = Sources/RxDataSources/DataSources.swift; sourceTree = ""; }; + 550003481FF70BAFA7B39AADB487E760 /* FrameAuth.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameAuth.swift; path = Source/FrameAuth.swift; sourceTree = ""; }; + 5516434AFE89CDE1669E3995A27B09FE /* EpoxyableView+SwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "EpoxyableView+SwiftUIView.swift"; path = "Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxyableView+SwiftUIView.swift"; sourceTree = ""; }; + 5520E606C013E1A2620E94D8169AF82C /* Observable+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Concurrency.swift"; path = "RxSwift/Observable+Concurrency.swift"; sourceTree = ""; }; + 5593B53EE9179304F30998CE87A02732 /* URLPatchComponentMatchResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLPatchComponentMatchResult.swift; path = Sources/URLMatcher/URLPatchComponentMatchResult.swift; sourceTree = ""; }; + 55A50E8CBFB62149F0DCE7D564030662 /* CallbackProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CallbackProxy.m; path = OpenIMSDK/CallbackProxy/CallbackProxy.m; sourceTree = ""; }; + 55A85B8F88C0FFFDA82F7292E474114A /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; + 55B16604977C9DD7CC41867CF659D286 /* UnitBezier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UnitBezier.swift; path = Sources/Private/Utility/Primitives/UnitBezier.swift; sourceTree = ""; }; + 55D46CF71D5154F263AC8564AA723692 /* MAParticleOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlayRenderer.h; path = MAMapKit.framework/Headers/MAParticleOverlayRenderer.h; sourceTree = ""; }; + 560267D27DA0FB5CD68E69E62A79BFF6 /* PhotoEditorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorView.swift; sourceTree = ""; }; + 5625B9E2F5C57D4695967DE287CA1547 /* io_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = io_dec.c; path = src/dec/io_dec.c; sourceTree = ""; }; + 5630C95267C5EDAFCAA18472484F8E66 /* CocoaMQTT-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaMQTT-umbrella.h"; sourceTree = ""; }; + 569BA4EC75A7753E8E96D8A92267A5D3 /* DisposeBag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBag.swift; path = RxSwift/Disposables/DisposeBag.swift; sourceTree = ""; }; + 56A5A309D34A2E484F6D17F00DAA899C /* SharedSequence+Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Operators.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Operators.swift"; sourceTree = ""; }; + 56BA8582242132FCF45DE6D6F7D5E756 /* AMapFoundationKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationKit.h; path = AMapFoundationKit.framework/Headers/AMapFoundationKit.h; sourceTree = ""; }; + 56C132AB3EA4F392D2A8DD774E65EFEE /* RxCollectionViewSectionedReloadDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewSectionedReloadDataSource.swift; path = Sources/RxDataSources/RxCollectionViewSectionedReloadDataSource.swift; sourceTree = ""; }; + 56C4621AA9773E450944A7A00C7F17A1 /* ImageTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageTransition.swift; path = Sources/Image/ImageTransition.swift; sourceTree = ""; }; + 56CE73BB666FB1014D9B132720BD8776 /* CameraViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraViewController.swift; path = Sources/HXPHPicker/Picker/Controller/CameraViewController.swift; sourceTree = ""; }; + 56F63B4CF7F8651C02683E839A24EC1B /* FillRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FillRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift; sourceTree = ""; }; + 570E6DBF4A44E5546A3C965D9E18073A /* SubjectType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubjectType.swift; path = RxSwift/Subjects/SubjectType.swift; sourceTree = ""; }; + 571BB5738ACB42F42C34CE19067238F4 /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; + 572C33F4140022FE99118556F038018B /* Sample.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sample.swift; path = RxSwift/Observables/Sample.swift; sourceTree = ""; }; + 57392B079508E1A952EB83F397A6AD5B /* ReplayRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplayRelay.swift; path = RxRelay/ReplayRelay.swift; sourceTree = ""; }; + 5758CE5A67AFA979046916DC97CC125B /* NSView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSView+Rx.swift"; path = "RxCocoa/macOS/NSView+Rx.swift"; sourceTree = ""; }; + 57893FB92C503783316937718B7D6CFE /* Formatter+Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Formatter+Protocols.swift"; path = "Sources/SwiftDate/Formatters/Formatter+Protocols.swift"; sourceTree = ""; }; + 57A2457AF7E1D5EF7A21A2F3D540DA59 /* YBIBVideoCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoCell.m; path = Video/YBIBVideoCell.m; sourceTree = ""; }; + 57A5630091B1B1F7BEB362A6247CA11C /* Font.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Font.swift; path = Sources/Private/Model/Text/Font.swift; sourceTree = ""; }; + 57AFF0686BCCD3B8F8E64BF3694786B1 /* FramePubRec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FramePubRec.swift; path = Source/FramePubRec.swift; sourceTree = ""; }; + 57B4109175DBB8D4D441F6102ED76412 /* ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist"; sourceTree = ""; }; + 57C8B09E9B907A910FA2CA113D4EE94C /* lossless_enc_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_mips32.c; path = src/dsp/lossless_enc_mips32.c; sourceTree = ""; }; + 57CD8A4DBF03A8134B3DF489CCC344E3 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/Features/MultipartFormData.swift; sourceTree = ""; }; + 57DACE5762DB2310A02D85503ED9DED1 /* MJProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJProperty.h; path = MJExtension/MJProperty.h; sourceTree = ""; }; + 57DAE67362F099548C9435D60264C18C /* EffectValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EffectValue.swift; path = Sources/Private/Model/LayerEffects/EffectValues/EffectValue.swift; sourceTree = ""; }; + 57E35B7EB1A35EA7A210180295460940 /* ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist"; sourceTree = ""; }; + 57E3B3CB9A7E71E3C41DDC8AC8973B74 /* IQTextView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQTextView-dummy.m"; sourceTree = ""; }; + 57E872926A9F0A58259D98D0E6C8AD28 /* cascade.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = cascade.swift; path = Source/RxSwift/cascade.swift; sourceTree = ""; }; + 57F61591FF5B1753F1EDA95DD7F1F221 /* IQKeyboardManager+Resign_Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Resign_Deprecated.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardManager+Resign_Deprecated.swift"; sourceTree = ""; }; + 57F68566C1D13B6EF1FE82022B5A1E98 /* LottieColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieColor.swift; path = Sources/Public/Primitives/LottieColor.swift; sourceTree = ""; }; + 5801738C638163C98246CB6F00BA28B0 /* Popover.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Popover.modulemap; sourceTree = ""; }; + 58040DF6D7E6F543B8DB10D3E910311E /* ThreadSafeDictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThreadSafeDictionary.swift; path = Source/ThreadSafeDictionary.swift; sourceTree = ""; }; + 581BE4EB6C70F24C0FEE8559206D377C /* UI+SectionedViewType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UI+SectionedViewType.swift"; path = "Sources/RxDataSources/UI+SectionedViewType.swift"; sourceTree = ""; }; + 58257C6D930B04CA0CE4B0BC5E9FBA44 /* ImageContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageContext.swift; path = Sources/SwiftUI/ImageContext.swift; sourceTree = ""; }; + 583B4C6A567749AA875BA86DF64F5671 /* RxCocoa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RxCocoa.h; path = RxCocoa/RxCocoa.h; sourceTree = ""; }; + 5848253A22D6396B7A068D7D2A0277C9 /* MJRefresh-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-umbrella.h"; sourceTree = ""; }; + 584FC894D422101627A0823336B995E1 /* IQKeyboardToolbarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardToolbarManager-Info.plist"; sourceTree = ""; }; + 5852FF1C0268DBCE67F0F0E39DE0B510 /* AMapSearchObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchObj.h; path = AMapSearchKit.framework/Headers/AMapSearchObj.h; sourceTree = ""; }; + 586CAB7528D3A6B6645EDB5A9397E2FB /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; + 58786133E8B41F9CB8F1338AF6A58900 /* Catch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catch.swift; path = RxSwift/Observables/Catch.swift; sourceTree = ""; }; + 5890D279B149E323005199F6CC97AF35 /* OpenIMSDKCore-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "OpenIMSDKCore-xcframeworks.sh"; sourceTree = ""; }; 58AE0544E0C381DDBD09356C357EC82B /* SwiftDate */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftDate; path = SwiftDate.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 58B9B2BED448FF6B8E278E87D6D430A3 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 58D937DEC9A6DADC4020FC73AD7DB7DD /* OIMMergeElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMMergeElem.h; path = OpenIMSDK/Model/OIMMergeElem.h; sourceTree = ""; }; - 58EB1FF15EF91274F887D47E933DE7AF /* mapTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = mapTo.swift; path = Source/RxSwift/mapTo.swift; sourceTree = ""; }; - 5948948C27B1B8C08ABE3DB6DCCEE651 /* SwiftyJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftyJSON-Info.plist"; sourceTree = ""; }; - 598460A5DF3B56203B29D01ECAC0F8F9 /* ShapeItemLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeItemLayer.swift; path = Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift; sourceTree = ""; }; - 598A7AAC951814B1308789BB200D8911 /* Box.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Box.swift; path = Sources/Utility/Box.swift; sourceTree = ""; }; - 59A43B984C0AF852A6F8AB9E25671AE5 /* OIMSearchParam.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSearchParam.m; path = OpenIMSDK/Model/OIMSearchParam.m; sourceTree = ""; }; - 59AB42D5F7656B8882D8F442ED7CC8B8 /* mapMany.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = mapMany.swift; path = Source/RxSwift/mapMany.swift; sourceTree = ""; }; - 59AC7679378D0A2B32322B3D52CC590D /* ShapeAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeAnimation.swift; path = Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift; sourceTree = ""; }; - 59F548CA31617CF52B2B366F78407B53 /* RxDataSources-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxDataSources-Info.plist"; sourceTree = ""; }; - 59FC1BD33170A2BC4D498D0B282E04C9 /* LayerTextProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerTextProvider.swift; path = Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift; sourceTree = ""; }; - 59FF3CB194901CFCF1A50573DE01113E /* YBIBVideoCell+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBVideoCell+Internal.h"; path = "Video/YBIBVideoCell+Internal.h"; sourceTree = ""; }; - 5A53DA679B0F0E0C5A4B89F6FDDADC73 /* IQKeyboardResignHandler+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardResignHandler+Internal.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardResignHandler+Internal.swift"; sourceTree = ""; }; - 5A9024578942964BD08F0109992B3280 /* Source.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Source.swift; path = Sources/General/ImageSource/Source.swift; sourceTree = ""; }; - 5AA735164364C8F331D4C9C21EA6F20C /* GroupInterpolator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupInterpolator.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift; sourceTree = ""; }; - 5AA9CF87A7F0EBCDA4F896271A17A3F8 /* YBIBWebImageMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBWebImageMediator.h; path = YBImageBrowser/WebImageMediator/YBIBWebImageMediator.h; sourceTree = ""; }; - 5AABA4A903D3B1748D2F7ABD73C518B1 /* common_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_dec.h; path = src/dec/common_dec.h; sourceTree = ""; }; - 5ABF25F38B5335217BB50A39B134AF62 /* HXPHPicker.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = HXPHPicker.modulemap; sourceTree = ""; }; - 5AD1ACB4D0E1933E41E73484E8ACF882 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; sourceTree = ""; }; - 5AD9B8FCF4FD89F4D5143063C5E7A0D0 /* IQKeyboardInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardInfo.swift; path = IQKeyboardNotification/Classes/IQKeyboardInfo.swift; sourceTree = ""; }; - 5AED70B7B68386C79189CD6256E14B99 /* Array+Sort.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Sort.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/Array+Sort.swift"; sourceTree = ""; }; - 5B181ACC3F219337AE64C826FE02B413 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; sourceTree = ""; }; - 5B1E426822FE7CAA3703A573A0281F51 /* ObservableType+PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+PrimitiveSequence.swift"; path = "RxSwift/Traits/PrimitiveSequence/ObservableType+PrimitiveSequence.swift"; sourceTree = ""; }; - 5B58ED15172BCCF27E385B5BF68A6918 /* MJExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MJExtension-Info.plist"; sourceTree = ""; }; - 5B96C38EC76CED40A0CD2DDF5B1DB12A /* Infallible+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Debug.swift"; path = "RxSwift/Traits/Infallible/Infallible+Debug.swift"; sourceTree = ""; }; - 5BB2959D3499F806D0273059BF3598F6 /* Cancellable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancellable.swift; path = Sources/Moya/Cancellable.swift; sourceTree = ""; }; - 5BB390B0E40E89FDDE554F21ECB7CCF1 /* YBIBTopView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBTopView.h; path = YBImageBrowser/ToolView/YBIBTopView.h; sourceTree = ""; }; - 5BDC964E4BDB8D2FC07223D96BD59013 /* Placeholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Placeholder.swift; path = Sources/Image/Placeholder.swift; sourceTree = ""; }; - 5BEF055B7F4F83D3D0FEE7E0F24A888D /* YBIBAuxiliaryViewHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBAuxiliaryViewHandler.h; path = YBImageBrowser/AuxiliaryView/YBIBAuxiliaryViewHandler.h; sourceTree = ""; }; - 5BF71EAF82417B414C95B361533EE14D /* YBIBIconManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBIconManager.h; path = YBImageBrowser/Helper/YBIBIconManager.h; sourceTree = ""; }; - 5BFD69CA959D1A9B459B375E711D2513 /* MASViewAttribute.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewAttribute.m; path = Masonry/MASViewAttribute.m; sourceTree = ""; }; - 5BFE805D984AAEF8498138BA0166F120 /* SizeValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SizeValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift; sourceTree = ""; }; - 5C08C88751394A41AA41DF435BE9B690 /* SectionModelType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionModelType.swift; path = Sources/Differentiator/SectionModelType.swift; sourceTree = ""; }; - 5C26C5D03455E309DF3A4CCB403C5CB1 /* TimeStructures.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimeStructures.swift; path = Sources/SwiftDate/Supports/TimeStructures.swift; sourceTree = ""; }; - 5C4A63F49D323F784BCA69785BB2D563 /* VideoCroppingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoCroppingConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/VideoCroppingConfiguration.swift; sourceTree = ""; }; - 5C4D9BE2EA61918FA56C7073CC77DB33 /* IQKeyboardManagerSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.debug.xcconfig; sourceTree = ""; }; - 5C6097CD51385779D9DD1CD30E169A70 /* DateInRegion+Components.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Components.swift"; path = "Sources/SwiftDate/DateInRegion/DateInRegion+Components.swift"; sourceTree = ""; }; - 5C82451206DF153E55585157CFB2164B /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; - 5C8BC587C73189ADA5510B1B9B628F89 /* MJExtensionConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJExtensionConst.m; path = MJExtension/MJExtensionConst.m; sourceTree = ""; }; - 5C92449F72A6498CADEADD96E8DC26B9 /* ObservableType+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+Extensions.swift"; path = "RxSwift/ObservableType+Extensions.swift"; sourceTree = ""; }; - 5CC6895CB40EF7ADB0A3C945CEDFF07F /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; + 58BCBEA4DC72DA1F90CEE9B583D7D999 /* MAMapVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapVersion.h; path = MAMapKit.framework/Headers/MAMapVersion.h; sourceTree = ""; }; + 58BCD5CBFF14B89ADBDF291E1F9D9272 /* MAMVTTileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMVTTileOverlay.h; path = MAMapKit.framework/Headers/MAMVTTileOverlay.h; sourceTree = ""; }; + 58C7B6E7A775424F09E7E14CA00C5CA6 /* URLNavigator.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = URLNavigator.release.xcconfig; sourceTree = ""; }; + 58D60D2BC095F0CBD500F458C40B265D /* OIMCustomElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMCustomElem.m; path = OpenIMSDK/Model/OIMCustomElem.m; sourceTree = ""; }; + 58E05B5C93BADAEFD58E919F0B6DB5D0 /* Moya-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Moya-umbrella.h"; sourceTree = ""; }; + 58FFDDCF04DB129070555E67F7D62F4B /* CompositionLayersInitializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositionLayersInitializer.swift; path = Sources/Private/MainThread/LayerContainers/Utility/CompositionLayersInitializer.swift; sourceTree = ""; }; + 590BD5EE2F1B73CAD4BA76A24A89F755 /* PhotoAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoAsset.swift; path = Sources/HXPHPicker/Picker/Model/PhotoAsset.swift; sourceTree = ""; }; + 591FE62A8AED50273FB3FD3B80759AF3 /* materialized+elements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "materialized+elements.swift"; path = "Source/RxSwift/materialized+elements.swift"; sourceTree = ""; }; + 59306A0835C1BE58B6CBDF64FF22DF38 /* MJRefreshTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshTrailer.h; path = MJRefresh/Base/MJRefreshTrailer.h; sourceTree = ""; }; + 5965A14C526A41781295A6BBD345813C /* CurrentThreadScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentThreadScheduler.swift; path = RxSwift/Schedulers/CurrentThreadScheduler.swift; sourceTree = ""; }; + 596895B99E7E27AAF130D98206857EC7 /* MoyaError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoyaError.swift; path = Sources/Moya/MoyaError.swift; sourceTree = ""; }; + 59A8A113B244267F39733411FDBFD59D /* HXPHPicker.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = HXPHPicker.bundle; path = Sources/HXPHPicker/Resources/HXPHPicker.bundle; sourceTree = ""; }; + 59D37D7B8A54CCECB3D3FF11BA59989C /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Sources/ConstraintPriorityTarget.swift; sourceTree = ""; }; + 59DDD979CBD6C9981F4FC9235EFC9381 /* TagListView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TagListView-umbrella.h"; sourceTree = ""; }; + 59DF3EC3D68BB1FD12D0E26E697ADC67 /* UIView+IQKeyboardExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtension.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtension.swift"; sourceTree = ""; }; + 59E0C671EF5B5B543DDE4A04023C67FD /* ImageLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageLayer.swift; path = Sources/Private/CoreAnimation/Layers/ImageLayer.swift; sourceTree = ""; }; + 59E77574A6D6A8484D6E798D4473D69B /* DisposeBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBase.swift; path = RxSwift/Disposables/DisposeBase.swift; sourceTree = ""; }; + 59FF368F95FB6496AE29853E9BA5BD14 /* LottieURLSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieURLSession.swift; path = Sources/Public/Configuration/LottieURLSession.swift; sourceTree = ""; }; + 5A16456B3A98DD7588766308353AD37E /* ObjectMapper-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ObjectMapper-Info.plist"; sourceTree = ""; }; + 5A180C55B9B74D99B78B2F0EDB46D1C8 /* PhotoAsset+Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoAsset+Codable.swift"; path = "Sources/HXPHPicker/Picker/Model/PhotoAsset+Codable.swift"; sourceTree = ""; }; + 5A21A112A2FAD7228F3F968043407B52 /* mapAt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = mapAt.swift; path = Source/RxSwift/mapAt.swift; sourceTree = ""; }; + 5A225B67BF641EECDAE555557900F543 /* lottie-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios.release.xcconfig"; sourceTree = ""; }; + 5A3A23E72BF86121106194AD04651D2E /* MJRefreshConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConfig.h; path = MJRefresh/MJRefreshConfig.h; sourceTree = ""; }; + 5A3C23B1D72202683F00B447B922927D /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; + 5A3F99D429B6905052BB416F92885D5F /* MATerrainOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATerrainOverlayRenderer.h; path = MAMapKit.framework/Headers/MATerrainOverlayRenderer.h; sourceTree = ""; }; + 5A5C6F735186CBB62A6EBD6ECB76858C /* AnonymousDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousDisposable.swift; path = RxSwift/Disposables/AnonymousDisposable.swift; sourceTree = ""; }; + 5A6B00582C6F5360841283FCA163063F /* LottieAnimationViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationViewBase.swift; path = Sources/Public/iOS/LottieAnimationViewBase.swift; sourceTree = ""; }; + 5A88BF209F6202B0E730318470DDD8BB /* KVORepresentable+CoreGraphics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KVORepresentable+CoreGraphics.swift"; path = "RxCocoa/Foundation/KVORepresentable+CoreGraphics.swift"; sourceTree = ""; }; + 5A8B44A19AF20F37A8875C22357A38F1 /* MqttDecodeUnsubAck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttDecodeUnsubAck.swift; path = Source/MqttDecodeUnsubAck.swift; sourceTree = ""; }; + 5AA2CD254B942B1A97437DFF6AA4C3B8 /* retryWithBehavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = retryWithBehavior.swift; path = Source/RxSwift/retryWithBehavior.swift; sourceTree = ""; }; + 5AB1411EA19E9E5CCE78567975424B15 /* NSObject+MJCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJCoding.h"; path = "MJExtension/NSObject+MJCoding.h"; sourceTree = ""; }; + 5AB1C590DA6D243CF1D4DBE909C408C3 /* OpenIMSDK-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "OpenIMSDK-Info.plist"; sourceTree = ""; }; + 5ABBFFA488022C89EF93575377A4C200 /* pausable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = pausable.swift; path = Source/RxSwift/pausable.swift; sourceTree = ""; }; + 5AC2A8315BF414FD10417F45C17F129F /* MAAnnotationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotationView.h; path = MAMapKit.framework/Headers/MAAnnotationView.h; sourceTree = ""; }; + 5B0150E1B9B7AA3DE6394C130418B487 /* OIMCallbacker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMCallbacker.m; path = OpenIMSDK/Callbacker/OIMCallbacker.m; sourceTree = ""; }; + 5B1A0130105B98916AF1D590086BFD66 /* RxCocoa.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxCocoa.debug.xcconfig; sourceTree = ""; }; + 5B9D8C163A245DEBF92CAC1EA5471D36 /* Skip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Skip.swift; path = RxSwift/Observables/Skip.swift; sourceTree = ""; }; + 5BBE0E370C0970A23FE497F665D3E7BB /* filterMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = filterMap.swift; path = Source/RxSwift/filterMap.swift; sourceTree = ""; }; + 5BCC0CB4800246FD935D7AF0399C5175 /* CGImage+WebP.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CGImage+WebP.m"; path = "Sources/KingfisherWebP-ObjC/CGImage+WebP.m"; sourceTree = ""; }; + 5BE318237005B61F9AF9628B6F039D09 /* ObservableConvertibleType+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Signal.swift"; path = "RxCocoa/Traits/Signal/ObservableConvertibleType+Signal.swift"; sourceTree = ""; }; + 5BE93567AA85914227E92BDFE9669A63 /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = ""; }; + 5BEA2B127E818A0484E4A0EED9286EF5 /* ConfigurationGlobals.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConfigurationGlobals.swift; path = Sources/CocoaLumberjackSwift/ConfigurationGlobals.swift; sourceTree = ""; }; + 5BEBB2722A594F06C7EA18F3A1060AC6 /* MAMapStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapStatus.h; path = MAMapKit.framework/Headers/MAMapStatus.h; sourceTree = ""; }; + 5BEBC5BCFD6362440D9D4603E86772C0 /* PrimitiveSequence+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Concurrency.swift"; path = "RxSwift/Traits/PrimitiveSequence/PrimitiveSequence+Concurrency.swift"; sourceTree = ""; }; + 5C04AF582F9D6D4B5C00FBDCDB0C3039 /* YBIBIconManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBIconManager.m; path = YBImageBrowser/Helper/YBIBIconManager.m; sourceTree = ""; }; + 5C17147FB45C2F91E3F4E0561AADD510 /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Sources/ConstraintMakerRelatable.swift; sourceTree = ""; }; + 5C3BD5F1BA48FA5E47E18FBCF7AECCA0 /* lossless_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_mips_dsp_r2.c; path = src/dsp/lossless_mips_dsp_r2.c; sourceTree = ""; }; + 5C4C77EBB2493FB7A93A2D0FB646C569 /* FrameDisconnect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameDisconnect.swift; path = Source/FrameDisconnect.swift; sourceTree = ""; }; + 5C6075D01B0C2D3160EF60C4BB2ED644 /* OIMSimpleResultInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSimpleResultInfo.h; path = OpenIMSDK/Model/OIMSimpleResultInfo.h; sourceTree = ""; }; + 5C6735ECE031BB18EA5077C548DFBD3B /* MASConstraintMaker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraintMaker.h; path = Masonry/MASConstraintMaker.h; sourceTree = ""; }; + 5C6F7913A879E3C937BA173A6E58EDBC /* TimeInterval+Formatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TimeInterval+Formatter.swift"; path = "Sources/SwiftDate/Foundation+Extras/TimeInterval+Formatter.swift"; sourceTree = ""; }; + 5C782F6BBA9D908DF2ED57F50C12C768 /* frame_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = frame_dec.c; path = src/dec/frame_dec.c; sourceTree = ""; }; + 5C7AF6A4A7D873A5927E9BB5781FC818 /* UICollectionViewLayout+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewLayout+MJRefresh.m"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.m"; sourceTree = ""; }; + 5C8DCA9DAE9A2CA91B99D08FC528E277 /* SwiftyUserDefaults-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftyUserDefaults-Info.plist"; sourceTree = ""; }; + 5C94875BC7BE284051E55C4BDC8BA513 /* PhotoEditorViewController+Animation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoEditorViewController+Animation.swift"; path = "Sources/HXPHPicker/Editor/Controller/PhotoEditorViewController+Animation.swift"; sourceTree = ""; }; + 5CC360DDD6D3361E48E7695224199158 /* OIMReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMReachability.h; path = OpenIMSDK/Utils/OIMReachability.h; sourceTree = ""; }; + 5D56323B451627192BECC5104B3D81BC /* AnimationSubview.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationSubview.swift; path = Sources/Public/iOS/AnimationSubview.swift; sourceTree = ""; }; + 5D5883A9A254761FD72FD4BD60F9207B /* bufferWithTrigger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = bufferWithTrigger.swift; path = Source/RxSwift/bufferWithTrigger.swift; sourceTree = ""; }; + 5D6583A9D6FFB57A60DDCC8A22078841 /* Array+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "Sources/RxDataSources/Array+Extensions.swift"; sourceTree = ""; }; + 5D66E4A666F8AD6639F3BB8433543EBB /* ColorValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift; sourceTree = ""; }; + 5D73881111D0B6F5672FE5D8E90E98FA /* mux_types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mux_types.h; path = src/webp/mux_types.h; sourceTree = ""; }; 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Alamofire; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5D7C53CFA21D0B65B5810275F9B1B2F4 /* DDDispatchQueueLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDDispatchQueueLogFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDDispatchQueueLogFormatter.m; sourceTree = ""; }; - 5D7E275A9F465A83ACE378819BCFC362 /* libwebp-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "libwebp-dummy.m"; sourceTree = ""; }; - 5D8646AABF9B045A43689BB1CD400420 /* LottiePlaybackMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottiePlaybackMode.swift; path = Sources/Public/Animation/LottiePlaybackMode.swift; sourceTree = ""; }; - 5DA8B2B1E25EA9FC5AD2833490B8F5C4 /* DateTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateTransform.swift; path = Sources/DateTransform.swift; sourceTree = ""; }; - 5DB2942177243632BB63FE27659B24D9 /* Disposables.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposables.swift; path = RxSwift/Disposables/Disposables.swift; sourceTree = ""; }; - 5DB84D16310CC6D943255E049A9E9D77 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; - 5DFA11B23F0F29B0B8105FB002C0BB1D /* OIMManager+Friend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Friend.h"; path = "OpenIMSDK/Interface/OIMManager+Friend.h"; sourceTree = ""; }; - 5E03558060FDD52E3C586D6C52AE3EEB /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Sources/ConstraintLayoutSupportDSL.swift; sourceTree = ""; }; - 5E2D9445ABDD01E2EAF6BCF2874BCAB2 /* NSTextView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextView+Rx.swift"; path = "RxCocoa/macOS/NSTextView+Rx.swift"; sourceTree = ""; }; + 5D8459D7FBE1CE367D86924BE49985C9 /* LayerTransformNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerTransformNode.swift; path = Sources/Private/MainThread/LayerContainers/Utility/LayerTransformNode.swift; sourceTree = ""; }; + 5DB4F11D14B8046F8001DD637F89FD95 /* MAMultiPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPoint.h; path = MAMapKit.framework/Headers/MAMultiPoint.h; sourceTree = ""; }; + 5DDAB40E3AA9DE5D5A63CF63ED9A2BEF /* MqttDecodePublish.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttDecodePublish.swift; path = Source/MqttDecodePublish.swift; sourceTree = ""; }; + 5E0843B42A030B55090DA9565D93667E /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = SDWebImage/Private/SDDeviceHelper.m; sourceTree = ""; }; + 5E215B4152D0A6DA7FBDD58BF58BA1A2 /* YBIBDefaultWebImageMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBDefaultWebImageMediator.h; path = YBImageBrowser/WebImageMediator/YBIBDefaultWebImageMediator.h; sourceTree = ""; }; 5E4674603A5D5B9215FFA0F8E69F8B71 /* libwebp */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = libwebp; path = libwebp.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5E47BC20E69F8FD24594FFC1D8910599 /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; - 5E919CC6590A0AF2C026C7FA6371EFD8 /* KeyedDecodingContainerExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyedDecodingContainerExtensions.swift; path = Sources/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift; sourceTree = ""; }; - 5E9446A922C299F4C733B3E3B64FC4DF /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/Core/UIImage+Transform.h"; sourceTree = ""; }; - 5EA628EB8F76497538FA2290CB38448E /* UIImageView+HighlightedWebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+HighlightedWebCache.m"; path = "SDWebImage/Core/UIImageView+HighlightedWebCache.m"; sourceTree = ""; }; - 5EADCBF64ED01C3EB0BEB3B96CCC6D5B /* AMapNearbySearchManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNearbySearchManager.h; path = AMapSearchKit.framework/Headers/AMapNearbySearchManager.h; sourceTree = ""; }; - 5ED33FEB3529F8C9B342C7C2A097E8A8 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; - 5EDD5DC412BB584AD5F6B72E3728689F /* AnimationKeypathExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationKeypathExtension.swift; path = Sources/Private/Utility/Extensions/AnimationKeypathExtension.swift; sourceTree = ""; }; - 5EF97943C0E85B351106FE78D20CD5F9 /* Catch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Catch.swift; path = RxSwift/Observables/Catch.swift; sourceTree = ""; }; - 5EFEC4792E6AE843B581D17FC92072A0 /* SGScanCode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGScanCode.m; path = SGQRCode/QRCode/SGScanCode.m; sourceTree = ""; }; - 5F09681D932FC2A10A110AE909ACFCC0 /* RxCollectionViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourcePrefetchingProxy.swift; sourceTree = ""; }; - 5F64866AC624BC264E03015321237874 /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = ""; }; - 5F817082B9C5EE4458A59A5A7804DEFC /* webpi_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = webpi_dec.h; path = src/dec/webpi_dec.h; sourceTree = ""; }; - 5F93EC958C215B385E15337C6289B91B /* ImageLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageLayerModel.swift; path = Sources/Private/Model/Layers/ImageLayerModel.swift; sourceTree = ""; }; - 5FD85B1B451A0D803EAE3B5FA0006115 /* Materialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Materialize.swift; path = RxSwift/Observables/Materialize.swift; sourceTree = ""; }; - 5FE0AF0A4A942C9B375AB754DEE35103 /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = ""; }; - 60011C2C50FFAEAC7F35E0F62890FDD6 /* CombineLatest+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+Collection.swift"; path = "RxSwift/Observables/CombineLatest+Collection.swift"; sourceTree = ""; }; - 6006D4E765AEC9D031BC10150FC24B63 /* ZXSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ZXSDK.framework; sourceTree = ""; }; - 60468C1CDF1862AB603DFA2962774120 /* neon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = neon.h; path = src/dsp/neon.h; sourceTree = ""; }; - 606B36089216BA9AAA95CC158D76FE49 /* PhotoTools+File.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoTools+File.swift"; path = "Sources/HXPHPicker/Core/Util/PhotoTools+File.swift"; sourceTree = ""; }; - 606D6DE0357D8862B257CC628D6256A6 /* SGScanView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGScanView.m; path = SGQRCode/ScanView/SGScanView.m; sourceTree = ""; }; - 6071B34947E92A5B38EF5EF37915B1E7 /* ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist"; sourceTree = ""; }; - 60BB1F68A42EFD825729CE824368D4A7 /* Archive+Progress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Progress.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+Progress.swift"; sourceTree = ""; }; - 60EDA73CDAB249744F8D82D94147C9E2 /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = ""; }; - 6115E13375F7CD6D73AD6BF3A4D25C83 /* YBIBInteractionProfile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBInteractionProfile.m; path = YBImageBrowser/Image/YBIBInteractionProfile.m; sourceTree = ""; }; - 61262011F1BCB5A4C30594748F8200D5 /* Timeout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeout.swift; path = RxSwift/Observables/Timeout.swift; sourceTree = ""; }; - 612B3D3A7C5E1084E5EF5EC8A5C44A27 /* SGSoundEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGSoundEffect.h; path = SGQRCode/SoundEffect/SGSoundEffect.h; sourceTree = ""; }; - 615A1FD3776094E854318EE01C75786B /* CocoaLumberjack.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.debug.xcconfig; sourceTree = ""; }; - 615A84F5D6E75DCDEE4DE6130DF59E85 /* libwebp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = libwebp.debug.xcconfig; sourceTree = ""; }; - 616B42C1149DA62E1819065E55738C44 /* AnyValueContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyValueContainer.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift; sourceTree = ""; }; - 619D6D0BE97FAA6CFB40BDEB233BD739 /* GeYanSdk.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = GeYanSdk.xcframework; sourceTree = ""; }; - 61F309BD5CF7919F2B29498052D9B98C /* Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diff.swift; path = Sources/Differentiator/Diff.swift; sourceTree = ""; }; + 5E5BBE340E41A5864BF05B58060A75F6 /* enc_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_sse2.c; path = src/dsp/enc_sse2.c; sourceTree = ""; }; + 5E6697D38397D54AD0F4753556ED8EEF /* PHLivePhotoView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PHLivePhotoView+Kingfisher.swift"; path = "Sources/Extensions/PHLivePhotoView+Kingfisher.swift"; sourceTree = ""; }; + 5E7BEBCBFE4F4167333289DF14E0C550 /* Cancelable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancelable.swift; path = RxSwift/Cancelable.swift; sourceTree = ""; }; + 5EB365DD01B0CF9CC6DD2C3FBAD696AB /* RxSwiftExt-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxSwiftExt-Info.plist"; sourceTree = ""; }; + 5ED4C28A20C58BA223BDDBF5861D744E /* YBIBVideoActionBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoActionBar.h; path = Video/YBIBVideoActionBar.h; sourceTree = ""; }; + 5F03CEF900DCE98303D4027E3A2F7FB4 /* ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist"; sourceTree = ""; }; + 5F121A1AF57280A390FE624572D35BAA /* SDImageIOAnimatedCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoder.h; path = SDWebImage/Core/SDImageIOAnimatedCoder.h; sourceTree = ""; }; + 5F2CAB5804E5C6FE12F21F2E73D0504C /* UISearchController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISearchController+Rx.swift"; path = "RxCocoa/iOS/UISearchController+Rx.swift"; sourceTree = ""; }; + 5F39BB06188020CC5D8E4980721C6AC2 /* Enumerated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Enumerated.swift; path = RxSwift/Observables/Enumerated.swift; sourceTree = ""; }; + 5F41F37C01FE78AF3EB2EBE2C0063C55 /* alphai_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = alphai_dec.h; path = src/dec/alphai_dec.h; sourceTree = ""; }; + 5F5B52F8C128A08525589088D88B446A /* MGCDAsyncSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MGCDAsyncSocket.m; path = Source/GCD/MGCDAsyncSocket.m; sourceTree = ""; }; + 5F7A74C16497D9325EA8E175061E4488 /* RxRelay-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxRelay-Info.plist"; sourceTree = ""; }; + 5F7C7512CF2FDDA57441C76E292DFA54 /* enc_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_neon.c; path = src/dsp/enc_neon.c; sourceTree = ""; }; + 5F862FDF6BDB6EA81D6FAD1A68F9B444 /* MATraceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATraceManager.h; path = MAMapKit.framework/Headers/MATraceManager.h; sourceTree = ""; }; + 5F8CAE6D15F1B3B7A425CDAC4B3BEB3A /* Interpolatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Interpolatable.swift; path = Sources/Public/Keyframes/Interpolatable.swift; sourceTree = ""; }; + 5FB12255CE9417581E8B581894EB9660 /* SelectBoxView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectBoxView.swift; path = Sources/HXPHPicker/Core/View/SelectBoxView.swift; sourceTree = ""; }; + 5FCAFE810B996502DE8E815BB6C1AC95 /* YBIBSentinel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBSentinel.h; path = YBImageBrowser/Helper/YBIBSentinel.h; sourceTree = ""; }; + 5FE1963B6D2F054A9E8BFAFEB6F716FC /* AnimationKeypathExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationKeypathExtension.swift; path = Sources/Private/Utility/Extensions/AnimationKeypathExtension.swift; sourceTree = ""; }; + 600B0109CAD95BF5917C28BF3281115C /* YYSpriteSheetImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYSpriteSheetImage.m; path = YYImage/YYSpriteSheetImage.m; sourceTree = ""; }; + 601E4E3E77557AF9F95EFC7AA4B4CB27 /* PublishSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublishSubject.swift; path = RxSwift/Subjects/PublishSubject.swift; sourceTree = ""; }; + 602C74A8185EA5EE8350DAA128584F7F /* SelectBoxConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectBoxConfiguration.swift; path = Sources/HXPHPicker/Core/Config/SelectBoxConfiguration.swift; sourceTree = ""; }; + 603CC2BA472D5C652471FA248F2568B8 /* CocoaMQTTSocket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTSocket.swift; path = Source/CocoaMQTTSocket.swift; sourceTree = ""; }; + 605153200D33EF84B07350CBDC5C1DCB /* MAParticleOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlay.h; path = MAMapKit.framework/Headers/MAParticleOverlay.h; sourceTree = ""; }; + 6092F696CF83DAF2A79FEC33407A7B6D /* RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCocoa.swift; path = RxCocoa/RxCocoa.swift; sourceTree = ""; }; + 60CA0BB648C2262B78659DA12DD51A2F /* RxWKNavigationDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxWKNavigationDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxWKNavigationDelegateProxy.swift; sourceTree = ""; }; + 60FB2512EBA67C9E19A06A26644E2821 /* SolidLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidLayerModel.swift; path = Sources/Private/Model/Layers/SolidLayerModel.swift; sourceTree = ""; }; + 610421EA2DB40C1997A6697143D26FCD /* OIMManager+Friend.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Friend.h"; path = "OpenIMSDK/Interface/OIMManager+Friend.h"; sourceTree = ""; }; + 614C8C7093D354C0AC700DB212837602 /* ShapeLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeLayerModel.swift; path = Sources/Private/Model/Layers/ShapeLayerModel.swift; sourceTree = ""; }; + 614D20EE3407F1CF8CF6E98954CC88DE /* BehaviorRelay+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BehaviorRelay+Driver.swift"; path = "RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift"; sourceTree = ""; }; + 616CBDDA5612B517A144C40409DE85D5 /* rescaler_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_mips_dsp_r2.c; path = src/dsp/rescaler_mips_dsp_r2.c; sourceTree = ""; }; + 61831D41BCD7315F136D4DF2A5ADD114 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Sources/ConstraintInsetTarget.swift; sourceTree = ""; }; + 6198D280669473ACBA6A084A650DF4D8 /* ImageBinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageBinder.swift; path = Sources/SwiftUI/ImageBinder.swift; sourceTree = ""; }; + 61CF6C543261C867ACCBC0ED36A257A1 /* PriorityQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PriorityQueue.swift; path = Platform/DataStructures/PriorityQueue.swift; sourceTree = ""; }; + 61FC40CC3CF376314F66F115AD76C8BD /* OpenIMCore.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; name = OpenIMCore.xcframework; path = Framework/OpenIMCore.xcframework; sourceTree = ""; }; 62060F5D524AE8173817ADD9482A0FEB /* lottie-ios-LottiePrivacyInfo */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "lottie-ios-LottiePrivacyInfo"; path = LottiePrivacyInfo.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 62068575E84E562D2715857256F195F2 /* RxSwiftExt.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwiftExt.debug.xcconfig; sourceTree = ""; }; - 622275BE3CDED43E4D4D52732AFB6ECB /* NSButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSButton+Kingfisher.swift"; path = "Sources/Extensions/NSButton+Kingfisher.swift"; sourceTree = ""; }; - 62416DA404529EE5F12AC66820968A42 /* SDCycleScrollView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDCycleScrollView-dummy.m"; sourceTree = ""; }; - 6261B6AFF7CE8B3C5FCA2DA3C060B8CA /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; - 6268CFADCC4FF23E0CF60396A20648CA /* CameraConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/CameraConfiguration.swift; sourceTree = ""; }; - 6278C6F6E095466FC0747AED3A82DBAC /* TrimPathNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TrimPathNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift; sourceTree = ""; }; - 628023983AC1634CE080F49424225367 /* PhotoEditorContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorContentView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorContentView.swift; sourceTree = ""; }; - 62851F93EAD70B5DAEBEAE1D63184C5A /* RxSwiftExt-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwiftExt-umbrella.h"; sourceTree = ""; }; - 62991FC09198149F6AADD3A172559A80 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; }; - 629DDBA66E3F48E13DC130A55605CE82 /* SwiftDate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftDate.debug.xcconfig; sourceTree = ""; }; - 62A9CAE160221A15F9869953E47C95D0 /* MJExtension-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-prefix.pch"; sourceTree = ""; }; - 62AA6CBDC90F15752FBBFAD594E0DB65 /* StyledView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StyledView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/StyledView.swift; sourceTree = ""; }; - 62AA96A19742574F4A188E5B86334BA6 /* PickerBottomViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerBottomViewConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PickerBottomViewConfiguration.swift; sourceTree = ""; }; - 62C76DB7DA654E7AD9D4B3B2FB18032C /* sharpyuv_gamma.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv_gamma.h; path = sharpyuv/sharpyuv_gamma.h; sourceTree = ""; }; - 62F44A98B2397C9F6E5B8CFED65CE453 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackStateFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h; sourceTree = ""; }; - 630AE44EDCEF6C485BEB0D998AE18947 /* SingleValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleValueProvider.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift; sourceTree = ""; }; - 631D1F2FC1CAC25B4FC1DC7C9550FC6B /* RxCocoaRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RxCocoaRuntime.h; path = RxCocoa/Runtime/include/RxCocoaRuntime.h; sourceTree = ""; }; - 633767D8A7162E8C39BFE4FE885F0056 /* SDCycleScrollView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDCycleScrollView.debug.xcconfig; sourceTree = ""; }; - 635BD03226AC5A8DC2C0FCBBE2A1A271 /* CGColor+RGB.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGColor+RGB.swift"; path = "Sources/Private/Utility/Extensions/CGColor+RGB.swift"; sourceTree = ""; }; - 63708D0683405A5887D1A15D39151805 /* Kingfisher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Kingfisher-Info.plist"; sourceTree = ""; }; - 637A7313065D5EFD2C26D2F8C370607D /* Entry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Entry.swift; path = Sources/Private/EmbeddedLibraries/ZipFoundation/Entry.swift; sourceTree = ""; }; - 639CF52A40302ABAD0394A3F45CD9342 /* SDImageAPNGCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAPNGCoder.m; path = SDWebImage/Core/SDImageAPNGCoder.m; sourceTree = ""; }; - 63D7A5446C347A4B7702583B88BBD745 /* rescaler_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_utils.c; path = src/utils/rescaler_utils.c; sourceTree = ""; }; - 63D81D87D9F9A845B326030633297628 /* OIMQuoteElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMQuoteElem.h; path = OpenIMSDK/Model/OIMQuoteElem.h; sourceTree = ""; }; - 63E347ABA937E1A86307E97B31D7E50C /* OIMReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMReachability.h; path = OpenIMSDK/Utils/OIMReachability.h; sourceTree = ""; }; - 641158A1573E7A37BD70DE32A4512D60 /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = ""; }; - 64219E8625D4757F4535A81DE9CC4D2F /* pausable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = pausable.swift; path = Source/RxSwift/pausable.swift; sourceTree = ""; }; - 642B181C4A56014302CB2E2CA604D881 /* ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist"; sourceTree = ""; }; + 620866CE6F644E71DD360A0EFAC1D7D4 /* KVORepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KVORepresentable.swift; path = RxCocoa/Foundation/KVORepresentable.swift; sourceTree = ""; }; + 626BED7AFF918C2EB7C12F491DDB7BE7 /* dec_clip_tables.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_clip_tables.c; path = src/dsp/dec_clip_tables.c; sourceTree = ""; }; + 6286DBDC946A52B1E86BC5F2EB20BA19 /* rescaler_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_neon.c; path = src/dsp/rescaler_neon.c; sourceTree = ""; }; + 6290E5C0F32B2229537B63C8028A89CA /* NSButton+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSButton+Rx.swift"; path = "RxCocoa/macOS/NSButton+Rx.swift"; sourceTree = ""; }; + 62D07C690BC24C555DF4B8EFE24DBD23 /* PhotoEditorFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorFilter.swift; path = Sources/HXPHPicker/Editor/Model/PhotoEditorFilter.swift; sourceTree = ""; }; + 63162572B5F40706944B6D4695746BA0 /* PhotoPickerController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerController.swift; path = Sources/HXPHPicker/Picker/Controller/PhotoPickerController.swift; sourceTree = ""; }; + 6325F793B5AC4E9D6C23999F997A27B3 /* MAMapKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapKit.h; path = MAMapKit.framework/Headers/MAMapKit.h; sourceTree = ""; }; + 632FFDAC6AD7D412F1BF8F1A913A0EF1 /* UIColor+SDHexString.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+SDHexString.m"; path = "SDWebImage/Private/UIColor+SDHexString.m"; sourceTree = ""; }; + 63321D54034C11DDB8981792A5761232 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; + 6351AB2D7C8FD9BADEFC1065E0AEC081 /* IQTextInputViewNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQTextInputViewNotification-Info.plist"; sourceTree = ""; }; + 635325A329D375088E730F34019317A0 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardReturnManager/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 636B07954D032239F42C35DE71D121DE /* Popover.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Popover.release.xcconfig; sourceTree = ""; }; + 637305295B526B7C505220CE2A7893E8 /* MJExtensionConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJExtensionConst.m; path = MJExtension/MJExtensionConst.m; sourceTree = ""; }; + 63881AFB6BB011EFCF1252118D2C46A8 /* zipWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = zipWith.swift; path = Source/RxSwift/zipWith.swift; sourceTree = ""; }; + 63A3A7CA60BE4D32F36898432CE921D0 /* vp8_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8_dec.h; path = src/dec/vp8_dec.h; sourceTree = ""; }; + 63A719DFAC9452911312006859FB59BC /* ObservableConvertibleType+Infallible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Infallible.swift"; path = "RxSwift/Traits/Infallible/ObservableConvertibleType+Infallible.swift"; sourceTree = ""; }; + 63AF11E68FBA31DEE361A30452C2B610 /* ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist"; sourceTree = ""; }; + 63B4C977FA84E6204CA76F7CD5A2E079 /* TextLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextLayer.swift; path = Sources/Private/CoreAnimation/Layers/TextLayer.swift; sourceTree = ""; }; + 640F3024D486EF2882424829BADB5957 /* RepeaterLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepeaterLayer.swift; path = Sources/Private/CoreAnimation/Layers/RepeaterLayer.swift; sourceTree = ""; }; + 6427F96BC62F8B8E39CE8CBF47E01176 /* rescaler.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler.c; path = src/dsp/rescaler.c; sourceTree = ""; }; 642FEF38E132FB38DD2B59B88F069917 /* YBImageBrowser */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = YBImageBrowser; path = YBImageBrowser.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 643E20DC003F67757DE48602D2A7C2B6 /* Enumerated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Enumerated.swift; path = RxSwift/Observables/Enumerated.swift; sourceTree = ""; }; - 64475ACC13391CED0E8F1895DFDB3F0E /* Sample.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sample.swift; path = RxSwift/Observables/Sample.swift; sourceTree = ""; }; - 645AE5F27AA607A164905A55BE37FDA8 /* ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist"; sourceTree = ""; }; - 645B6195BA2EF0CC400908DC32A609F8 /* alpha_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_dec.c; path = src/dec/alpha_dec.c; sourceTree = ""; }; - 647F3A21C303D1F7A42AF9434D203869 /* MJRefreshStateTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h; sourceTree = ""; }; - 6491D6CBC9BF383CD1D2778BB5EE5732 /* SGScanView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGScanView.h; path = SGQRCode/ScanView/SGScanView.h; sourceTree = ""; }; - 64955DB2B6BD9D4B02B1D00905645B96 /* Window.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Window.swift; path = RxSwift/Observables/Window.swift; sourceTree = ""; }; - 64A97DF1ECAA601838BDE6A51B36E743 /* DefaultsKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKey.swift; path = Sources/DefaultsKey.swift; sourceTree = ""; }; - 64B047E4298457A88A20E186EB03E519 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateHeader.h; path = MJRefresh/Custom/Header/MJRefreshStateHeader.h; sourceTree = ""; }; - 64DA66D7FA4D6D1DFF8EB0A3D5A1B537 /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; - 650CC4848DDBCCB81DCB6671B53274AE /* MABaseOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MABaseOverlay.h; path = MAMapKit.framework/Headers/MABaseOverlay.h; sourceTree = ""; }; - 65116B7F8B410E440874CCFA63662B20 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; - 655F16E86C5BE41F3D3568111B89F78B /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.swift; sourceTree = ""; }; + 6448C33FD616D663955373268AD9800D /* UIPickerView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIPickerView+Rx.swift"; path = "RxCocoa/iOS/UIPickerView+Rx.swift"; sourceTree = ""; }; + 6458147C926E431087479B672BEAED5E /* AMapServices.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapServices.h; path = AMapFoundationKit.framework/Headers/AMapServices.h; sourceTree = ""; }; + 645B1D036F396C3C31884CF44074CB01 /* predictor_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = predictor_enc.c; path = src/enc/predictor_enc.c; sourceTree = ""; }; + 64916876656A6A9960FEB98C54459534 /* RxDataSources-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxDataSources-Info.plist"; sourceTree = ""; }; + 64C07CCD1BCB6C218B9CBFD402FD0BF6 /* KFOptionsSetter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFOptionsSetter.swift; path = Sources/General/KFOptionsSetter.swift; sourceTree = ""; }; + 64C174FEED5DBDBD7E75CFF8B4BB3ABB /* SwiftyJSON.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.debug.xcconfig; sourceTree = ""; }; + 64C6220B00E5F0A013BFFA10F5EE99E1 /* MAPathShowRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPathShowRange.h; path = MAMapKit.framework/Headers/MAPathShowRange.h; sourceTree = ""; }; + 64CAD2C8FCCCCFB901AD99338C69EE1F /* PhotoTools.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoTools.swift; path = Sources/HXPHPicker/Core/Util/PhotoTools.swift; sourceTree = ""; }; + 64FDE768BCD110D76CA31416FCD660DB /* ImmediateSchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImmediateSchedulerType.swift; path = RxSwift/ImmediateSchedulerType.swift; sourceTree = ""; }; + 65029C092034F39CD83E5C58E0DA0B05 /* AssetManager+LivePhotoURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+LivePhotoURL.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+LivePhotoURL.swift"; sourceTree = ""; }; + 650CBF9346AD732290BB7ED692D6B5F7 /* SharedSequence+Operators+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Operators+arity.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Operators+arity.swift"; sourceTree = ""; }; + 651C41DEE47E984B8359AB6405881E02 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; + 652AFE78F8E551FC43A6A45DC83A3681 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Sources/ConstraintMakerExtendable.swift; sourceTree = ""; }; + 6541D2507CA3DF55206B130B168633A7 /* SwiftKeychainWrapper.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftKeychainWrapper.modulemap; sourceTree = ""; }; + 6563437DD714E4651A54D5D9827E41BB /* AnimatedImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedImageView.swift; path = Sources/Views/AnimatedImageView.swift; sourceTree = ""; }; 6570EF80D3D9BAC37E653856E44EF351 /* RxSwiftExt */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxSwiftExt; path = RxSwiftExt.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6588BE6EAD95A062EAD65E4406523B33 /* NetworkAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkAsset.swift; path = Sources/HXPHPicker/Picker/Model/NetworkAsset.swift; sourceTree = ""; }; - 659ABEE73565FB13D1D253ACC5C5F5EB /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; - 659C2CC0C7E0DE1574B6730492D6AD01 /* LayerDebugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerDebugging.swift; path = Sources/Private/Utility/Debugging/LayerDebugging.swift; sourceTree = ""; }; - 65A15F4C96CAED1C108C40708EE87EF4 /* OIMSoundElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSoundElem.h; path = OpenIMSDK/Model/OIMSoundElem.h; sourceTree = ""; }; - 65AF056AC49D66AA67CE8E4CC5F7ABFC /* OIMManager+Conversation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Conversation.h"; path = "OpenIMSDK/Interface/OIMManager+Conversation.h"; sourceTree = ""; }; - 65C686468BAEE92162C48CCAA7C15D4C /* RxDataSources-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxDataSources-prefix.pch"; sourceTree = ""; }; - 65CC9309308C3EFA965298882EABE106 /* lossless_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lossless_common.h; path = src/dsp/lossless_common.h; sourceTree = ""; }; - 65CE898D2BC17EA493AD82D9EBA94F4E /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; }; - 65CFE3481B5AC8650B206B3A373CA75D /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; - 65D71891D845159664180BE4751EE547 /* ControlEvent+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlEvent+Driver.swift"; path = "RxCocoa/Traits/Driver/ControlEvent+Driver.swift"; sourceTree = ""; }; - 65EEC6191682ABA20B8A0411040B8329 /* Formatter+Protocols.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Formatter+Protocols.swift"; path = "Sources/SwiftDate/Formatters/Formatter+Protocols.swift"; sourceTree = ""; }; - 660B0D3207CDA50941350787E807EBF9 /* AMapLocation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapLocation.debug.xcconfig; sourceTree = ""; }; - 661FEE91FA7BA21B21CE0C49E062F54B /* DDMultiFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMultiFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDMultiFormatter.h; sourceTree = ""; }; - 6661F713463BAE855AF1063C2C8C4ADB /* DateInRegion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateInRegion.swift; path = Sources/SwiftDate/DateInRegion/DateInRegion.swift; sourceTree = ""; }; - 66632D9CC4BD0C730CF397F56806EA89 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/Core/SessionDelegate.swift; sourceTree = ""; }; - 6675C0D3C3E1B217343679BB2C28AF0F /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoNormalFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h; sourceTree = ""; }; - 66E1CD8AB08972115F770800608A1BDC /* muxi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = muxi.h; path = src/mux/muxi.h; sourceTree = ""; }; - 66F6E82115C5A0AA962FAE21C21F7884 /* Bag+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bag+Rx.swift"; path = "RxSwift/Extensions/Bag+Rx.swift"; sourceTree = ""; }; - 66FE82E0510BC72FAD7C76AD60B9E90D /* IQKeyboardToolbarManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarManager.swift; path = IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager.swift; sourceTree = ""; }; - 6737E046AAEEC1377A37635597AD9339 /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = ""; }; - 673FBA63F9F3560B749DE95F0776152C /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; - 6746F5634973F191E0B1F6461DB1945D /* DropShadowNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropShadowNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/LayerEffectNodes/DropShadowNode.swift; sourceTree = ""; }; - 675B12B7CAD812ECF38A4EBD29B11E06 /* GroupOutputNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupOutputNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift; sourceTree = ""; }; - 6777B5B9C83F2B2289CF20ACC0542106 /* OIMReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMReachability.m; path = OpenIMSDK/Utils/OIMReachability.m; sourceTree = ""; }; - 67BB983FB1DF61CE58E767CA5AACA670 /* Core+UIDevice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIDevice.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIDevice.swift"; sourceTree = ""; }; - 67C09087FD721CE9595DAF45BC6B7889 /* Popover-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Popover-umbrella.h"; sourceTree = ""; }; - 67C415CE5B3DA27754A005F1E2626DEB /* LayerTransformNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerTransformNode.swift; path = Sources/Private/MainThread/LayerContainers/Utility/LayerTransformNode.swift; sourceTree = ""; }; - 67DD08C8D8EFA5C605D522CD0B54141D /* MAOfflineMapViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineMapViewController.h; path = MAMapKit.framework/Headers/MAOfflineMapViewController.h; sourceTree = ""; }; - 67E2AB0EB78B87ACFCF842238DC339AC /* IQKeyboardToolbarManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Debug.swift"; path = "IQKeyboardToolbarManager/Classes/Debug/IQKeyboardToolbarManager+Debug.swift"; sourceTree = ""; }; - 67E975FB8AAE5124E00FDEC64DB28529 /* Deferred.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deferred.swift; path = RxSwift/Observables/Deferred.swift; sourceTree = ""; }; - 680A5B1FAD29D5052E4E207406B38187 /* SDImageIOCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOCoder.h; path = SDWebImage/Core/SDImageIOCoder.h; sourceTree = ""; }; - 680A88CC00CB2961A0B5247C9F2AFDEB /* SDImageTransformer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageTransformer.m; path = SDWebImage/Core/SDImageTransformer.m; sourceTree = ""; }; - 680B5642427550EC87866C7A9D4FF32D /* MAGroundOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGroundOverlay.h; path = MAMapKit.framework/Headers/MAGroundOverlay.h; sourceTree = ""; }; - 6815C778E5D2D39FDC2284C3868D2F07 /* YYFrameImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYFrameImage.m; path = YYImage/YYFrameImage.m; sourceTree = ""; }; - 68369891B9DD0673C54337D7AF5D5A22 /* MATerrainOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATerrainOverlayRenderer.h; path = MAMapKit.framework/Headers/MATerrainOverlayRenderer.h; sourceTree = ""; }; - 687267D7FB090DB33AAF5A62DA1D0495 /* CoreAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreAnimationLayer.swift; path = Sources/Private/CoreAnimation/CoreAnimationLayer.swift; sourceTree = ""; }; - 690512071EDC44B3B6B7DAC39FB28E74 /* PhotoEditorConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/PhotoEditorConfiguration.swift; sourceTree = ""; }; - 6929D9112D6D2BA2861A61C822056E89 /* View+ValueChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "View+ValueChanged.swift"; path = "Sources/Private/Utility/Helpers/View+ValueChanged.swift"; sourceTree = ""; }; + 65867AB26CF8515F87512779D35AAFE7 /* SwitchIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchIfEmpty.swift; path = RxSwift/Observables/SwitchIfEmpty.swift; sourceTree = ""; }; + 6586E0831A482865F4AE976D099C02EB /* GradientStrokeNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientStrokeNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift; sourceTree = ""; }; + 658B6C4630AA41F05C5A0BE18A041CEE /* ScheduledItemType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItemType.swift; path = RxSwift/Schedulers/Internal/ScheduledItemType.swift; sourceTree = ""; }; + 65A438944C929D5F4B8B213A41EE08D7 /* OIMMessageInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMMessageInfo.m; path = OpenIMSDK/Model/OIMMessageInfo.m; sourceTree = ""; }; + 65C53CB62B4F7435CB3C693234CE5505 /* SDWebImageDownloaderConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderConfig.h; path = SDWebImage/Core/SDWebImageDownloaderConfig.h; sourceTree = ""; }; + 65EB44BEDF8C30E6FF3250EEF9BC03B2 /* ObservableType+Weak.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+Weak.swift"; path = "Source/RxSwift/ObservableType+Weak.swift"; sourceTree = ""; }; + 661B11CB82859F4F63BB986EEA203D75 /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift"; sourceTree = ""; }; + 663A9AAB1644EDF5B89B050210D188AE /* PhotoEditorCropToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorCropToolView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorCropToolView.swift; sourceTree = ""; }; + 6658B8DF65726B2667DA2082D95CDE2C /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/CocoaLumberjack/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 66B47605C4EF7FD85950E34EA826F013 /* ObjectMapper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ObjectMapper-dummy.m"; sourceTree = ""; }; + 66C8F6BD5C4F963CFF317253AB78D288 /* FrameSubscribe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameSubscribe.swift; path = Source/FrameSubscribe.swift; sourceTree = ""; }; + 66E59E81DC8FF48EDF585F8556EBF878 /* SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SharedSequence.swift; path = RxCocoa/Traits/SharedSequence/SharedSequence.swift; sourceTree = ""; }; + 670E69BFA8B8E794E20278DDDFCCFC1B /* PhotoAssetCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoAssetCollection.swift; path = Sources/HXPHPicker/Picker/Model/PhotoAssetCollection.swift; sourceTree = ""; }; + 671AC6BBB7E983A9C3A434F31B12481D /* UIControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIControl+Rx.swift"; path = "RxCocoa/iOS/UIControl+Rx.swift"; sourceTree = ""; }; + 675B4C11F7B590880C77E8AAEF1F3A60 /* Date+Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Create.swift"; path = "Sources/SwiftDate/Date/Date+Create.swift"; sourceTree = ""; }; + 677FF7B4A892D4EB3B2AD9BB1F6B7379 /* BaseViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseViewController.swift; path = Sources/HXPHPicker/Core/Controller/BaseViewController.swift; sourceTree = ""; }; + 6795AF09F8D149285033AEB0BCED748D /* AMapURLSearchType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearchType.h; path = AMapFoundationKit.framework/Headers/AMapURLSearchType.h; sourceTree = ""; }; + 67B45AD70807BBDF6B47FDAA4390A5C5 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = ""; }; + 67B8A8567DA6C52E64E59F0E24001910 /* VideoEditorMusicView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorMusicView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorMusicView.swift; sourceTree = ""; }; + 67F2EC575215EF8F36FE3332C7B8FAB5 /* Ellipse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Ellipse.swift; path = Sources/Private/Model/ShapeItems/Ellipse.swift; sourceTree = ""; }; + 682DF2A9B09E750ABE7655327548340F /* RequestInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestInterceptor.swift; path = Source/Features/RequestInterceptor.swift; sourceTree = ""; }; + 682EED78D7F63416FF9CFDCA15743DCD /* PhotoPreviewContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewContentView.swift; path = Sources/HXPHPicker/Picker/View/PhotoPreviewContentView.swift; sourceTree = ""; }; + 6842A0E2A2DB80154F5F93850EF93F27 /* YBImageBrowser.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = YBImageBrowser.bundle; path = YBImageBrowser/YBImageBrowser.bundle; sourceTree = ""; }; + 684A7422DA5D5676B52EEDD2E28FC657 /* Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diff.swift; path = Sources/Differentiator/Diff.swift; sourceTree = ""; }; + 6860AFC57864328E2A00C39E5DCC17C9 /* MAUserLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAUserLocation.h; path = MAMapKit.framework/Headers/MAUserLocation.h; sourceTree = ""; }; + 687C03C1A0D5934231452CF86A151B5E /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; + 68CCF82D67A8D5BF212E5D1E132B0103 /* histogram_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = histogram_enc.c; path = src/enc/histogram_enc.c; sourceTree = ""; }; + 68D7AF3B74828F8C2BAC6CC02A1E9A83 /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; + 68E69BFAD345E18146F7E60EB1231743 /* Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecated.swift; path = Sources/RxDataSources/Deprecated.swift; sourceTree = ""; }; + 691FEC0751A0CEA25959BCE082FC3B97 /* SGScanView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGScanView.m; path = SGQRCode/ScanView/SGScanView.m; sourceTree = ""; }; + 69233A166022F4FAA2349D49017EE68A /* SectionModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionModel.swift; path = Sources/Differentiator/SectionModel.swift; sourceTree = ""; }; + 692E73A19B4EEA1D680D9F67D5718114 /* Delay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delay.swift; path = RxSwift/Observables/Delay.swift; sourceTree = ""; }; 692F92D73EC27270EA9CC9575C3E65B6 /* RxDataSources */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxDataSources; path = RxDataSources.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 693F8ECA090561B610BA6FF8274178DA /* PhotoEditorMosaicView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorMosaicView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorMosaicView.swift; sourceTree = ""; }; - 69987DF0C0EF80F634B3BFF7171C82B1 /* RxRelay.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxRelay.debug.xcconfig; sourceTree = ""; }; - 69F0240DF73AE0C77CD3F808BF400356 /* CallbackProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CallbackProxy.h; path = OpenIMSDK/CallbackProxy/CallbackProxy.h; sourceTree = ""; }; - 69FE14BC30CB5DB48553F5B2DF36AB77 /* AMapGeoFenceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceManager.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceManager.h; sourceTree = ""; }; - 6A737601D8BFA149FD0B9B4EA32208D4 /* KVORepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KVORepresentable.swift; path = RxCocoa/Foundation/KVORepresentable.swift; sourceTree = ""; }; - 6A82911D5CB0F6C7A32A79C0374FCDBC /* TAPageControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TAPageControl.h; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAPageControl.h; sourceTree = ""; }; - 6A87581B2556DBA6F40B051DD8E340A1 /* ProgressHUD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProgressHUD.swift; path = Sources/HXPHPicker/Core/View/ProgressHUD.swift; sourceTree = ""; }; - 6AA2BDF2A6AEC64BE57DDA9A5A18B11A /* EditorToolViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorToolViewConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/EditorToolViewConfiguration.swift; sourceTree = ""; }; - 6AC42ACAF533936A9C6D02A3B360662A /* KingfisherWebP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KingfisherWebP.h; path = Sources/KingfisherWebP.h; sourceTree = ""; }; - 6ADFC7217C94A6A33AADBE2C889E258A /* UIDatePicker+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIDatePicker+Rx.swift"; path = "RxCocoa/iOS/UIDatePicker+Rx.swift"; sourceTree = ""; }; - 6B0442B2E380011F57D531EC0553CF0A /* SDImageAPNGCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAPNGCoder.h; path = SDWebImage/Core/SDImageAPNGCoder.h; sourceTree = ""; }; - 6B06A8830BD9CA33C77A2D4E10375DDC /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = RxSwift/Errors.swift; sourceTree = ""; }; - 6B34C0675FA28CE45E9A9E5129638E48 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; - 6B34EDD0EC5E729369F40418B69FA49F /* TimePeriod+Support.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TimePeriod+Support.swift"; path = "Sources/SwiftDate/TimePeriod/TimePeriod+Support.swift"; sourceTree = ""; }; - 6B5A3802C70E5FFA3157414C2F2DD188 /* IQKeyboardManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Deprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/Deprecated/IQKeyboardManager+Deprecated.swift"; sourceTree = ""; }; - 6B6F61BE674A89311CDDD88E71D4B831 /* RectangleAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RectangleAnimation.swift; path = Sources/Private/CoreAnimation/Animations/RectangleAnimation.swift; sourceTree = ""; }; - 6B7A648559C518EA6DDF715D86F642BF /* PhotoAsset+Network.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoAsset+Network.swift"; path = "Sources/HXPHPicker/Picker/Model/PhotoAsset+Network.swift"; sourceTree = ""; }; - 6BB44B5239CC920575CAF69072F84164 /* RenderingEngineOption.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RenderingEngineOption.swift; path = Sources/Public/Configuration/RenderingEngineOption.swift; sourceTree = ""; }; - 6BE2132552A633B5B0604562F34FC8D0 /* vp8li_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8li_dec.h; path = src/dec/vp8li_dec.h; sourceTree = ""; }; - 6BF72E2AF2147FA1AAC4682FE8CD2024 /* IQActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQActiveConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQActiveConfiguration.swift; sourceTree = ""; }; - 6C0DB89854D24E5D70FDE2EA792BBCE4 /* YBIBVideoData+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBVideoData+Internal.h"; path = "Video/YBIBVideoData+Internal.h"; sourceTree = ""; }; - 6C64131280A69B51A01F471E184A6303 /* huffman_encode_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = huffman_encode_utils.c; path = src/utils/huffman_encode_utils.c; sourceTree = ""; }; - 6C7351CB3EB502D83F5D34EE4B38D7D8 /* ItemsExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ItemsExtension.swift; path = Sources/Private/MainThread/NodeRenderSystem/Extensions/ItemsExtension.swift; sourceTree = ""; }; - 6C8F1BE5271921E4112CB6A96BB1E636 /* IQKeyboardCore-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardCore-umbrella.h"; sourceTree = ""; }; - 6CA6F39A42F8F26B1001FC6ABA7D43B5 /* LottieAnimationCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationCache.swift; path = Sources/Public/AnimationCache/LottieAnimationCache.swift; sourceTree = ""; }; - 6CDDF5A118E717FCD167B130920711D2 /* AlbumView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumView.swift; path = Sources/HXPHPicker/Picker/View/AlbumView.swift; sourceTree = ""; }; - 6D1715A4AEA9E504CD864D3449B29041 /* SDImageLoadersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoadersManager.m; path = SDWebImage/Core/SDImageLoadersManager.m; sourceTree = ""; }; - 6D1B3B65DA5FD5A5576321B0DF0050B4 /* YBIBToolViewHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBToolViewHandler.h; path = YBImageBrowser/ToolView/YBIBToolViewHandler.h; sourceTree = ""; }; - 6D36685DBD069796D57F250F298F4E12 /* DateComponents+Extras.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateComponents+Extras.swift"; path = "Sources/SwiftDate/Foundation+Extras/DateComponents+Extras.swift"; sourceTree = ""; }; - 6D36A4A7070EA83191C07AAA60853D10 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Features/Validation.swift; sourceTree = ""; }; - 6D432C2ACB4146286EE959013FE5D35A /* SynchronizedUnsubscribeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedUnsubscribeType.swift; path = RxSwift/Concurrency/SynchronizedUnsubscribeType.swift; sourceTree = ""; }; - 6D47897E34F522D3CF1F0C22AB710E89 /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; - 6D82AA88B834BBF20D1151E382DE67AF /* PhotoError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoError.swift; path = Sources/HXPHPicker/Core/Model/PhotoError.swift; sourceTree = ""; }; - 6D9E210B2205912E00A85821A655AFCA /* MAMapView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapView.h; path = MAMapKit.framework/Headers/MAMapView.h; sourceTree = ""; }; - 6DAF66AF9A10C8CE260ACFC74496E828 /* AssetManager+LivePhoto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+LivePhoto.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+LivePhoto.swift"; sourceTree = ""; }; - 6DC4BD17942F389D44EB543440F08338 /* IQKeyboardAppearanceManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardAppearanceManager.swift; path = IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceManager.swift; sourceTree = ""; }; - 6DC9646259FA259C0AA37E4E65914C55 /* MAParticleOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlay.h; path = MAMapKit.framework/Headers/MAParticleOverlay.h; sourceTree = ""; }; - 6DFB7C4372393229F1688792BAC624F6 /* SGQRCode.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SGQRCode.release.xcconfig; sourceTree = ""; }; - 6DFC47471DC57CA8A3990D13F5421EC2 /* SDAssociatedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAssociatedObject.m; path = SDWebImage/Private/SDAssociatedObject.m; sourceTree = ""; }; - 6E262E45D9D025FC0B1E6F5F63C96BAC /* HXPHPicker-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HXPHPicker-umbrella.h"; sourceTree = ""; }; - 6E2E823642914FC324B9D6472E687E6F /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Sources/ConstraintDescription.swift; sourceTree = ""; }; - 6E2F7CCC851477208D59289153C67F97 /* OIMPictureElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMPictureElem.h; path = OpenIMSDK/Model/OIMPictureElem.h; sourceTree = ""; }; - 6E39E259B8C3408A8E66B54ED16254B8 /* WechatOpenSDK.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = WechatOpenSDK.xcframework; sourceTree = ""; }; - 6E5634D8FC150EAF451F26D4D2ACDD62 /* RxCollectionViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDelegateProxy.swift; sourceTree = ""; }; + 6939A2F658A7053D427D8CA0499EEA5F /* animi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = animi.h; path = src/mux/animi.h; sourceTree = ""; }; + 6946053ADEB795CA6BF8DC00F6E9818C /* RxCollectionViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift; sourceTree = ""; }; + 694EE45B9AE3A7575F8B867C9D6A78CC /* MaskCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MaskCompositionLayer.swift; path = Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift; sourceTree = ""; }; + 6972343F664C52CB3BBB9F28D004156A /* KeypathSearchable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeypathSearchable.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift; sourceTree = ""; }; + 69996CE0C975FE55FEB5941358F9A2D1 /* URLMatcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLMatcher.swift; path = Sources/URLMatcher/URLMatcher.swift; sourceTree = ""; }; + 69B4A7FF944AD82C79E440C8DF908199 /* NSObject+MJProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJProperty.m"; path = "MJExtension/NSObject+MJProperty.m"; sourceTree = ""; }; + 69C94D551311BF96B246137BE18B4214 /* lossless_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc.c; path = src/dsp/lossless_enc.c; sourceTree = ""; }; + 6A095D9FE603AEF527B68874E180B2A0 /* Archive+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ZIP64.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+ZIP64.swift"; sourceTree = ""; }; + 6A6B3C05E2A7710AA4BB0C9B83E2BF36 /* RxCocoa-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxCocoa-dummy.m"; sourceTree = ""; }; + 6A73073075D10A568A023F1D190E7925 /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Sources/ConstraintDSL.swift; sourceTree = ""; }; + 6AAD72F6BD76C26A980E1477F50D4DD7 /* SwiftKeychainWrapper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftKeychainWrapper.debug.xcconfig; sourceTree = ""; }; + 6ACF591CB08ABFD9EC45A948D394EBDD /* SerialDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDisposable.swift; path = RxSwift/Disposables/SerialDisposable.swift; sourceTree = ""; }; + 6AF7B1545843C9BBED27626503F185E9 /* PreviewViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewViewConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PreviewViewConfiguration.swift; sourceTree = ""; }; + 6AF85A1017DE15A4101657601A4C5A16 /* DDLogMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLogMacros.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLogMacros.h; sourceTree = ""; }; + 6B80BF427EA0435A2D0917C4A28181F7 /* MJRefresh-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJRefresh-dummy.m"; sourceTree = ""; }; + 6B8BEC335BBBFC53C5753059CA075FB3 /* YBIBCellProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBCellProtocol.h; path = YBImageBrowser/Protocol/YBIBCellProtocol.h; sourceTree = ""; }; + 6B8DD93F892EB3A76FC4B0CC65600DED /* CustomDateFormatTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomDateFormatTransform.swift; path = Sources/CustomDateFormatTransform.swift; sourceTree = ""; }; + 6BB7796CE00BCED66E4B2F23431A73F6 /* config_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = config_enc.c; path = src/enc/config_enc.c; sourceTree = ""; }; + 6BC962C67B698BC716FD521FD0D1ADBB /* AMapLocationKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationKit.h; path = AMapLocationKit.framework/Headers/AMapLocationKit.h; sourceTree = ""; }; + 6BCE8FAF2BD0D9BBF46A9D702C7C1CC5 /* CocoaMQTT.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTT.swift; path = Source/CocoaMQTT.swift; sourceTree = ""; }; + 6BD92912FCEB695DC98E049E3F1E663E /* YBIBImageData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageData.m; path = YBImageBrowser/Image/YBIBImageData.m; sourceTree = ""; }; + 6BE1232171B86E58A95A465EF0D69CEA /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/Core/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; + 6C08D86D054AFDEF0A223CD7A4B5015B /* Core+String.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+String.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+String.swift"; sourceTree = ""; }; + 6C0F1E0571EE5F74112DC26DEE1DB61D /* SDAsyncBlockOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAsyncBlockOperation.h; path = SDWebImage/Private/SDAsyncBlockOperation.h; sourceTree = ""; }; + 6C1764349B4C733F6B7A6B68D67BC042 /* LivePhotoSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LivePhotoSource.swift; path = Sources/General/ImageSource/LivePhotoSource.swift; sourceTree = ""; }; + 6C25F665BB457D3486FF8820D7DAEFAD /* VideoEditorPlayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorPlayerView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorPlayerView.swift; sourceTree = ""; }; + 6C2E793CB5C9B430F36FE3573B5EBAB4 /* OIMManager+User.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+User.m"; path = "OpenIMSDK/Interface/OIMManager+User.m"; sourceTree = ""; }; + 6C4D7FBD66D7474E6981A9772DBE9E40 /* MqttDecodeSubAck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttDecodeSubAck.swift; path = Source/MqttDecodeSubAck.swift; sourceTree = ""; }; + 6C658557DD91AA8F899ABACC31226433 /* RxSwiftExt.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwiftExt.release.xcconfig; sourceTree = ""; }; + 6C7A61E9DB82D02FEA27B03B819C2C7A /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Sources/ConstraintDirectionalInsets.swift; sourceTree = ""; }; + 6C8171B585A7AB98F4DAC387B9569C8D /* MqttDecodePubAck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttDecodePubAck.swift; path = Source/MqttDecodePubAck.swift; sourceTree = ""; }; + 6C98EBBA8FA597707BF0B50B83AE3CE9 /* vp8_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8_dec.c; path = src/dec/vp8_dec.c; sourceTree = ""; }; + 6CA7E77AA99A3B25E82ACB1C03DE1AFF /* URL+Moya.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+Moya.swift"; path = "Sources/Moya/URL+Moya.swift"; sourceTree = ""; }; + 6CC9F61619926E872D28D902C1AF880B /* IQKeyboardManager+ToolbarManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarManager.swift"; path = "IQKeyboardManagerSwift/IQKeyboardToolbarManager/IQKeyboardManager+ToolbarManager.swift"; sourceTree = ""; }; + 6CCA2FE51D5FD515273072EB283E8F5D /* EllipseAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EllipseAnimation.swift; path = Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift; sourceTree = ""; }; + 6CEDFF8B9C44A6519EBCD6F47B0F262D /* Deferred.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deferred.swift; path = RxSwift/Observables/Deferred.swift; sourceTree = ""; }; + 6D3AFCC822EA201EE0774A79F8B66DF7 /* MaskContainerLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MaskContainerLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/MaskContainerLayer.swift; sourceTree = ""; }; + 6D40C7E7A6B409DD2DD2897EE900996D /* SGScanViewConfigure.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGScanViewConfigure.h; path = SGQRCode/ScanView/SGScanViewConfigure.h; sourceTree = ""; }; + 6D70119D576DA10861861869B0B91C91 /* cost_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_neon.c; path = src/dsp/cost_neon.c; sourceTree = ""; }; + 6D8493AA193CAA6E09CB81F3D8A8C477 /* ShapeRenderLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeRenderLayer.swift; path = Sources/Private/MainThread/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift; sourceTree = ""; }; + 6D85D65A785DD11618ACCAF108CFE339 /* RxSwiftExt-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxSwiftExt-dummy.m"; sourceTree = ""; }; + 6DC8C41B7AB96DC700B00AEB39525F5C /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; + 6DD35593A8572CEFFF1D2C61579D97C6 /* LRUCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LRUCache.swift; path = Sources/Private/EmbeddedLibraries/LRUCache/LRUCache.swift; sourceTree = ""; }; + 6DE422219528B0F8C044E9C23AC7E206 /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; + 6E0C12AE7D6E705E0AB3F100E94BDB07 /* ControlTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlTarget.swift; path = RxCocoa/Common/ControlTarget.swift; sourceTree = ""; }; + 6E2020960628625BDC018E48BA326EB2 /* Trim.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Trim.swift; path = Sources/Private/Model/ShapeItems/Trim.swift; sourceTree = ""; }; + 6E26B46220F7707A660D0AD6D5B62D5B /* RxRelay.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxRelay.modulemap; sourceTree = ""; }; + 6E431C8A3F91F378151064C20F5B3FED /* Lock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Lock.swift; path = RxSwift/Concurrency/Lock.swift; sourceTree = ""; }; + 6E4DF96474119089881BF2A330AB1728 /* Timer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timer.swift; path = RxSwift/Observables/Timer.swift; sourceTree = ""; }; + 6E6F7400F823325A0BA8E1444E705B35 /* SGSoundEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGSoundEffect.m; path = SGQRCode/SoundEffect/SGSoundEffect.m; sourceTree = ""; }; + 6E797E34167479AB4C62BEF24C93CAAE /* UICollectionViewLayout+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UICollectionViewLayout+MJRefresh.h"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.h"; sourceTree = ""; }; 6E897F35E5E27028AC58B14B552FBC8D /* IQKeyboardCore-IQKeyboardCore */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardCore-IQKeyboardCore"; path = IQKeyboardCore.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 6EE4B63201F50240A5E467DFB9D59047 /* DDContextFilterLogFormatter+Deprecated.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DDContextFilterLogFormatter+Deprecated.m"; path = "Sources/CocoaLumberjack/Extensions/DDContextFilterLogFormatter+Deprecated.m"; sourceTree = ""; }; - 6EEA47533FC8C4392A59226694906812 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = RxSwift/Observables/Filter.swift; sourceTree = ""; }; - 6EECED2B41B3AE95453700ECC56AA3BB /* NSObject+MJProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJProperty.h"; path = "MJExtension/NSObject+MJProperty.h"; sourceTree = ""; }; + 6E9D7F05983C95E168849B51B28EC29C /* ShapeContainerLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeContainerLayer.swift; path = Sources/Private/MainThread/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift; sourceTree = ""; }; + 6ED83F2399718196583271FC686CBC4D /* IQKeyboardNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardNotification-prefix.pch"; sourceTree = ""; }; 6EFB05F1F29FAD078E29A839C5020799 /* MBProgressHUD-MBProgressHUD */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "MBProgressHUD-MBProgressHUD"; path = MBProgressHUD.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 6F040177292504B70D8F778A5E3CD95B /* YBIBDataMediator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBDataMediator.m; path = YBImageBrowser/Base/YBIBDataMediator.m; sourceTree = ""; }; - 6F1D204D6DDAB229B632C8DE0C49CE0B /* CompositeDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositeDisposable.swift; path = RxSwift/Disposables/CompositeDisposable.swift; sourceTree = ""; }; - 6F733D4160D39073D45BC056455B855F /* vp8i_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8i_dec.h; path = src/dec/vp8i_dec.h; sourceTree = ""; }; - 6F774BD72D02B75021A7214A32F49A43 /* PreCompLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreCompLayer.swift; path = Sources/Private/CoreAnimation/Layers/PreCompLayer.swift; sourceTree = ""; }; - 6FA64DC127F889004374FBFEC2973DD1 /* color_cache_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = color_cache_utils.c; path = src/utils/color_cache_utils.c; sourceTree = ""; }; - 6FB2EC71F2E7CDFA675A35527736E651 /* IQTextView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextView-prefix.pch"; sourceTree = ""; }; - 6FB9C7E464A314BD63D92538B44F8A6D /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = Sources/Cache/Storage.swift; sourceTree = ""; }; - 6FCBBFB94C92AAF65512098808136293 /* MaskCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MaskCompositionLayer.swift; path = Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift; sourceTree = ""; }; - 6FE753BC375C0C5909BCC6A256CBBD0C /* OIMUserInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMUserInfo.h; path = OpenIMSDK/Model/OIMUserInfo.h; sourceTree = ""; }; - 6FF0DAC53114F5A38ED18BC9E4CFB6EF /* YBIBDataProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBDataProtocol.h; path = YBImageBrowser/Protocol/YBIBDataProtocol.h; sourceTree = ""; }; - 701AC824D35F7C99415ECEF8F3BF5AA5 /* MATraceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATraceManager.h; path = MAMapKit.framework/Headers/MATraceManager.h; sourceTree = ""; }; - 705E66B46D3FB6C3860039695FEE7E45 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = WebImage/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 705E874F6D90A41BB91F8827850D08E5 /* once.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = once.swift; path = Source/RxSwift/once.swift; sourceTree = ""; }; - 707AC05913DB1E5066C5D4A3117A8D94 /* SDImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoder.h; path = SDWebImage/Core/SDImageCoder.h; sourceTree = ""; }; - 708DBDCABBB77C6D70637B96FB6FC314 /* GTCommonSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTCommonSDK.debug.xcconfig; sourceTree = ""; }; - 709352A78011CC2D4BE14AD43BFD8505 /* ItemEvents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ItemEvents.swift; path = RxCocoa/iOS/Events/ItemEvents.swift; sourceTree = ""; }; - 70DB28246BADC7873C92DF9506CFB0E9 /* OpenIMSDKCore-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "OpenIMSDKCore-xcframeworks.sh"; sourceTree = ""; }; - 70EB9DECE01FBEF4BE7887739229CDA6 /* lottie-ios.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios.release.xcconfig"; sourceTree = ""; }; - 715CB07F1E5C3BEAB5B768CF6A9DD872 /* HXPHPicker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HXPHPicker.release.xcconfig; sourceTree = ""; }; - 716510DE893831EBA6423B0D86C62DDB /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageView+Kingfisher.swift"; path = "Sources/Extensions/ImageView+Kingfisher.swift"; sourceTree = ""; }; - 716D4AEC881C597AE0F28479D16E71AE /* GradientFillRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientFillRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift; sourceTree = ""; }; - 71CAA31075A3F10488171E1B74FC8B0F /* SwiftyUserDefaults.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyUserDefaults.modulemap; sourceTree = ""; }; - 71D2F825E8CB5F153CB1129FD6C30A14 /* RxCollectionViewSectionedReloadDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewSectionedReloadDataSource.swift; path = Sources/RxDataSources/RxCollectionViewSectionedReloadDataSource.swift; sourceTree = ""; }; - 71D663E2E1139410A15C558A6896C8C7 /* TagListView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TagListView-umbrella.h"; sourceTree = ""; }; - 71DF2431E6CA3D1CAA83A2C349EEFD5D /* MJRefreshConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConst.h; path = MJRefresh/MJRefreshConst.h; sourceTree = ""; }; - 71E50B64226D3560CAF37B63F959E322 /* YYImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYImageCoder.m; path = YYImage/YYImageCoder.m; sourceTree = ""; }; - 71FD6427BA94D4884EC2B62E60E9E7A3 /* DefaultsKeys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKeys.swift; path = Sources/DefaultsKeys.swift; sourceTree = ""; }; - 722701F61A9A66CC4971FB3EA06BD853 /* LottieColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieColor.swift; path = Sources/Public/Primitives/LottieColor.swift; sourceTree = ""; }; - 722CBBE05AA45B4D4BCC2A8D48EC1CFB /* OIMCallbacker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMCallbacker.h; path = OpenIMSDK/Callbacker/OIMCallbacker.h; sourceTree = ""; }; - 725E391E4DD80A683204D50692D49254 /* AlbumViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumViewController.swift; path = Sources/HXPHPicker/Picker/Controller/AlbumViewController.swift; sourceTree = ""; }; - 72679461AA0F6BDFD187D5631DB82AEB /* dec_clip_tables.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_clip_tables.c; path = src/dsp/dec_clip_tables.c; sourceTree = ""; }; - 726A570EB3A764BD9182B257D8A9B086 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; - 728805FD0FBBD9E7F0C8D7E8AA79948C /* AuthenticationInterceptor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationInterceptor.swift; path = Source/Features/AuthenticationInterceptor.swift; sourceTree = ""; }; - 72CC42138666BE5E04A9735B223C6772 /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyJSON.modulemap; sourceTree = ""; }; - 72D229FA5EF1F07B5006BB07983E73F3 /* RxPickerViewAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewAdapter.swift; path = Sources/RxDataSources/RxPickerViewAdapter.swift; sourceTree = ""; }; - 736BB63679A232597C9253B4A0B634D1 /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; - 7373E895FB24690540181BFF56955312 /* URLPatchComponentMatchResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLPatchComponentMatchResult.swift; path = Sources/URLMatcher/URLPatchComponentMatchResult.swift; sourceTree = ""; }; - 7375C57236DEA3235E0F2EEB61FA4BC5 /* ImageProgressive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProgressive.swift; path = Sources/Image/ImageProgressive.swift; sourceTree = ""; }; - 7381A6E52759A60F4F9B92C1DE3B2E15 /* GradientRenderLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientRenderLayer.swift; path = Sources/Private/CoreAnimation/Layers/GradientRenderLayer.swift; sourceTree = ""; }; - 73A10AD1404B88D834B5499FC7837CFD /* MACircle.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACircle.h; path = MAMapKit.framework/Headers/MACircle.h; sourceTree = ""; }; - 73AAE64514CF9375B037045D901E983C /* MASLayoutConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASLayoutConstraint.m; path = Masonry/MASLayoutConstraint.m; sourceTree = ""; }; - 73B1D5C56726F64AE0476C0C1DE058EC /* ColorExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorExtension.swift; path = Sources/Private/Utility/Primitives/ColorExtension.swift; sourceTree = ""; }; - 73BD189B4E00DFEAEDCFD2ED648BD5A6 /* ObserverType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverType.swift; path = RxSwift/ObserverType.swift; sourceTree = ""; }; - 73CA2DF5C48F1B7F05C3D4908C3F0563 /* AMapLocationRegionObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationRegionObj.h; path = AMapLocationKit.framework/Headers/AMapLocationRegionObj.h; sourceTree = ""; }; - 73CD422A69C42F923FBDDB22D2266109 /* YBIBSentinel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBSentinel.h; path = YBImageBrowser/Helper/YBIBSentinel.h; sourceTree = ""; }; - 74108890315A63C8D0AA1EAC2AA753B1 /* RxSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-prefix.pch"; sourceTree = ""; }; - 7410C1DF2145BEBE0C7CD5DAAE9F1ADB /* endian_inl_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = endian_inl_utils.h; path = src/utils/endian_inl_utils.h; sourceTree = ""; }; - 744818E8CAF84E619740349AA8310B49 /* Differentiator.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Differentiator.modulemap; sourceTree = ""; }; - 745E49067846460E0A71AE45B322158C /* LayerModel+makeAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "LayerModel+makeAnimationLayer.swift"; path = "Sources/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift"; sourceTree = ""; }; - 7462F84AB2989D3A2675AA6CA2CC540B /* YBIBVideoTopBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoTopBar.h; path = Video/YBIBVideoTopBar.h; sourceTree = ""; }; - 748290F58F89C4842B47E1474CAA8B3D /* ImmediateSchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImmediateSchedulerType.swift; path = RxSwift/ImmediateSchedulerType.swift; sourceTree = ""; }; - 74CF6920D0B4CFAC98C5DBF9737EA29D /* Differentiator.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Differentiator.debug.xcconfig; sourceTree = ""; }; - 74D831646F1721D18E9CB61D78B92424 /* alphai_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = alphai_dec.h; path = src/dec/alphai_dec.h; sourceTree = ""; }; - 74E963FDBB2A72AA3EB7D60BB0724666 /* Driver+Subscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Driver+Subscription.swift"; path = "RxCocoa/Traits/Driver/Driver+Subscription.swift"; sourceTree = ""; }; - 74ED30CF01D00C8356D9811523C8FB36 /* RxCocoa.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxCocoa.debug.xcconfig; sourceTree = ""; }; - 750F89B19E3F2994003AEED155F64886 /* IQInvocation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQInvocation.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQInvocation.swift; sourceTree = ""; }; - 753831899F12C2CB084FFE69415AB0DD /* MoyaProvider+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MoyaProvider+Internal.swift"; path = "Sources/Moya/MoyaProvider+Internal.swift"; sourceTree = ""; }; - 7545B30E10C04C8D4BE734F25C09CB15 /* ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist"; sourceTree = ""; }; - 75AB146FA8EACB2D7B8898EDB3F75A16 /* _RX.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RX.h; path = RxCocoa/Runtime/include/_RX.h; sourceTree = ""; }; - 75BB2637D9DB872F6C846F83FBCD4A40 /* AMapLocationKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapLocationKit.framework; sourceTree = ""; }; - 75E5014C5A20DE4797B4451A675607F3 /* OIMConversationInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMConversationInfo.h; path = OpenIMSDK/Model/OIMConversationInfo.h; sourceTree = ""; }; - 75FE13F045D517683751F241C2D07B5D /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = ""; }; - 7631896C502615B6F84E4C67DA4FFCD8 /* libwebp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = libwebp.modulemap; sourceTree = ""; }; - 763E77216C850D70057D326B4A6BA473 /* UISearchController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISearchController+Rx.swift"; path = "RxCocoa/iOS/UISearchController+Rx.swift"; sourceTree = ""; }; - 769581DC9784BD5739E44A9BD1FEE12D /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; - 76A218800E579334BACA61C598A34ED7 /* KingfisherOptionsInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherOptionsInfo.swift; path = Sources/General/KingfisherOptionsInfo.swift; sourceTree = ""; }; - 76B335F9C1074A16DC6C649D6F834E5F /* SwitchIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwitchIfEmpty.swift; path = RxSwift/Observables/SwitchIfEmpty.swift; sourceTree = ""; }; - 76C66EEFD236908E007E71E3DEB9A2C1 /* NetworkActivityPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkActivityPlugin.swift; path = Sources/Moya/Plugins/NetworkActivityPlugin.swift; sourceTree = ""; }; - 76F3D82220A6BE6531EBF65472D2F31B /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; - 76F5FB9F41D1AC5CB74A20A5F1BCAB11 /* SingleAsync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAsync.swift; path = RxSwift/Observables/SingleAsync.swift; sourceTree = ""; }; - 76F771CC8FF3EE94CAD251B016704D2B /* Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rx.swift; path = RxSwift/Rx.swift; sourceTree = ""; }; - 7736D9652CE71234ABED55D62ADBD35F /* AssetManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssetManager.swift; path = Sources/HXPHPicker/Core/Util/AssetManager.swift; sourceTree = ""; }; - 773911D3EAAE3F33A663F7CC1EC09005 /* ImageBinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageBinder.swift; path = Sources/SwiftUI/ImageBinder.swift; sourceTree = ""; }; - 774303A6EF1A2EAA26EEB43E1E3F8342 /* lossless_enc_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_sse41.c; path = src/dsp/lossless_enc_sse41.c; sourceTree = ""; }; - 775230A1FA491738DF687BEEB0E36177 /* AnimationTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationTime.swift; path = Sources/Public/Primitives/AnimationTime.swift; sourceTree = ""; }; - 77677AE1490EEECD80C448F28787D67E /* OIMSimpleResultInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSimpleResultInfo.m; path = OpenIMSDK/Model/OIMSimpleResultInfo.m; sourceTree = ""; }; - 777510880AE0C0FEC2BF99AC49794494 /* alpha_processing.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing.c; path = src/dsp/alpha_processing.c; sourceTree = ""; }; - 779A45EE4D8A55285225137A022FF947 /* DDASLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDASLLogger.h; sourceTree = ""; }; - 780859E89AEFB4AE5934635E23DD9F9E /* MASViewAttribute.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewAttribute.h; path = Masonry/MASViewAttribute.h; sourceTree = ""; }; - 781602548FAD9A55430D9ACCCB6098CC /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON/SwiftyJSON.swift; sourceTree = ""; }; - 78936EC2DBF2CF8634C0CC3581635D28 /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = ""; }; - 78CB2111E31FA7D356C77E38AD4E7B19 /* UIView+ResignObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+ResignObjc.swift"; path = "IQKeyboardManagerSwift/Resign/UIKItExtensions/UIView+ResignObjc.swift"; sourceTree = ""; }; - 78E82B74D1377FBBEC130E8053016A10 /* DictionaryTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DictionaryTransform.swift; path = Sources/DictionaryTransform.swift; sourceTree = ""; }; - 78EDEE5E177BF6DF888E2F685ABDAF79 /* NavigatorProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigatorProtocol.swift; path = Sources/URLNavigator/NavigatorProtocol.swift; sourceTree = ""; }; - 78F7A8987B24B2D899CBD7F38349871F /* KeyframeInterpolator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyframeInterpolator.swift; path = Sources/Private/Utility/Interpolatable/KeyframeInterpolator.swift; sourceTree = ""; }; - 79397AC7344C5EAFB7C39EC8AC865589 /* Observable+Alias.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Alias.swift"; path = "Source/Tools/Observable+Alias.swift"; sourceTree = ""; }; - 7943889E640D6E0573612C76BC2D55C7 /* bit_reader_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_reader_utils.h; path = src/utils/bit_reader_utils.h; sourceTree = ""; }; - 797D2CF8D70578E3BCF39EF8F5D828CE /* YBIBImageData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageData.h; path = YBImageBrowser/Image/YBIBImageData.h; sourceTree = ""; }; - 79991E2B9E282CACD293EC27C823FE3E /* AMap.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = AMap.bundle; path = MAMapKit.framework/AMap.bundle; sourceTree = ""; }; - 79B1ECE0D7959F99866089A3071E708D /* AMapFoundationKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapFoundationKit.framework; sourceTree = ""; }; - 79B611C17C06D5FF4CCB095774A495E9 /* Keyframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Keyframe.swift; path = Sources/Public/Keyframes/Keyframe.swift; sourceTree = ""; }; - 79D95A5C4EA4042D907803C45FFD333C /* MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtension.h; path = MJExtension/MJExtension.h; sourceTree = ""; }; - 79E707A863CA7859212FEFF8209B2C51 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = ""; }; - 7A08D4E2AC3083940E2DD5AB50F42519 /* enc_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_mips_dsp_r2.c; path = src/dsp/enc_mips_dsp_r2.c; sourceTree = ""; }; - 7A4F33BE715AF8213D74710FD0599549 /* CallbackQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallbackQueue.swift; path = Sources/Utility/CallbackQueue.swift; sourceTree = ""; }; - 7A5645C607400D64B7E1AB629322A90E /* ShapeLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeLayerModel.swift; path = Sources/Private/Model/Layers/ShapeLayerModel.swift; sourceTree = ""; }; - 7A5CF121F3B617D5C4A09D9BDD4D5011 /* MJRefreshConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConfig.h; path = MJRefresh/MJRefreshConfig.h; sourceTree = ""; }; - 7A5D9C68C0A84DD8FEDB37BAD59E8E7C /* RectNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RectNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/RectNode.swift; sourceTree = ""; }; - 7A63F0A1DA3294431A4B78D09A498914 /* RxCocoa-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxCocoa-prefix.pch"; sourceTree = ""; }; - 7AAC2C1B32FB6621960C9A8DA2B3F93B /* MJFoundation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJFoundation.h; path = MJExtension/MJFoundation.h; sourceTree = ""; }; - 7AC1D8D7E70806DAFFF676321C42C9EC /* PhotoEditorFilterView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorFilterView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorFilterView.swift; sourceTree = ""; }; - 7AC464DFEB919BE05FB5409F4D33C4D3 /* MAPolygon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolygon.h; path = MAMapKit.framework/Headers/MAPolygon.h; sourceTree = ""; }; - 7ACD8B678F457F12617E8F02C445A9F0 /* vp8i_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8i_enc.h; path = src/enc/vp8i_enc.h; sourceTree = ""; }; - 7AD087C00AE0A2CB66E870C10681C588 /* SharedSequence+Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SharedSequence+Operators.swift"; path = "RxCocoa/Traits/SharedSequence/SharedSequence+Operators.swift"; sourceTree = ""; }; - 7B158E503EAACD9D43DEF7BA2586498A /* YBIBSentinel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBSentinel.m; path = YBImageBrowser/Helper/YBIBSentinel.m; sourceTree = ""; }; - 7B77DEB6A390666DF68E81ADE12F1BED /* quant_levels_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_levels_utils.c; path = src/utils/quant_levels_utils.c; sourceTree = ""; }; - 7B95BC3382D56B69F02F01E003F03796 /* ObservableType+Weak.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+Weak.swift"; path = "Source/RxSwift/ObservableType+Weak.swift"; sourceTree = ""; }; - 7BA4DAE10AD47725EEC376152E05E20C /* IQKeyboardToolbar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardToolbar-dummy.m"; sourceTree = ""; }; - 7BB619052F7DA53A970B433F53AAEA9E /* not.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = not.swift; path = Source/RxSwift/not.swift; sourceTree = ""; }; - 7BC1184B394B0F1891FA39A297FFFEA0 /* MoyaProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoyaProvider.swift; path = Sources/Moya/MoyaProvider.swift; sourceTree = ""; }; - 7BEFF4F4EB8D45BF83AE2F386D71FE70 /* IQKeyboardToolbar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbar-umbrella.h"; sourceTree = ""; }; - 7BF5D4957693B5B5DBC61FAC96B2CF23 /* LottieAnimationSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationSource.swift; path = Sources/Private/Utility/LottieAnimationSource.swift; sourceTree = ""; }; - 7C10ED747514E81C114AB0F3CA16FEE2 /* OIMMessageInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMMessageInfo.m; path = OpenIMSDK/Model/OIMMessageInfo.m; sourceTree = ""; }; - 7C22CE4CD1F8C21C3216ED7B7D0E2880 /* DateInRegion+Compare.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Compare.swift"; path = "Sources/SwiftDate/DateInRegion/DateInRegion+Compare.swift"; sourceTree = ""; }; - 7C262EC7FE9B7C5853A9BF656E7B4C31 /* Core+UIFont.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIFont.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIFont.swift"; sourceTree = ""; }; - 7C2D5F1FE3CA03C21F8415CE9CDE6383 /* MACustomCalloutView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomCalloutView.h; path = MAMapKit.framework/Headers/MACustomCalloutView.h; sourceTree = ""; }; - 7C2E339CA969D2C5ED74BA6ECD6F69EE /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardCore/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 7C37BD2829041D89916A260C97F51808 /* AMapFoundation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapFoundation.release.xcconfig; sourceTree = ""; }; - 7C431CF55C1DEA301F7009AC22BAF420 /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = ""; }; - 7C734560368C98DD1126AAEE26285B2F /* ignore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ignore.swift; path = Source/RxSwift/ignore.swift; sourceTree = ""; }; - 7C809857309C827761D59B9706AD5589 /* ImagePrefetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePrefetcher.swift; path = Sources/Networking/ImagePrefetcher.swift; sourceTree = ""; }; + 6F21BA5E097A8DE88F83DD9522A9D0A0 /* CocoaMQTT.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CocoaMQTT.modulemap; sourceTree = ""; }; + 6F42108168E3827DDBA4CF6555E2306D /* AlbumTickView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumTickView.swift; path = Sources/HXPHPicker/Picker/View/AlbumTickView.swift; sourceTree = ""; }; + 6F476A0F630588EC001BA726F7230DE0 /* MAAnimatedAnnotation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnimatedAnnotation.h; path = MAMapKit.framework/Headers/MAAnimatedAnnotation.h; sourceTree = ""; }; + 6F49859D2EBDF3619C22E8A959FF01BD /* YBImageBrowserVideo.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = YBImageBrowserVideo.bundle; path = Video/YBImageBrowserVideo.bundle; sourceTree = ""; }; + 6F8206ABFEFF019F1EA61DE7AADF9462 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Core/Request.swift; sourceTree = ""; }; + 6FB0A97444E8C7D469D5B0FF79C781D6 /* mips_macro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mips_macro.h; path = src/dsp/mips_macro.h; sourceTree = ""; }; + 6FC3E4E3FE9B243927547B8B3D39931C /* Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concurrency.swift; path = Source/Features/Concurrency.swift; sourceTree = ""; }; + 6FC8E717DED2B35BD1F66E0A8B62D552 /* Storage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Storage.swift; path = Sources/Cache/Storage.swift; sourceTree = ""; }; + 706126F07CEBF1B19EAA3D54064C3002 /* TimePeriodProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodProtocol.swift; path = Sources/SwiftDate/TimePeriod/TimePeriodProtocol.swift; sourceTree = ""; }; + 709B926DD9D3886E0BA907D0A3655373 /* RxCocoa.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxCocoa.release.xcconfig; sourceTree = ""; }; + 70CEF74CF654DC40CAA98E45E03634BD /* OIMFileElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMFileElem.h; path = OpenIMSDK/Model/OIMFileElem.h; sourceTree = ""; }; + 70CF7B526B329D2F7D16A737DF3E72CA /* IQKeyboardToolbarManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardToolbarManager.modulemap; sourceTree = ""; }; + 70DF95CF1A956131DE522B1EC58F5D47 /* OIMFullUserInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMFullUserInfo.m; path = OpenIMSDK/Model/OIMFullUserInfo.m; sourceTree = ""; }; + 7111115F1C55B2A19B14616B49223065 /* PhotoCroppingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoCroppingConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/PhotoCroppingConfiguration.swift; sourceTree = ""; }; + 71223FB6D980C715AF98D520D963B6B5 /* MqttSubscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttSubscription.swift; path = Source/MqttSubscription.swift; sourceTree = ""; }; + 712994A3D2CF6756C96528319EEF6AA9 /* utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = utils.h; path = src/utils/utils.h; sourceTree = ""; }; + 715C3629D8ED7790147D9200459C63B8 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackStateFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m; sourceTree = ""; }; + 7196CA4EF95950D8E1B0780E5CB73D1E /* IQTextView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextView-umbrella.h"; sourceTree = ""; }; + 7197893149C4441D96B6DD968118BD8C /* vp8l_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8l_enc.c; path = src/enc/vp8l_enc.c; sourceTree = ""; }; + 719C9CE13C261293D1AE894B5DA81EB7 /* Throttle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Throttle.swift; path = RxSwift/Observables/Throttle.swift; sourceTree = ""; }; + 71A128A3C931B299C59408CB2AE87451 /* syntax_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = syntax_enc.c; path = src/enc/syntax_enc.c; sourceTree = ""; }; + 71A2C4C71126517C40B0DB66C220EBD7 /* MAMapView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapView.h; path = MAMapKit.framework/Headers/MAMapView.h; sourceTree = ""; }; + 71A3AA46FA62EF3D23F05187F1EA1CD0 /* IQKeyboardAppearanceConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardAppearanceConfiguration.swift; path = IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceConfiguration.swift; sourceTree = ""; }; + 71CEC01D5366F1D7433565AE23908319 /* IQTextView+Placeholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQTextView+Placeholderable.swift"; path = "IQTextView/Classes/IQTextView+Placeholderable.swift"; sourceTree = ""; }; + 7208DE5B0D75C8BD53D09473AD6743A6 /* MAIndoorInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAIndoorInfo.h; path = MAMapKit.framework/Headers/MAIndoorInfo.h; sourceTree = ""; }; + 721C8DFB2C522F383CCF147731D6C8CE /* Take.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Take.swift; path = RxSwift/Observables/Take.swift; sourceTree = ""; }; + 723B33791793F56BD5E9F38531D5874D /* Repeater.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repeater.swift; path = Sources/Private/Model/ShapeItems/Repeater.swift; sourceTree = ""; }; + 7255A222C9A1437D1F742C8CBFEF988B /* Optional+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Optional+Extensions.swift"; path = "Sources/Differentiator/Optional+Extensions.swift"; sourceTree = ""; }; + 72580C48B12D84C13CB91FB803B3250C /* YYAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYAnimatedImageView.m; path = YYImage/YYAnimatedImageView.m; sourceTree = ""; }; + 725BEA8CF189D4B0B923DC15BD501A1C /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Sources/Networking/SessionDelegate.swift; sourceTree = ""; }; + 72766BC56FB33D493A0DA75B5189A566 /* DecodingStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecodingStrategy.swift; path = Sources/Public/Configuration/DecodingStrategy.swift; sourceTree = ""; }; + 727C62357BCC8E0AE55A67EC6658490C /* MBProgressHUD.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.debug.xcconfig; sourceTree = ""; }; + 727FFC6D0A7BEFB9E947E7D5FEB69455 /* MJExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJExtension-dummy.m"; sourceTree = ""; }; + 7282B196E51A3F4664251AA4023D0C02 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJRefresh/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 728E021DA9E63720A04C56E1FB52DA37 /* RxTabBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTabBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift; sourceTree = ""; }; + 728F4A0612FA1A63487666BF4A4B68DA /* filters_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_neon.c; path = src/dsp/filters_neon.c; sourceTree = ""; }; + 729C335AC4480787A0D8A171C363F055 /* NSBezierPath+SDRoundedCorners.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBezierPath+SDRoundedCorners.m"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.m"; sourceTree = ""; }; + 72A1EAF3B2B93A6D388301B986ACB69E /* YYImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYImage.release.xcconfig; sourceTree = ""; }; + 72BC2659EE479F1DEDEA53D93AC18285 /* MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefresh.h; path = MJRefresh/MJRefresh.h; sourceTree = ""; }; + 72CE3573CD388705660B27A2AF26D4C5 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackStateFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h; sourceTree = ""; }; + 72DF4AA01E687D7B5FA55FD57819D458 /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; }; + 72EB134685BD981674EE5719D703B0E0 /* MAGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGeometry.h; path = MAMapKit.framework/Headers/MAGeometry.h; sourceTree = ""; }; + 7307E2DAAF66A2DA284CCE8C33EB8980 /* MJRefresh.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MJRefresh.bundle; path = MJRefresh/MJRefresh.bundle; sourceTree = ""; }; + 731CEBC2B0AC7F996BF22CAFD8482D40 /* MATileOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATileOverlayRenderer.h; path = MAMapKit.framework/Headers/MATileOverlayRenderer.h; sourceTree = ""; }; + 732C3D046DA1DDAADB427A51CFA8D702 /* URLTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLTransform.swift; path = Sources/URLTransform.swift; sourceTree = ""; }; + 735D6AE5E93EF5DB28F313B462B8620D /* sharpyuv_csp.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_csp.c; path = sharpyuv/sharpyuv_csp.c; sourceTree = ""; }; + 7389364A0F9C4547DF6856032C109311 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = ""; }; + 73A9AFEB67D867F54621A8B038E14078 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; + 73C08A3172542E0D72BEEF579CA2F246 /* libwebp-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libwebp-prefix.pch"; sourceTree = ""; }; + 73FB8216CF2F66343E68F8498EADB79F /* PhotosUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PhotosUI.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/PhotosUI.framework; sourceTree = DEVELOPER_DIR; }; + 745F624AA53CEDAE08D3E89BB5C6DBED /* PhotoEditorViewController+Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoEditorViewController+Request.swift"; path = "Sources/HXPHPicker/Editor/Controller/PhotoEditorViewController+Request.swift"; sourceTree = ""; }; + 747D0903BDC62FE4C5DA5E8AA4342FAC /* picture_psnr_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_psnr_enc.c; path = src/enc/picture_psnr_enc.c; sourceTree = ""; }; + 7494A83BA67A532F60523715329204DF /* WechatOpenSDK-XCFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "WechatOpenSDK-XCFramework.release.xcconfig"; sourceTree = ""; }; + 749621F3F175B83BA32CAE04C651F4DF /* DDLog+LOGV.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDLog+LOGV.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDLog+LOGV.h"; sourceTree = ""; }; + 74B3D2B854D0C4E61AE93E1D37D28752 /* sharpyuv_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_neon.c; path = sharpyuv/sharpyuv_neon.c; sourceTree = ""; }; + 74C69FE3005EC8FA3F9D8FCEC50F6CC8 /* OIMPictureElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMPictureElem.h; path = OpenIMSDK/Model/OIMPictureElem.h; sourceTree = ""; }; + 74CA6CFA6A9272E68BB7A7285B05F588 /* ImageModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageModifier.swift; path = Sources/Networking/ImageModifier.swift; sourceTree = ""; }; + 74ED59197619BCC0BC378F7696D9CF23 /* RxPickerViewAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewAdapter.swift; path = RxCocoa/iOS/DataSources/RxPickerViewAdapter.swift; sourceTree = ""; }; + 74EF885F453A96CCB8817B3E6A482055 /* MoyaProvider+Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MoyaProvider+Defaults.swift"; path = "Sources/Moya/MoyaProvider+Defaults.swift"; sourceTree = ""; }; + 751C8796E14CDA48CEFF8C95250759A9 /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = RxSwift/Observables/Filter.swift; sourceTree = ""; }; + 7537436472ABFEAD772B0BF688824449 /* MainThreadAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainThreadAnimationLayer.swift; path = Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift; sourceTree = ""; }; + 754D0F51CD2EAF6A474BED8B1704DE6B /* CloseButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CloseButton.swift; path = TagListView/CloseButton.swift; sourceTree = ""; }; + 75705F5AA04E07912B9A7028B41CC240 /* ConcurrentDispatchQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentDispatchQueueScheduler.swift; path = RxSwift/Schedulers/ConcurrentDispatchQueueScheduler.swift; sourceTree = ""; }; + 75859D611A6F089B1FDC29D1AF73E27F /* ValidationType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValidationType.swift; path = Sources/Moya/ValidationType.swift; sourceTree = ""; }; + 7594C627631107EC787B010DDB216F87 /* bit_reader_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = bit_reader_utils.c; path = src/utils/bit_reader_utils.c; sourceTree = ""; }; + 75AA059908618543FD7A7E7DD4C6BEAA /* SDWebImageCacheSerializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheSerializer.h; path = SDWebImage/Core/SDWebImageCacheSerializer.h; sourceTree = ""; }; + 75CFF08BA767C49703863DFF96165154 /* Queue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Queue.swift; path = Platform/DataStructures/Queue.swift; sourceTree = ""; }; + 75D18C3514B0AB93334F121664FB2959 /* DropShadowStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropShadowStyle.swift; path = Sources/Private/Model/LayerStyles/DropShadowStyle.swift; sourceTree = ""; }; + 75E672D2E3F85192FCB6AA5DB98E8607 /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/Cache/ImageCache.swift; sourceTree = ""; }; + 761EDCF2FCF03DCA3D4AAE68F1AFF4F6 /* GroupBy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupBy.swift; path = RxSwift/Observables/GroupBy.swift; sourceTree = ""; }; + 763616BE3E35702DEF0239BC9469B331 /* ShapeLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeLayer.swift; path = Sources/Private/CoreAnimation/Layers/ShapeLayer.swift; sourceTree = ""; }; + 7657F084D1FA639C2B0E06330CD5D367 /* CurveVertex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurveVertex.swift; path = Sources/Private/Utility/Primitives/CurveVertex.swift; sourceTree = ""; }; + 765D3D4E7343A74C9DAAC6872CCA30D6 /* YBIBImageCell+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBImageCell+Internal.h"; path = "YBImageBrowser/Image/YBIBImageCell+Internal.h"; sourceTree = ""; }; + 7675A584D15BA63139E519FD2CB2457A /* NSObject+Rx+RawRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx+RawRepresentable.swift"; path = "RxCocoa/Foundation/NSObject+Rx+RawRepresentable.swift"; sourceTree = ""; }; + 767C6D24F65E9C5553D193CDDA8BAE82 /* Sequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sequence.swift; path = RxSwift/Observables/Sequence.swift; sourceTree = ""; }; + 768284F94C04D4AA181C44C6DABE481C /* DDContextFilterLogFormatter+Deprecated.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDContextFilterLogFormatter+Deprecated.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDContextFilterLogFormatter+Deprecated.h"; sourceTree = ""; }; + 7697809BBA99F7988F7FFD07178DF004 /* URLSession+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSession+Rx.swift"; path = "RxCocoa/Foundation/URLSession+Rx.swift"; sourceTree = ""; }; + 76CC33947A6F23A709A9F9686648B932 /* quant_levels_dec_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant_levels_dec_utils.h; path = src/utils/quant_levels_dec_utils.h; sourceTree = ""; }; + 76D165A54C30392DFC0BBA605E58B93F /* UIImage+MemoryCacheCost.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MemoryCacheCost.h"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.h"; sourceTree = ""; }; + 76E48E1B8ED8E32B9FD17F6AF5FD4C19 /* DDMultiFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDMultiFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDMultiFormatter.h; sourceTree = ""; }; + 76FB8636DE8E4F96063F7028E44A0E04 /* ErasedContentProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ErasedContentProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ErasedContentProviding.swift; sourceTree = ""; }; + 77108217CD9670D65A815C85CAD4BC74 /* NSBezierPath+SDRoundedCorners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBezierPath+SDRoundedCorners.h"; path = "SDWebImage/Private/NSBezierPath+SDRoundedCorners.h"; sourceTree = ""; }; + 7739C14DC6B605D8F2466FFD82090ED7 /* MJRefresh-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MJRefresh-Info.plist"; sourceTree = ""; }; + 773F9B01882667DE86F6CA4CE8008AF1 /* SDWebImageDownloaderResponseModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderResponseModifier.m; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.m; sourceTree = ""; }; + 775A6AD8F59EB8B8134F15DF8752882A /* libwebp-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "libwebp-Info.plist"; sourceTree = ""; }; + 7772449672CBE48D3FFA0D9317D8AD48 /* EpoxyModelStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyModelStorage.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelStorage.swift; sourceTree = ""; }; + 777F31EBF8D1DD8526D7F094EE35DAF4 /* sharpyuv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv.h; path = sharpyuv/sharpyuv.h; sourceTree = ""; }; + 779B2359143D01352428D637B66ABB03 /* YBIBTopView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBTopView.h; path = YBImageBrowser/ToolView/YBIBTopView.h; sourceTree = ""; }; + 77A1006A98BEC8471B208887084BC2DC /* SwiftDate-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftDate-dummy.m"; sourceTree = ""; }; + 77D36BE38B7CA86985F86993EB76ED85 /* KeyframeGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyframeGroup.swift; path = Sources/Private/Model/Keyframes/KeyframeGroup.swift; sourceTree = ""; }; + 77F14C85DC9D13A5DDC84E594EEA8EA7 /* AnimationTime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationTime.swift; path = Sources/Public/Primitives/AnimationTime.swift; sourceTree = ""; }; + 77FD67ABAAE7C891D12DD57D0E9D1D83 /* RetryPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryPolicy.swift; path = Source/Features/RetryPolicy.swift; sourceTree = ""; }; + 783FC12BAED041F378F97768D2B28B8C /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = ""; }; + 78407664800D43DC47B50BE2A39D946A /* Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debug.swift; path = RxSwift/Observables/Debug.swift; sourceTree = ""; }; + 78663799850368AB5C48ED1F8C841B69 /* PhotoEditorDrawView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorDrawView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorDrawView.swift; sourceTree = ""; }; + 78A70A14941070D7C9E513ECE7ECCF02 /* UIImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImageView+WebCache.m"; path = "SDWebImage/Core/UIImageView+WebCache.m"; sourceTree = ""; }; + 78C01105638592D5D6B38F6C58CC2EE0 /* AnimatableSectionModelType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatableSectionModelType.swift; path = Sources/Differentiator/AnimatableSectionModelType.swift; sourceTree = ""; }; + 78C694E50921AD52B782E980CAE66D3D /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = ""; }; + 78F45D1A1EB720928FAD6EFDCCBE1536 /* KeychainItemAccessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainItemAccessibility.swift; path = SwiftKeychainWrapper/KeychainItemAccessibility.swift; sourceTree = ""; }; + 7928401BE8E30C66EE3ADE8DD8F0B52D /* IQPlaceholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQPlaceholderable.swift; path = IQKeyboardToolbar/Placeholderable/IQPlaceholderable.swift; sourceTree = ""; }; + 797F1309BF0507E755025835173DA3E3 /* Core+UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIImage.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIImage.swift"; sourceTree = ""; }; + 7983D53E055B37FF8E25038B02CC164D /* OIMCallbacker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMCallbacker.h; path = OpenIMSDK/Callbacker/OIMCallbacker.h; sourceTree = ""; }; + 79B63F73A0E96CFFC29D7CA1F042FF88 /* WithUnretained.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WithUnretained.swift; path = RxSwift/Observables/WithUnretained.swift; sourceTree = ""; }; + 79B7929EC24027379B0B163DA94A6AFA /* UIImage+Metadata.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Metadata.h"; path = "SDWebImage/Core/UIImage+Metadata.h"; sourceTree = ""; }; + 7A15C785772B2FB9827145D163C5E770 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = ""; }; + 7A3BD5869D2B1C7A4FBF323D773D9E1C /* SwiftDate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftDate.swift; path = Sources/SwiftDate/SwiftDate.swift; sourceTree = ""; }; + 7A4BFE94DC6BB805A8659EF7C8C4D022 /* Infallible+Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Operators.swift"; path = "RxSwift/Traits/Infallible/Infallible+Operators.swift"; sourceTree = ""; }; + 7A538427ACB5E54D82B9758C7B881AFA /* HXPHPicker.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HXPHPicker.release.xcconfig; sourceTree = ""; }; + 7A8C2DD3A2C1D03AAA15596C4B5EC68C /* Transform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transform.swift; path = Sources/Private/Model/Objects/Transform.swift; sourceTree = ""; }; + 7A8F1EA5A5A4DAA6EBB99FAC4B0D994C /* MqttDecodePubComp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttDecodePubComp.swift; path = Source/MqttDecodePubComp.swift; sourceTree = ""; }; + 7AA65DC4296085382ABB031FFD4FDBAD /* SwiftKeychainWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SwiftKeychainWrapper.h; path = SwiftKeychainWrapper/SwiftKeychainWrapper.h; sourceTree = ""; }; + 7AC9E6CA74830BF0C4F0A5DEB598B368 /* DDDispatchQueueLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDDispatchQueueLogFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDDispatchQueueLogFormatter.m; sourceTree = ""; }; + 7AEC81D4CEAFD3F38E344F8311FE012D /* lossless_common.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lossless_common.h; path = src/dsp/lossless_common.h; sourceTree = ""; }; + 7B4C1E7106CBA77D0D297129D49B1EB3 /* YYFrameImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYFrameImage.m; path = YYImage/YYFrameImage.m; sourceTree = ""; }; + 7B6958855F647734EBB24E8340EEC38B /* LottiePlaybackMode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottiePlaybackMode.swift; path = Sources/Public/Animation/LottiePlaybackMode.swift; sourceTree = ""; }; + 7B7E3FC6BDBCDDF8FE344D514AFA47BC /* RxCollectionViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxCollectionViewDataSourcePrefetchingProxy.swift; sourceTree = ""; }; + 7B82EBD3E153DBD61BEBCBDBDA0605C7 /* CocoaLumberjack-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaLumberjack-dummy.m"; sourceTree = ""; }; + 7B842D2FB9E52687A1AF54CD9740A769 /* OIMGroupApplicationInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMGroupApplicationInfo.m; path = OpenIMSDK/Model/OIMGroupApplicationInfo.m; sourceTree = ""; }; + 7BD34BB4551BFE8B66525915EEC8A279 /* ZXSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ZXSDK.release.xcconfig; sourceTree = ""; }; + 7C427136B27DC559447F9182284C8042 /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Views/Indicator.swift; sourceTree = ""; }; + 7C5F5574EA447F3EFFBEBB60DEA304A5 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 7C6318E30F642CCF4DCF9EB42BEBE4A9 /* TakeWithPredicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeWithPredicate.swift; path = RxSwift/Observables/TakeWithPredicate.swift; sourceTree = ""; }; + 7C8894A5DD9B48BB8E9CAA4880FE51C1 /* ResourceBundle-MJExtension-MJExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MJExtension-MJExtension-Info.plist"; sourceTree = ""; }; + 7C8FAD9863B07762E14BEC17A1AD179E /* IQKeyboardToolbarConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarConfiguration.swift; path = IQKeyboardToolbarManager/Classes/Configuration/IQKeyboardToolbarConfiguration.swift; sourceTree = ""; }; + 7C922F108D85E1DA2A7D649B99419548 /* ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist"; sourceTree = ""; }; 7CA3B05F07B063827B34AD2B0DB23706 /* SwiftyJSON-SwiftyJSON */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SwiftyJSON-SwiftyJSON"; path = SwiftyJSON.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 7CA4413BD540BFE68830E04D0B5F80B6 /* KFImageProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageProtocol.swift; path = Sources/SwiftUI/KFImageProtocol.swift; sourceTree = ""; }; - 7CC518F434B48E1EC17CB97405E4AAE6 /* OIMConversationInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMConversationInfo.m; path = OpenIMSDK/Model/OIMConversationInfo.m; sourceTree = ""; }; - 7CCC9D719AB7E41B97FDF91B409B1579 /* DDFileLogger+Buffering.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DDFileLogger+Buffering.m"; path = "Sources/CocoaLumberjack/Extensions/DDFileLogger+Buffering.m"; sourceTree = ""; }; - 7CCD874AE1FC5B522BA3D50B6F03D7B2 /* MJRefresh-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MJRefresh-Info.plist"; sourceTree = ""; }; - 7CE41C5B80EA05791BE83C7126E9D35C /* AnimatableSectionModelType+ItemPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AnimatableSectionModelType+ItemPath.swift"; path = "Sources/Differentiator/AnimatableSectionModelType+ItemPath.swift"; sourceTree = ""; }; - 7CE5A9E99CE471E9A158B19E7DA75F2C /* SchedulerServices+Emulation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SchedulerServices+Emulation.swift"; path = "RxSwift/Schedulers/SchedulerServices+Emulation.swift"; sourceTree = ""; }; - 7CF512563DEBEF3926ED04F7296DA8B0 /* OIMMessageElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMMessageElem.h; path = OpenIMSDK/Model/OIMMessageElem.h; sourceTree = ""; }; - 7CFD834B07B9BC8B466E8ACB23CF66F7 /* TransformOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformOf.swift; path = Sources/TransformOf.swift; sourceTree = ""; }; - 7D03309A81B860C0AC7EB6F7702CDC78 /* MAMapStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapStatus.h; path = MAMapKit.framework/Headers/MAMapStatus.h; sourceTree = ""; }; - 7D21B5AC77BB1F5C1839961C7C149A4F /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = ""; }; - 7D2727537199FB03475AF85FAF421215 /* MJRefreshHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshHeader.h; path = MJRefresh/Base/MJRefreshHeader.h; sourceTree = ""; }; - 7D2B336DD1382EE765ACAE769343CFE2 /* rescaler_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = rescaler_utils.h; path = src/utils/rescaler_utils.h; sourceTree = ""; }; - 7D32944BBFF391634E35F8A5B7F4936F /* Core+URL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+URL.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+URL.swift"; sourceTree = ""; }; - 7D3DCF34621F9247483D8AC14424E3D9 /* UIView+WebCacheOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheOperation.m"; path = "SDWebImage/Core/UIView+WebCacheOperation.m"; sourceTree = ""; }; - 7D50688D55F92F226672A561EA59EFC4 /* RxCollectionViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxCollectionViewDataSourceType.swift; sourceTree = ""; }; - 7D5D3CD64711395EDE1E0558AA48CB7F /* types.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = types.h; path = src/webp/types.h; sourceTree = ""; }; - 7D5EC839402CC9058163D064D0B5E9CD /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = ""; }; - 7D638901CE9A00B98FD0FD8D2DADCB2A /* WillDisplayProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WillDisplayProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/WillDisplayProviding.swift; sourceTree = ""; }; - 7D915E50F6FCDF1F827027D737E68CB8 /* RxTabBarControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTabBarControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTabBarControllerDelegateProxy.swift; sourceTree = ""; }; - 7DA0874C875EC9052754A0E09B82B4E6 /* SDWebImagePrefetcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImagePrefetcher.h; path = SDWebImage/Core/SDWebImagePrefetcher.h; sourceTree = ""; }; - 7DAD49D64090D08FBC52E7C52FFBFF8A /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Sources/ConstraintLayoutSupport.swift; sourceTree = ""; }; - 7DB6990AB0882562E03133DB23E906A8 /* URLMatchResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLMatchResult.swift; path = Sources/URLMatcher/URLMatchResult.swift; sourceTree = ""; }; - 7DB99949480CB8A0B0DF10697A19BAF6 /* OIMNotificationElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMNotificationElem.m; path = OpenIMSDK/Model/OIMNotificationElem.m; sourceTree = ""; }; - 7DCB1E01613F7B40578A36E6266BC0B7 /* OpenIMSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OpenIMSDK.debug.xcconfig; sourceTree = ""; }; - 7E04BB4D8359BD5A95AAD8B56BFE57B6 /* DDAssertMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAssertMacros.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDAssertMacros.h; sourceTree = ""; }; - 7E23A30B365807329D25B8ECAF0D6DF3 /* OIMFileElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMFileElem.h; path = OpenIMSDK/Model/OIMFileElem.h; sourceTree = ""; }; - 7E28567FB181BF2D15FA053910918A9B /* DateInRegion+Math.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Math.swift"; path = "Sources/SwiftDate/DateInRegion/DateInRegion+Math.swift"; sourceTree = ""; }; + 7CA97CA9D5066B3D28CB8DF6B80E1E22 /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; + 7CB02546BA5EAF3A87B631DFDF1A12A9 /* demux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = demux.h; path = src/webp/demux.h; sourceTree = ""; }; + 7CB54E37C3D8E8221EED74772BBAB72B /* MATraceLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATraceLocation.h; path = MAMapKit.framework/Headers/MATraceLocation.h; sourceTree = ""; }; + 7D50006193AC7916C53011FD30B6B91F /* IQKeyboardReturnManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardReturnManager-umbrella.h"; sourceTree = ""; }; + 7D5F7D75A5F16DE8ED73EAB9D1681EE0 /* DDFileLogger+Buffering.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDFileLogger+Buffering.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDFileLogger+Buffering.h"; sourceTree = ""; }; + 7D60BD316ED3AAEB173CD7E6D10C500B /* YBIBPhotoAlbumManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBPhotoAlbumManager.h; path = YBImageBrowser/Helper/YBIBPhotoAlbumManager.h; sourceTree = ""; }; + 7D736B3283334F545C8A8931A8795A4C /* Popover-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Popover-Info.plist"; sourceTree = ""; }; + 7D90B17797653D7003F3F7A500E74D96 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/RxRelay/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 7DDD2C1AD91FF951A9A5F3D2E8D0913F /* SDImageGIFCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGIFCoder.m; path = SDWebImage/Core/SDImageGIFCoder.m; sourceTree = ""; }; + 7DDECA542B8616BF9C2AD135D1790970 /* SwiftDate-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftDate-prefix.pch"; sourceTree = ""; }; + 7E0BB18C9D64642FF39EC8D976EF900D /* IQTextInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputView.swift; path = IQKeyboardCore/Classes/IQTextInputView.swift; sourceTree = ""; }; + 7E2DC49BDFE9EC35541E7552286CEF5E /* AsyncSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncSubject.swift; path = RxSwift/Subjects/AsyncSubject.swift; sourceTree = ""; }; 7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "MJRefresh-MJRefresh.Privacy"; path = MJRefresh.Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 7E33D64E680019C177618308CB75EF6A /* filters_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_mips_dsp_r2.c; path = src/dsp/filters_mips_dsp_r2.c; sourceTree = ""; }; - 7E377318D40E300ABE825A4367FCBD80 /* EditorImageResizerControlView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorImageResizerControlView.swift; path = Sources/HXPHPicker/Editor/View/Photo/EditorImageResizerControlView.swift; sourceTree = ""; }; - 7E5A66AF3F7558F7194F9003783F97B0 /* EditorType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorType.swift; path = Sources/HXPHPicker/Editor/Model/EditorType.swift; sourceTree = ""; }; - 7E5D68AE59A4587387B9319DF7CF3358 /* DictionaryInitializable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DictionaryInitializable.swift; path = Sources/Private/Model/DictionaryInitializable.swift; sourceTree = ""; }; - 7E6C39A78E34CAF91FE894770A29339E /* Differentiator-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Differentiator-dummy.m"; sourceTree = ""; }; - 7E75BE039ECDC5C98B1B3366AB223FFE /* yuv_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_sse2.c; path = src/dsp/yuv_sse2.c; sourceTree = ""; }; - 7E794613B7B4967B7E315E58575C19E8 /* FileManager+ZIP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FileManager+ZIP.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/FileManager+ZIP.swift"; sourceTree = ""; }; - 7E9CDCE5F0043FB2C6DB3BCFEA9F9D6C /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Sources/ConstraintDirectionalInsetTarget.swift; sourceTree = ""; }; - 7F033F3D3DD2BD7F88B3CFEBDF396ED5 /* SDImageLoadersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoadersManager.h; path = SDWebImage/Core/SDImageLoadersManager.h; sourceTree = ""; }; - 7F0F6780D0E884D4DD549CB1A7C14CCA /* RxCocoa.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxCocoa.modulemap; sourceTree = ""; }; - 7F1D4C539840D1E04C5FFAAA34A578BC /* StartWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StartWith.swift; path = RxSwift/Observables/StartWith.swift; sourceTree = ""; }; - 7F5CFA1AE264D0A7CC41E863C86C294C /* SDWebImageDownloader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloader.m; path = SDWebImage/Core/SDWebImageDownloader.m; sourceTree = ""; }; - 7F6E07FC92F07EE8755B8F09EA81360F /* AlbumTickView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumTickView.swift; path = Sources/HXPHPicker/Picker/View/AlbumTickView.swift; sourceTree = ""; }; - 7F851682E599767E9AA044FB11D2D5E4 /* Commons.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Commons.swift; path = Sources/SwiftDate/Supports/Commons.swift; sourceTree = ""; }; - 7FAA15A80E3EE70FB8617B72A76C5C99 /* MJRefresh.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.debug.xcconfig; sourceTree = ""; }; - 7FB7CFB34CBF3DE8D9065DC420ED9447 /* Diffable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diffable.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/Diffable.swift; sourceTree = ""; }; - 7FE1BA63F690470C059660AF0B0F5AC8 /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = ""; }; - 801C736CBB37EF2A92BFFF9A8DFBDC70 /* LottieView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieView.swift; path = Sources/Public/Animation/LottieView.swift; sourceTree = ""; }; - 803551D524EB59D9A654D4CB1D25BE8F /* Archive+WritingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+WritingDeprecated.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+WritingDeprecated.swift"; sourceTree = ""; }; - 8062C80A2CDAA60C796028D49DDD5B04 /* DDAbstractDatabaseLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDAbstractDatabaseLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDAbstractDatabaseLogger.h; sourceTree = ""; }; - 8068E8070D96B799FC962E5A1BC5511B /* OIMCallbacker+Closure.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMCallbacker+Closure.h"; path = "OpenIMSDK/Callbacker/OIMCallbacker+Closure.h"; sourceTree = ""; }; - 8071246364071191EF7E463371025B98 /* DDLoggerNames.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDLoggerNames.m; path = Sources/CocoaLumberjack/DDLoggerNames.m; sourceTree = ""; }; + 7E30CE0389A560241FCA8FE83FE0B440 /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+MASDebugAdditions.h"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = ""; }; + 7E4A8A666F6AF1C7AB6EF523E556900E /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/Core/HTTPMethod.swift; sourceTree = ""; }; + 7E4E9F77E3B93C448A645B6A373107EF /* FrameUnsubAck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameUnsubAck.swift; path = Source/FrameUnsubAck.swift; sourceTree = ""; }; + 7EC8F3147D548524F2105F1B4D734059 /* PolygonNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolygonNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift; sourceTree = ""; }; + 7ED05F749374B2ECD29E17E6726B4D21 /* Picker+UIViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+UIViewController.swift"; path = "Sources/HXPHPicker/Picker/Extension/Picker+UIViewController.swift"; sourceTree = ""; }; + 7EE7CE374C8D7614210D1BBF61EE6A98 /* Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Map.swift; path = RxSwift/Observables/Map.swift; sourceTree = ""; }; + 7EEA8F70494527CB93A38C74F7982F83 /* GradientFillRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientFillRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift; sourceTree = ""; }; + 7EF8EEB5237176128E14B293533A72C8 /* Commons.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Commons.swift; path = Sources/SwiftDate/Supports/Commons.swift; sourceTree = ""; }; + 7EF9D3B110D82B8135F84345D73A0B28 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/Core/ParameterEncoding.swift; sourceTree = ""; }; + 7F7204C6CC49121008516C4035FC5C9F /* SGPermissionPhoto.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGPermissionPhoto.h; path = SGQRCode/Permission/SGPermissionPhoto.h; sourceTree = ""; }; + 7F75D1EC0E1C320D3F9EFC4E8509D719 /* Core+URL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+URL.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+URL.swift"; sourceTree = ""; }; + 7F7C4E38E4607F8008E79A6434ADB1C0 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Sources/Moya/Response.swift; sourceTree = ""; }; + 7F89B5CA6977567E0293D9A72DCB921A /* SingleAsync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAsync.swift; path = RxSwift/Observables/SingleAsync.swift; sourceTree = ""; }; + 7F9D6946F90005D408F0F33D2D99A653 /* MAHeatMapVectorGridOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorGridOverlayRenderer.h; path = MAMapKit.framework/Headers/MAHeatMapVectorGridOverlayRenderer.h; sourceTree = ""; }; + 7FAFB9102A7821804A603A0AC1AE1A19 /* SynchronizedDisposeType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedDisposeType.swift; path = RxSwift/Concurrency/SynchronizedDisposeType.swift; sourceTree = ""; }; + 7FB09B2B5E42E2CEDD4C919D77689C08 /* upsampling_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_sse2.c; path = src/dsp/upsampling_sse2.c; sourceTree = ""; }; + 800097F58750AAC2B2BAF8E599AD7AEF /* Differentiator.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Differentiator.release.xcconfig; sourceTree = ""; }; + 801F815AE21CA3F75E4A08CD741E3FBC /* ViewTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewTransition.swift; path = Sources/RxDataSources/ViewTransition.swift; sourceTree = ""; }; + 803F8F55A8F17B4D7652541124C612C4 /* huffman_encode_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = huffman_encode_utils.c; path = src/utils/huffman_encode_utils.c; sourceTree = ""; }; + 80462D2D5DC6C1F74F611C1A70FA0A5F /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Features/Validation.swift; sourceTree = ""; }; + 805779FF7031E298D79B68E54C435A67 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoNormalFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m; sourceTree = ""; }; + 80618672C78CE395D2916A8BD993BDAE /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Core/Response.swift; sourceTree = ""; }; + 807E9A40B51599207F28141B41ACF379 /* KingfisherWebP-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "KingfisherWebP-dummy.m"; sourceTree = ""; }; + 808561ABAB1F1D752523D18D433D1913 /* RxPickerViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxPickerViewDataSourceType.swift; sourceTree = ""; }; + 808C026501781567CD3AA43ABB6D5AD5 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Source/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 8095762029B20322EA90B44A9EC7A0B2 /* SGQRCodeLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGQRCodeLog.h; path = SGQRCode/SGQRCodeLog.h; sourceTree = ""; }; 809C5FAB588354C9BA37DC3EAB8CB45C /* RxSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxSwift; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 80A40EDA3AF0499BDBCFF09467BB49AD /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardToolbarManager-IQKeyboardToolbarManager"; path = IQKeyboardToolbarManager.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 80A87EEF8234577813707C2B05EA16DC /* DDASLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogger.m; path = Sources/CocoaLumberjack/DDASLLogger.m; sourceTree = ""; }; - 80B6A76BDBFB76C791769481A45315DB /* RxRelay.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxRelay.release.xcconfig; sourceTree = ""; }; - 80DEFE3B1718E8C2DAB2BE3561944DAD /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Sources/Typealiases.swift; sourceTree = ""; }; - 80F00122FF7CD557F71EDB6CD73DCE0D /* sharpyuv_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_neon.c; path = sharpyuv/sharpyuv_neon.c; sourceTree = ""; }; - 80FC60B5A2EE8A0941AF06CB71BD4601 /* Asset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Asset.swift; path = Sources/Private/Model/Assets/Asset.swift; sourceTree = ""; }; - 812C339FF35298294B26DF3F2FC34F31 /* Group.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Group.swift; path = Sources/Private/Model/ShapeItems/Group.swift; sourceTree = ""; }; - 812CB0666B267F4A5171B774F6D0D99B /* SDImageAWebPCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageAWebPCoder.h; path = SDWebImage/Core/SDImageAWebPCoder.h; sourceTree = ""; }; - 815C778FCFC9DF9AB4BB867705E3D701 /* MarqueeLabel.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MarqueeLabel.release.xcconfig; sourceTree = ""; }; - 816BB0C72A261BD1EB7BD6894E8AA38F /* YYImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYImage-umbrella.h"; sourceTree = ""; }; - 8197324FD9D31411E29F1E332EA7C8CB /* Kingfisher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Kingfisher.modulemap; sourceTree = ""; }; - 81B6E91C3E6BDDC7B05E43C0052936B6 /* UIView+IQKeyboardManagerExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardManagerExtensionObjc.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIView+IQKeyboardManagerExtensionObjc.swift"; sourceTree = ""; }; - 81EEAD77C593182D302DEC7E521078E3 /* SDAnimatedImageRep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageRep.h; path = SDWebImage/Core/SDAnimatedImageRep.h; sourceTree = ""; }; - 8203A43BF6030189020CD4BD6F61CE28 /* PhotoEditorViewController+Animation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoEditorViewController+Animation.swift"; path = "Sources/HXPHPicker/Editor/Controller/PhotoEditorViewController+Animation.swift"; sourceTree = ""; }; - 8217A6F4149F4322FC3BFDAF3B20D784 /* Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Signal.swift; path = RxCocoa/Traits/Signal/Signal.swift; sourceTree = ""; }; - 82431D0B15FED817380B6ECAC0135BCC /* Archive+MemoryFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+MemoryFile.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+MemoryFile.swift"; sourceTree = ""; }; - 825A9E0CAE8058BD30562436EABB04A3 /* Changeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Changeset.swift; path = Sources/Differentiator/Changeset.swift; sourceTree = ""; }; - 829687B94722C4B27AE1F6A929C38A8A /* AnonymousObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousObserver.swift; path = RxSwift/Observers/AnonymousObserver.swift; sourceTree = ""; }; - 82DA9A393789D615C04307DCC37C663F /* DDTTYLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDTTYLogger.m; path = Sources/CocoaLumberjack/DDTTYLogger.m; sourceTree = ""; }; - 82DC469C28323FCEAC87DA19052CFFE9 /* yuv_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_mips32.c; path = src/dsp/yuv_mips32.c; sourceTree = ""; }; - 82E339D953808BCD8DE3A8DE42F2039B /* alpha_processing_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_sse41.c; path = src/dsp/alpha_processing_sse41.c; sourceTree = ""; }; - 831ED1AC3678AC789F64583BA59A14C5 /* Atomic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Atomic.swift; path = Sources/Moya/Atomic.swift; sourceTree = ""; }; - 835D71EFA384E013530022C4ED5D6DED /* NSTextAttachment+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextAttachment+Kingfisher.swift"; path = "Sources/Extensions/NSTextAttachment+Kingfisher.swift"; sourceTree = ""; }; - 837E21014C5382624DE0924B4AA99FE0 /* SGGenerateQRCode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGGenerateQRCode.m; path = SGQRCode/QRCode/SGGenerateQRCode.m; sourceTree = ""; }; - 83CB43A9B03D8918FD5DE9A913C744DE /* UISwitch+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISwitch+Rx.swift"; path = "RxCocoa/iOS/UISwitch+Rx.swift"; sourceTree = ""; }; - 83EDBA00E11125390D155B70ADD10B3F /* AddRef.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AddRef.swift; path = RxSwift/Observables/AddRef.swift; sourceTree = ""; }; - 83F042965F53FBDB5EA105FFEEBF54BF /* CocoaLumberjack-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaLumberjack-prefix.pch"; sourceTree = ""; }; - 83FC585A2073635F19A93B8712ADFCDE /* ImageContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageContext.swift; path = Sources/SwiftUI/ImageContext.swift; sourceTree = ""; }; - 84364ADC8106E744D74626D2D0AEC0B7 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/MobileCoreServices.framework; sourceTree = DEVELOPER_DIR; }; - 845BD000FE8A9E1EB45F78DC1E70E618 /* Mappable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mappable.swift; path = Sources/Mappable.swift; sourceTree = ""; }; - 846B243885678469AE5CDB8168133AEA /* NodeProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NodeProperty.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/NodeProperty.swift; sourceTree = ""; }; + 80B0158484445E6EEDCB488111857C96 /* RxCocoaRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RxCocoaRuntime.h; path = RxCocoa/Runtime/include/RxCocoaRuntime.h; sourceTree = ""; }; + 80B2C73E9BDABA3F11BF3DB85DAD250A /* KFImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImage.swift; path = Sources/SwiftUI/KFImage.swift; sourceTree = ""; }; + 80F422D9CF7F73BDD80C55E658E8103F /* SDWebImageIndicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageIndicator.h; path = SDWebImage/Core/SDWebImageIndicator.h; sourceTree = ""; }; + 80F95906923E1515A2AD4F0F6690D8F6 /* Infallible+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Driver.swift"; path = "RxCocoa/Traits/Driver/Infallible+Driver.swift"; sourceTree = ""; }; + 81270878AE486291AC7784104E82FF1B /* PhotoEditorFilterView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorFilterView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorFilterView.swift; sourceTree = ""; }; + 8157ECA13835DD29BFB8AE4885DE404D /* SDInternalMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDInternalMacros.h; path = SDWebImage/Private/SDInternalMacros.h; sourceTree = ""; }; + 815A9A68FC8F5D4B8295C60201EA3607 /* dec_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_neon.c; path = src/dsp/dec_neon.c; sourceTree = ""; }; + 8168F54744B4E03AC915F62D17CB4288 /* SDWebImagePrefetcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImagePrefetcher.m; path = SDWebImage/Core/SDWebImagePrefetcher.m; sourceTree = ""; }; + 8174B2C2A98517B4AD3D5FEF87B40F58 /* MJRefreshHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshHeader.h; path = MJRefresh/Base/MJRefreshHeader.h; sourceTree = ""; }; + 818F80EEBE82BB7416E478C26E7995D2 /* ImageDrawing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDrawing.swift; path = Sources/Image/ImageDrawing.swift; sourceTree = ""; }; + 81A904CC270F40DAD1A3F3B872317F74 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardToolbarManager/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 81EBE4E4D49DF7168E5925FA02B2916A /* Date.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Date.swift; path = Sources/SwiftDate/Date/Date.swift; sourceTree = ""; }; + 81F7D3FF1C6A6BA4CF4343A1D488E223 /* TagView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagView.swift; path = TagListView/TagView.swift; sourceTree = ""; }; + 82230FEA00350BC8F56EB5BC44AD1C77 /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; + 825816BFA5ED9EA8E09C4414305D084D /* UIViewConfiguringSwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewConfiguringSwiftUIView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/UIViewConfiguringSwiftUIView.swift; sourceTree = ""; }; + 8260423FE880738627BA58E39088AE6C /* Using.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Using.swift; path = RxSwift/Observables/Using.swift; sourceTree = ""; }; + 826DA11AB28DAD5B0EB7826B29CFC100 /* KeyframeData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyframeData.swift; path = Sources/Private/Model/Keyframes/KeyframeData.swift; sourceTree = ""; }; + 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 82C0724C0421CBE94F5889AF088B58AD /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image/Image.swift; sourceTree = ""; }; + 82E48720FDE1FD73E9188821ABBDEB63 /* common_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_dec.h; path = src/dec/common_dec.h; sourceTree = ""; }; + 8354BEF8A173F7C560C84148593F0CD7 /* and.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = and.swift; path = Source/RxSwift/and.swift; sourceTree = ""; }; + 836002A544C87F9B72FD7E93C2F30BB1 /* PropertyWrappers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PropertyWrappers.swift; path = Sources/PropertyWrappers.swift; sourceTree = ""; }; + 8360D5277A3EBD251BE1D7B8B657CBB2 /* ControlEvent+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlEvent+Driver.swift"; path = "RxCocoa/Traits/Driver/ControlEvent+Driver.swift"; sourceTree = ""; }; + 836495F110F408D974AF64E8A7A6D754 /* IQTextInputViewInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewInfo.swift; path = IQTextInputViewNotification/Classes/IQTextInputViewInfo.swift; sourceTree = ""; }; + 837CE453DD68FD5980A53849C6B2FDE2 /* VectorsExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VectorsExtensions.swift; path = Sources/Private/Utility/Primitives/VectorsExtensions.swift; sourceTree = ""; }; + 83921C9664E047ECE321FD559ED72F36 /* YBIBAuxiliaryViewHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBAuxiliaryViewHandler.h; path = YBImageBrowser/AuxiliaryView/YBIBAuxiliaryViewHandler.h; sourceTree = ""; }; + 839BCE2FB3C9925AE8EBE4D4E23D267B /* SingleValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleValueProvider.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift; sourceTree = ""; }; + 83A1F2D48A891A026C113A34ED4483E3 /* RxSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-umbrella.h"; sourceTree = ""; }; + 83A7C22E3795619790A213E6D8DC23DB /* UIStepper+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIStepper+Rx.swift"; path = "RxCocoa/iOS/UIStepper+Rx.swift"; sourceTree = ""; }; + 83BABF10DDCA2F56F8F22F97844ED531 /* NSTextView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextView+Rx.swift"; path = "RxCocoa/macOS/NSTextView+Rx.swift"; sourceTree = ""; }; + 83E92D4FF772347A353FB627EFF684DD /* KingfisherManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherManager.swift; path = Sources/General/KingfisherManager.swift; sourceTree = ""; }; + 840A962BED1D9BADAEDE3E7E183A317D /* PreCompLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreCompLayerModel.swift; path = Sources/Private/Model/Layers/PreCompLayerModel.swift; sourceTree = ""; }; + 84315F79BA3DE29DC734A52F0D9418E9 /* UIView+IQKeyboardExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtensionObjc.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtensionObjc.swift"; sourceTree = ""; }; + 843DE0B172D56D4DE04CED8FE9C2717D /* UIApplication+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIApplication+Rx.swift"; path = "RxCocoa/iOS/UIApplication+Rx.swift"; sourceTree = ""; }; + 844DF282F910BCA1C2789FDB5A2CB231 /* UIBarButtonItem+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIBarButtonItem+Rx.swift"; path = "RxCocoa/iOS/UIBarButtonItem+Rx.swift"; sourceTree = ""; }; + 8461B294FCAEA798CE2751EEA8891991 /* KingfisherError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherError.swift; path = Sources/General/KingfisherError.swift; sourceTree = ""; }; + 846DE591BA61F5776BFB4F91E09C69AE /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Source/Features/RedirectHandler.swift; sourceTree = ""; }; + 846E1E84BB431FCF9858146EC42AB802 /* Sink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Sink.swift; path = RxSwift/Observables/Sink.swift; sourceTree = ""; }; + 846EDE56DA946ACF6FAB843EB29A21BA /* IQKeyboardToolbar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbar.release.xcconfig; sourceTree = ""; }; + 846FD9A1A5BAE3A6EF9143279169E011 /* webp_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = webp_enc.c; path = src/enc/webp_enc.c; sourceTree = ""; }; 847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQTextView-IQTextView"; path = IQTextView.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 8472C6305564D304D3D3D434D7191E22 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = ""; }; - 847FB0FA98CE4AC2E60D73CCAC2CF1AF /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = ""; }; - 84934C95F8FF400D99A7515B8C780AAE /* Never.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Never.swift; path = RxSwift/Observables/Never.swift; sourceTree = ""; }; - 84A69E76676E2422A40553AA70F4B9AF /* ShapeContainerLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeContainerLayer.swift; path = Sources/Private/MainThread/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift; sourceTree = ""; }; - 84F2C96DF432D64FEF247DDD154D10AB /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; }; - 850578387A0EBC9B04FB5459FE3B3212 /* DefaultsBridges.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsBridges.swift; path = Sources/DefaultsBridges.swift; sourceTree = ""; }; - 850D41C7AEEAD377501D1391EFF8CD50 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; - 854DC1FA592D76A8399A8D23776140FD /* IQKeyboardToolbarManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbarManager-prefix.pch"; sourceTree = ""; }; - 8552E5A9E1DCA523D27BEF65DF4E6F35 /* AlbumTitleArrowView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumTitleArrowView.swift; path = Sources/HXPHPicker/Picker/View/AlbumTitleArrowView.swift; sourceTree = ""; }; - 8587D011AA0593CFF7A1B84EEE2FB3F1 /* cost.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost.c; path = src/dsp/cost.c; sourceTree = ""; }; - 85AB9F198071F4FFFD3967362E9EDB76 /* RxTableViewSectionedAnimatedDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewSectionedAnimatedDataSource.swift; path = Sources/RxDataSources/RxTableViewSectionedAnimatedDataSource.swift; sourceTree = ""; }; - 85CEF0B57610430DC6C0900DC77AC6F5 /* SDCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDCollectionViewCell.m; path = SDCycleScrollView/Lib/SDCycleScrollView/SDCollectionViewCell.m; sourceTree = ""; }; - 85D1B0A1709FD35727940D11722F80FA /* Calendars.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Calendars.swift; path = Sources/SwiftDate/Supports/Calendars.swift; sourceTree = ""; }; - 85DC559A3ADB0AF3A0CC24573A6D4F03 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = ""; }; + 847E7B1F0A19709036E3E46F2089857E /* libwebp.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = libwebp.debug.xcconfig; sourceTree = ""; }; + 8493E3C56E90747096AE38907297A71A /* huffman_encode_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = huffman_encode_utils.h; path = src/utils/huffman_encode_utils.h; sourceTree = ""; }; + 84AF2338B277983050F3CAFD5B36E2D8 /* UIView+Responders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Responders.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/UIView+Responders.swift"; sourceTree = ""; }; + 850C6A13A8188DD67C782628C68BEC21 /* MGCDAsyncUdpSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MGCDAsyncUdpSocket.h; path = Source/GCD/MGCDAsyncUdpSocket.h; sourceTree = ""; }; + 8510A31B20023A5D55194501EEC480F3 /* CocoaMQTT.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaMQTT.release.xcconfig; sourceTree = ""; }; + 852A16226F156C32AEDD3A6649B83421 /* IQKeyboardManagerSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-umbrella.h"; sourceTree = ""; }; + 854D2B733043533D0537C10C8D8EE81C /* CocoaMQTTTimer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTTimer.swift; path = Source/CocoaMQTTTimer.swift; sourceTree = ""; }; + 858555FE5CD415E9FE0DE9EB2A7AFCFF /* IQKeyboardToolbarManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Toolbar.swift"; path = "IQKeyboardToolbarManager/Classes/Toolbar/IQKeyboardToolbarManager+Toolbar.swift"; sourceTree = ""; }; + 858773D1E33A099C96526441A987E2ED /* MAHeatMapTileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapTileOverlay.h; path = MAMapKit.framework/Headers/MAHeatMapTileOverlay.h; sourceTree = ""; }; + 859AB61AB5CAC4F8321CE1373C70291B /* Reactive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reactive.swift; path = RxSwift/Reactive.swift; sourceTree = ""; }; + 85A7CF7AFC03C91AFB98EF5022FB97AC /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; + 85BEE30BD1FC651C5184A49AFD512A6C /* EnumTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EnumTransform.swift; path = Sources/EnumTransform.swift; sourceTree = ""; }; + 85C8B51DA0770D817281FCCB4771C0A0 /* AnimatableSectionModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatableSectionModel.swift; path = Sources/Differentiator/AnimatableSectionModel.swift; sourceTree = ""; }; + 85C907F746C2788FC9A636D9BA502E2E /* Group.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Group.swift; path = Sources/Private/Model/ShapeItems/Group.swift; sourceTree = ""; }; 85E4C71ED52304F1AB0503E80CD9CB1E /* TagListView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = TagListView; path = TagListView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 85E4F42510ABF2029629F2E5D9765775 /* MATileOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATileOverlayRenderer.h; path = MAMapKit.framework/Headers/MATileOverlayRenderer.h; sourceTree = ""; }; - 8644E0F97A0F7E3524191228AA9D3074 /* TagListView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TagListView.debug.xcconfig; sourceTree = ""; }; - 86450CB64F3B277D05E16E3FCFBDDDC6 /* EpoxyLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyLogger.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Logging/EpoxyLogger.swift; sourceTree = ""; }; - 865E473975582293F0FE384ACE2EC425 /* CocoaLumberjack-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CocoaLumberjack-dummy.m"; sourceTree = ""; }; - 86886A733B89F9C049C049AF30166EE7 /* Moya-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Moya-dummy.m"; sourceTree = ""; }; - 86A3B7CF5EAD9973DAF3C6FFBAEE5AFE /* YBIBVideoTopBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoTopBar.m; path = Video/YBIBVideoTopBar.m; sourceTree = ""; }; - 86CDC89A868B6D3092C6F3EE456FC553 /* DecodingStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DecodingStrategy.swift; path = Sources/Public/Configuration/DecodingStrategy.swift; sourceTree = ""; }; - 86EE28E7DEABA7E24637E97FC9F503A5 /* TextLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextLayerModel.swift; path = Sources/Private/Model/Layers/TextLayerModel.swift; sourceTree = ""; }; - 871E714FD37A86D38B34456ADD948A3D /* filterMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = filterMap.swift; path = Source/RxSwift/filterMap.swift; sourceTree = ""; }; - 872036297568467805CDE1401346D2B1 /* UIImage+ForceDecode.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ForceDecode.m"; path = "SDWebImage/Core/UIImage+ForceDecode.m"; sourceTree = ""; }; - 8725CA960AAD21EBB246DB58314B33CB /* ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist"; sourceTree = ""; }; - 872E8E52ECD0CD6B77BAAB141EA3389D /* AnimationKeypath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationKeypath.swift; path = Sources/Public/DynamicProperties/AnimationKeypath.swift; sourceTree = ""; }; - 8735CA7CBEA3EC29C13590FB46722BD3 /* IQKeyboardReturnManager+UITextFieldDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnManager+UITextFieldDelegate.swift"; path = "IQKeyboardReturnManager/Classes/Delegates/IQKeyboardReturnManager+UITextFieldDelegate.swift"; sourceTree = ""; }; - 8763DABE5287013A3C662DD1707CD9F1 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Core/Response.swift; sourceTree = ""; }; - 87661C0964375E9E5AE8195C668A957E /* SGScanViewConfigure.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGScanViewConfigure.h; path = SGQRCode/ScanView/SGScanViewConfigure.h; sourceTree = ""; }; - 87ACE2C6A3A01ED7E5CD2D9E5B2B24CD /* Empty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Empty.swift; path = RxSwift/Observables/Empty.swift; sourceTree = ""; }; - 87C0F85799A80C00E166826442DB6D27 /* AssetManager+AssetCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+AssetCollection.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+AssetCollection.swift"; sourceTree = ""; }; - 87DDD42375DF8D0404926440BA144451 /* CodableTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CodableTransform.swift; path = Sources/CodableTransform.swift; sourceTree = ""; }; - 87E096F7DF0D7E8ACA28A30A1DEBB9EC /* ObjectMapper-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ObjectMapper-Info.plist"; sourceTree = ""; }; - 88004E06395845BEC822BA9C445BA387 /* _RXDelegateProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXDelegateProxy.h; path = RxCocoa/Runtime/include/_RXDelegateProxy.h; sourceTree = ""; }; - 882FA463C133D41CD8499FE6FB7A999F /* LayerStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerStyle.swift; path = Sources/Private/Model/LayerStyles/LayerStyle.swift; sourceTree = ""; }; - 8839B71D73943CF891974FAA99B0A1FC /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardManagerSwift/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 884E6940DA4CC32666F2FCBF618682DB /* SGTorch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGTorch.m; path = SGQRCode/Torch/SGTorch.m; sourceTree = ""; }; - 886EDE3EF4D2E04DC332BE8E363F892F /* UIView+IQKeyboardExtensionObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtensionObjc.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtensionObjc.swift"; sourceTree = ""; }; - 8871BF84E79608846B442F26D2DED761 /* InvocableScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableScheduledItem.swift; path = RxSwift/Schedulers/Internal/InvocableScheduledItem.swift; sourceTree = ""; }; + 85FAC75B5F2BEA1511718CAA480E2ADC /* OperationQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OperationQueueScheduler.swift; path = RxSwift/Schedulers/OperationQueueScheduler.swift; sourceTree = ""; }; + 862203B641B5E8B956897660DF943C86 /* LayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerModel.swift; path = Sources/Private/Model/Layers/LayerModel.swift; sourceTree = ""; }; + 8623EF65FEC6BFD426123019DFB996B6 /* CocoaMQTTProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTProperty.swift; path = Source/CocoaMQTTProperty.swift; sourceTree = ""; }; + 865A4BFB2CB8DB37C3E1407B2C8BB4AC /* IQKeyboardToolbarConstants.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarConstants.swift; path = IQKeyboardToolbarManager/Classes/Constants/IQKeyboardToolbarConstants.swift; sourceTree = ""; }; + 869253C90A9E318D5E478170C21006FD /* MarqueeLabel.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MarqueeLabel.debug.xcconfig; sourceTree = ""; }; + 869279DCDFEC7F94D90F59FA986A08DE /* PriorityQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PriorityQueue.swift; path = Platform/DataStructures/PriorityQueue.swift; sourceTree = ""; }; + 86A0D05E1B1AF9C0E4BDE710355585D3 /* Star.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Star.swift; path = Sources/Private/Model/ShapeItems/Star.swift; sourceTree = ""; }; + 86A7C1E882BC355EE233177C35BD2FE3 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = ""; }; + 86CE596122BF5B193D2C94C75BF941B4 /* IQKeyboardResignHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardResignHandler.swift; path = IQKeyboardManagerSwift/Resign/IQKeyboardResignHandler.swift; sourceTree = ""; }; + 86D333D81D219F0C8A1F7714AD9A1C6E /* Moya-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Moya-prefix.pch"; sourceTree = ""; }; + 8705446677A2D4792E7CE527DD558989 /* CameraConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/CameraConfiguration.swift; sourceTree = ""; }; + 879A2E2A67F78CCEFE0F10240CE24FF9 /* DropShadowEffect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropShadowEffect.swift; path = Sources/Private/Model/LayerEffects/DropShadowEffect.swift; sourceTree = ""; }; + 87CF4E5FA9EF74820C9D72AF08A6E3DF /* SDAnimatedImageView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "SDAnimatedImageView+WebCache.m"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.m"; sourceTree = ""; }; + 87D4B044B9175BC06CC0B9475C219755 /* OIMSoundElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSoundElem.m; path = OpenIMSDK/Model/OIMSoundElem.m; sourceTree = ""; }; + 87DF08BF0E16E2F0B672516B99521229 /* YBIBToastView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBToastView.m; path = YBImageBrowser/AuxiliaryView/YBIBToastView.m; sourceTree = ""; }; + 87F5684EEAC16057EE7CFC5BACC763C4 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = WebImage/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 87F6C0AAEA5D49B14D1E594B55985BB8 /* YBIBSheetView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBSheetView.h; path = YBImageBrowser/ToolView/YBIBSheetView.h; sourceTree = ""; }; + 88467EFBA0FCF30687E23912DE9B7DD0 /* UIImage+MultiFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+MultiFormat.h"; path = "SDWebImage/Core/UIImage+MultiFormat.h"; sourceTree = ""; }; 887BAFDF5875E4C49937F4B27AA714C4 /* Pods-QuickLocation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-QuickLocation.debug.xcconfig"; sourceTree = ""; }; - 889EAD92A301DE400B16BA95A2544CF0 /* ISO8601DateTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISO8601DateTransform.swift; path = Sources/ISO8601DateTransform.swift; sourceTree = ""; }; - 88A1873E1B4111D07E4764F077BE2840 /* common_sse2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_sse2.h; path = src/dsp/common_sse2.h; sourceTree = ""; }; - 88CF94B26432761AD7272FFDA7D98646 /* DidSelectProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DidSelectProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidSelectProviding.swift; sourceTree = ""; }; - 89178DBDEDAE6B75FB7DB74297B2681C /* SGTorch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGTorch.h; path = SGQRCode/Torch/SGTorch.h; sourceTree = ""; }; - 89242402665F619FFC3F3B24AE76ADD2 /* Generate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Generate.swift; path = RxSwift/Observables/Generate.swift; sourceTree = ""; }; - 89492CD7805184F37D66C74AF64E60D5 /* LottieAnimationViewBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationViewBase.swift; path = Sources/Public/iOS/LottieAnimationViewBase.swift; sourceTree = ""; }; - 896165C77437B3E3CA729B4CF267209E /* PathNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PathNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Protocols/PathNode.swift; sourceTree = ""; }; - 896804512E5A54D3F12A3A1AE837AD8B /* ObservableConvertibleType+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+SharedSequence.swift"; path = "RxCocoa/Traits/SharedSequence/ObservableConvertibleType+SharedSequence.swift"; sourceTree = ""; }; - 8972DB9B808F51AD03B118F63A9E4520 /* MAHeatMapVectorOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorOverlay.h; path = MAMapKit.framework/Headers/MAHeatMapVectorOverlay.h; sourceTree = ""; }; - 89A49B541760965E76940F9AFC9F361A /* TransformAnimations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformAnimations.swift; path = Sources/Private/CoreAnimation/Animations/TransformAnimations.swift; sourceTree = ""; }; - 89A5CE11CC57889F540004F21A563342 /* Core+DispatchQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+DispatchQueue.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+DispatchQueue.swift"; sourceTree = ""; }; - 89D6F4F353F9668ECBCBFBCFF03BAB81 /* Core+PHAssetCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+PHAssetCollection.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+PHAssetCollection.swift"; sourceTree = ""; }; - 89EF7D735951E4D80CDBC73A687206F8 /* AnyEquatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyEquatable.swift; path = Sources/Private/Utility/Helpers/AnyEquatable.swift; sourceTree = ""; }; - 89EFF37CC53F11B002498B5B55AB037F /* OIMManager+User.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+User.h"; path = "OpenIMSDK/Interface/OIMManager+User.h"; sourceTree = ""; }; - 89FBF678997C1BFF8175EAE7C1115228 /* MAHeatMapTileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapTileOverlay.h; path = MAMapKit.framework/Headers/MAHeatMapTileOverlay.h; sourceTree = ""; }; - 89FDADBEBF7D7F7E8ED56EA6D6D96604 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Sources/ConstraintRelation.swift; sourceTree = ""; }; - 89FEA5369C0F85B6777E7EBA3581AD4F /* AMapURLSearchType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearchType.h; path = AMapFoundationKit.framework/Headers/AMapURLSearchType.h; sourceTree = ""; }; - 8A09E695B709DD7B53EE9791CFE0DA7E /* LRUAnimationCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LRUAnimationCache.swift; path = Sources/Public/AnimationCache/LRUAnimationCache.swift; sourceTree = ""; }; - 8A289C4B349FC18182B850690A731B54 /* AMapSearchKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AMapSearchKit.framework; sourceTree = ""; }; - 8A28EAFBBFB2489AD46E0091B00B767E /* HistoricalScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalScheduler.swift; path = RxSwift/Schedulers/HistoricalScheduler.swift; sourceTree = ""; }; - 8A5BAB2182C418AA259E530EC867EDDB /* RxCocoaObjCRuntimeError+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "RxCocoaObjCRuntimeError+Extensions.swift"; path = "RxCocoa/Common/RxCocoaObjCRuntimeError+Extensions.swift"; sourceTree = ""; }; - 8A6D3F93903A36CC1E65DB8B7D188ED1 /* MAUserLocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAUserLocation.h; path = MAMapKit.framework/Headers/MAUserLocation.h; sourceTree = ""; }; - 8A8670B27DF4CBC108E75715DC9B290A /* PhotoPickerControllerProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerControllerProtocol.swift; path = Sources/HXPHPicker/Picker/Controller/PhotoPickerControllerProtocol.swift; sourceTree = ""; }; - 8A955D35D02642C236DB7120C844EACE /* SDWebImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDWebImage.modulemap; sourceTree = ""; }; - 8AB155993BA6DDCE5BC7CA20A1D6668C /* MAPathShowRange.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPathShowRange.h; path = MAMapKit.framework/Headers/MAPathShowRange.h; sourceTree = ""; }; - 8B02944BAFEBFE6942DBA3EA87B8E5AF /* TimePeriodProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodProtocol.swift; path = Sources/SwiftDate/TimePeriod/TimePeriodProtocol.swift; sourceTree = ""; }; - 8B1969DDA8CB584F16A88D1B0AB032B1 /* OIMVideoElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMVideoElem.m; path = OpenIMSDK/Model/OIMVideoElem.m; sourceTree = ""; }; - 8B4487F9BD655C90D5A3542E1EEF1E9B /* ResourceBundle-SDWebImage-SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SDWebImage-SDWebImage-Info.plist"; sourceTree = ""; }; + 887BD66AA7441D8A73D87321B6F17CBB /* YBIBInteractionProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBInteractionProfile.h; path = YBImageBrowser/Image/YBIBInteractionProfile.h; sourceTree = ""; }; + 888BE989F91C6C44101C700B8DEBA649 /* OIMAtElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMAtElem.h; path = OpenIMSDK/Model/OIMAtElem.h; sourceTree = ""; }; + 889A561130AB6E4C8C73F23593C54B4D /* StarNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StarNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/StarNode.swift; sourceTree = ""; }; + 88A88BE7352DE9732931C54A38F9936B /* DateFormatterTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateFormatterTransform.swift; path = Sources/DateFormatterTransform.swift; sourceTree = ""; }; + 88F9C67E13D04AECC7D6EF209630A8E3 /* VideoCroppingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoCroppingConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/VideoCroppingConfiguration.swift; sourceTree = ""; }; + 8929295E55D3A7956A8FBB2AF64C3CEA /* DDLog.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDLog.m; path = Sources/CocoaLumberjack/DDLog.m; sourceTree = ""; }; + 893433AAE0EC3F67963A11E6F861691E /* YBIBImageScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageScrollView.m; path = YBImageBrowser/Image/YBIBImageScrollView.m; sourceTree = ""; }; + 8949E81B22A5BA6D918960149D5B3E4C /* YBIBVideoCell+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBVideoCell+Internal.h"; path = "Video/YBIBVideoCell+Internal.h"; sourceTree = ""; }; + 89594ACC4AC688E569CADE30241012CB /* NSObject+MJKeyValue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJKeyValue.m"; path = "MJExtension/NSObject+MJKeyValue.m"; sourceTree = ""; }; + 8960813343F218D2D666299190D67ABE /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; + 8AA70B6D54C3434DE9C65E169C333587 /* format_constants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = format_constants.h; path = src/webp/format_constants.h; sourceTree = ""; }; + 8AFE49130DC59D5BB417170BC6782E91 /* OIMVideoElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMVideoElem.m; path = OpenIMSDK/Model/OIMVideoElem.m; sourceTree = ""; }; + 8B202162B632B08EE2812503526E54FC /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoFooter.m; path = MJRefresh/Base/MJRefreshAutoFooter.m; sourceTree = ""; }; + 8B4B42635EF69EE9862334DD24CC3566 /* SDCycleScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDCycleScrollView.h; path = SDCycleScrollView/Lib/SDCycleScrollView/SDCycleScrollView.h; sourceTree = ""; }; 8B6CF5C20C32EE9F7F0862FF892524DE /* SDCycleScrollView */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDCycleScrollView; path = SDCycleScrollView.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8B8FAB0D627B17EDE1366984278705D9 /* MBProgressHUD */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8BCADFC48E2D3683403AE676EBB1FAB3 /* YBIBVideoActionBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoActionBar.m; path = Video/YBIBVideoActionBar.m; sourceTree = ""; }; - 8BDA68A4AB4B1C7ACD7A370540F816C1 /* ItemPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ItemPath.swift; path = Sources/Differentiator/ItemPath.swift; sourceTree = ""; }; - 8C0385510E7B13F5AF7511624C9E5C9F /* Masonry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Masonry.h; path = Masonry/Masonry.h; sourceTree = ""; }; - 8C0A1312B50C17A4C611BA04975FA59D /* rescaler.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler.c; path = src/dsp/rescaler.c; sourceTree = ""; }; - 8C686BCF3D7F28862D9F8F441539A7BA /* IQKeyboardToolbarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardToolbarManager-Info.plist"; sourceTree = ""; }; - 8C69CF0F0BF608B7192C8C2D478D58D4 /* materialized+elements.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "materialized+elements.swift"; path = "Source/RxSwift/materialized+elements.swift"; sourceTree = ""; }; - 8C6DF38B89C797731652AD83F26B9E11 /* AlamofireExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlamofireExtended.swift; path = Source/Features/AlamofireExtended.swift; sourceTree = ""; }; - 8C7772A4DD34FF5F3A20C6153B961319 /* UIView+Resign.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Resign.swift"; path = "IQKeyboardManagerSwift/Resign/UIKItExtensions/UIView+Resign.swift"; sourceTree = ""; }; - 8CA76143A5698109811F6465625A7D19 /* RxSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.release.xcconfig; sourceTree = ""; }; - 8CA871A837C87D6CD87F1EF2EC8ED612 /* picture_tools_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_tools_enc.c; path = src/enc/picture_tools_enc.c; sourceTree = ""; }; - 8CB579539F7E67A543281235A347A0DD /* WechatOpenSDK-XCFramework.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "WechatOpenSDK-XCFramework.release.xcconfig"; sourceTree = ""; }; - 8CBC7A052D892803E76D2FFEAC1C3E83 /* enc_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_sse2.c; path = src/dsp/enc_sse2.c; sourceTree = ""; }; - 8CD15BB092F57C56BCAA6B4B7F799504 /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = ""; }; - 8D2F58F6D75CD6EAC8B4645270447959 /* idec_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = idec_dec.c; path = src/dec/idec_dec.c; sourceTree = ""; }; - 8D38B1AD3D58D53753B87B7C2A825199 /* CocoaLumberjack.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CocoaLumberjack.modulemap; sourceTree = ""; }; - 8D3D018125621B4BB8BD7ED705778350 /* IndexChangeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexChangeset.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/IndexChangeset.swift; sourceTree = ""; }; - 8D455E3561CAE1B6B583C060084663C0 /* TagListView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TagListView-prefix.pch"; sourceTree = ""; }; - 8D589F9274BAFDCFA26362A2DA2F9EB0 /* OIMUpdateFriendsReq.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMUpdateFriendsReq.h; path = OpenIMSDK/Model/OIMUpdateFriendsReq.h; sourceTree = ""; }; - 8D6DC81BAFA296758CF20F117E7A283A /* AnimationConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationConfiguration.swift; path = Sources/RxDataSources/AnimationConfiguration.swift; sourceTree = ""; }; + 8BC62A822F138AAB14F1F2BBD4FE0620 /* sharpyuv_csp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv_csp.h; path = sharpyuv/sharpyuv_csp.h; sourceTree = ""; }; + 8BE3802244F0F467A022E91DB6B2B712 /* AnimationContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationContext.swift; path = Sources/Private/Utility/Helpers/AnimationContext.swift; sourceTree = ""; }; + 8C0661ACD87A5C3E6324F3D7E16411DE /* YBIBAnimatedTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBAnimatedTransition.m; path = YBImageBrowser/Base/YBIBAnimatedTransition.m; sourceTree = ""; }; + 8C4E81CAF61B893EC5CDB1338F44D9DA /* PhotoEditorBrushColorView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorBrushColorView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorBrushColorView.swift; sourceTree = ""; }; + 8C6C1C2CD09F3D826E6B56CD9CA8EED3 /* RxDataSources.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxDataSources.release.xcconfig; sourceTree = ""; }; + 8C71DAEAD1ACD3A2CF92620FB0B243ED /* UIView+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Hierarchy.swift"; path = "IQKeyboardCore/Classes/UIKitExtensions/UIView+Hierarchy.swift"; sourceTree = ""; }; + 8C73556EF652E6AAF642783546B02DB0 /* AnimatableSectionModelType+ItemPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AnimatableSectionModelType+ItemPath.swift"; path = "Sources/Differentiator/AnimatableSectionModelType+ItemPath.swift"; sourceTree = ""; }; + 8C79119E0FD1944C9FBEC3DBA813288B /* GradientFillNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientFillNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift; sourceTree = ""; }; + 8C9BE70FD7A9924081AB7126CF05E791 /* Infallible+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Zip+arity.swift"; path = "RxSwift/Traits/Infallible/Infallible+Zip+arity.swift"; sourceTree = ""; }; + 8C9D5E2A219C95745FAF204B1E3FC92A /* CGPointExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGPointExtension.swift; path = Sources/Private/Utility/Primitives/CGPointExtension.swift; sourceTree = ""; }; + 8C9E8A9D320DDF6866142EBCF0AB17D3 /* SDAnimatedImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "SDAnimatedImageView+WebCache.h"; path = "SDWebImage/Core/SDAnimatedImageView+WebCache.h"; sourceTree = ""; }; + 8CCA2E44E59981BE0EACCD1B13A784DC /* MAParticleOverlayOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlayOptions.h; path = MAMapKit.framework/Headers/MAParticleOverlayOptions.h; sourceTree = ""; }; + 8CF7E9B4E27E9DB75877750C9B8021F9 /* Image+WebP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Image+WebP.swift"; path = "Sources/Image+WebP.swift"; sourceTree = ""; }; + 8D04DBC093A142D706FC40A9EBD11889 /* AnimatorNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatorNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Protocols/AnimatorNode.swift; sourceTree = ""; }; + 8D0909F96D750E913B07F7DFB71BDC38 /* SDCycleScrollView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDCycleScrollView-Info.plist"; sourceTree = ""; }; + 8D0EC04DD6C08373446E1739FED2DFC3 /* ElementAt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementAt.swift; path = RxSwift/Observables/ElementAt.swift; sourceTree = ""; }; + 8D35101D07B11F5698DC173C735AC6B7 /* Mapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mapper.swift; path = Sources/Mapper.swift; sourceTree = ""; }; + 8D4A842BE2E110919CE40363C5F007E2 /* utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = utils.c; path = src/utils/utils.c; sourceTree = ""; }; + 8D61DEE548FF6B9874EB886B0630F353 /* ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist"; sourceTree = ""; }; 8D8069D3964814114ACEC3084C010B59 /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; path = IQKeyboardManagerSwift.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - 8D8796D991AF7C66B8FE87145BE2DEFD /* IQTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQTextView-Info.plist"; sourceTree = ""; }; + 8D9E14EEDE501EE2045A8F5EF26EDD10 /* SynchronizedOnType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SynchronizedOnType.swift; path = RxSwift/Concurrency/SynchronizedOnType.swift; sourceTree = ""; }; + 8DCCA16221D7CCCCB0947FEC9E1C1F3A /* DDOSLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDOSLogger.m; path = Sources/CocoaLumberjack/DDOSLogger.m; sourceTree = ""; }; + 8DE841174DFB947091CC9730CC27A4D7 /* RxSwiftExt-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwiftExt-umbrella.h"; sourceTree = ""; }; + 8DEF1FCE593F12623DE48F3406DF7003 /* SDWebImageCacheKeyFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheKeyFilter.m; path = SDWebImage/Core/SDWebImageCacheKeyFilter.m; sourceTree = ""; }; 8E14307D6C734974BE9A14B2E56B296E /* Pods-QuickLocation-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-QuickLocation-acknowledgements.plist"; sourceTree = ""; }; - 8E22F8ED0B0260D140F7BE3E0E75344A /* lossless_enc_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_neon.c; path = src/dsp/lossless_enc_neon.c; sourceTree = ""; }; - 8E3FE23EA4FA88C546AC8A32561D0DF2 /* Disposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposable.swift; path = RxSwift/Disposable.swift; sourceTree = ""; }; - 8E4F0EB967D731167573C0D43015BE39 /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Sources/ConstraintView.swift; sourceTree = ""; }; - 8E6324703E1125DF8EE3BBB0953D938B /* ImageCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/ImageCompositionLayer.swift; sourceTree = ""; }; - 8E64F4612761F1A967A05BC539DAF105 /* MaskContainerLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MaskContainerLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/MaskContainerLayer.swift; sourceTree = ""; }; - 8EA47A05577E8BB8A9BF4102A2A8F1DA /* TagListView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = TagListView.modulemap; sourceTree = ""; }; - 8EA54F0BF8E86197CCAC3BD763221B5F /* BaseCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseCompositionLayer.swift; path = Sources/Private/CoreAnimation/Layers/BaseCompositionLayer.swift; sourceTree = ""; }; - 8EAE8C6CF498E05099DE24B18C3560DD /* RxMutableBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxMutableBox.swift; path = RxSwift/RxMutableBox.swift; sourceTree = ""; }; - 8EBAEB62E0BC6BBD2A99A9FFC0297E16 /* ShapeItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeItem.swift; path = Sources/Private/Model/ShapeItems/ShapeItem.swift; sourceTree = ""; }; - 8EF5D80D80065619CED3075AD992270A /* DDAbstractDatabaseLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDAbstractDatabaseLogger.m; path = Sources/CocoaLumberjack/DDAbstractDatabaseLogger.m; sourceTree = ""; }; - 8F085795F289B5BEEE1A9F7E1FFCAA53 /* VideoEditorFrameMaskView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorFrameMaskView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorFrameMaskView.swift; sourceTree = ""; }; - 8F10B233277A6683E58EBB3023563848 /* AMapGeoFenceError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceError.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceError.h; sourceTree = ""; }; - 8F139EC6DC9A823AD2A7358AE25AA685 /* KVORepresentable+CoreGraphics.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KVORepresentable+CoreGraphics.swift"; path = "RxCocoa/Foundation/KVORepresentable+CoreGraphics.swift"; sourceTree = ""; }; - 8F2242BE854DD9C19EF4B71CA79AE6F2 /* picture_rescale_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_rescale_enc.c; path = src/enc/picture_rescale_enc.c; sourceTree = ""; }; - 8F23207FD91B4D58996E1529198654DB /* SolidLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidLayer.swift; path = Sources/Private/CoreAnimation/Layers/SolidLayer.swift; sourceTree = ""; }; - 8F37D52910A532640524D149440D7052 /* IQTextInputViewNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQTextInputViewNotification-Info.plist"; sourceTree = ""; }; - 8F420C010C7336A4B964E0E4223E96D7 /* ObjectMapper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ObjectMapper-umbrella.h"; sourceTree = ""; }; - 8F42F145897CD3CFBDA60FB0264DB501 /* ConcurrentMainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentMainScheduler.swift; path = RxSwift/Schedulers/ConcurrentMainScheduler.swift; sourceTree = ""; }; - 8F5DBC544730FD8223729C38F6CB1F5B /* DateRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateRepresentable.swift; path = Sources/SwiftDate/DateRepresentable.swift; sourceTree = ""; }; - 8F878A7EA007A0B25D711F68CEC2F467 /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = ""; }; - 8F8F9A75D00E6A2AE71D19B551AD747C /* UIColor+SDHexString.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+SDHexString.h"; path = "SDWebImage/Private/UIColor+SDHexString.h"; sourceTree = ""; }; - 8F9DAB514C5BF79351540417F249261B /* UICollectionViewLayout+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UICollectionViewLayout+MJRefresh.m"; path = "MJRefresh/UICollectionViewLayout+MJRefresh.m"; sourceTree = ""; }; - 8FFDD175562EA9E04F00CB58EBF9A6D7 /* DDLog+LOGV.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDLog+LOGV.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDLog+LOGV.h"; sourceTree = ""; }; - 8FFE248620888CCBBC57FC0D85239779 /* NSString+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MJExtension.m"; path = "MJExtension/NSString+MJExtension.m"; sourceTree = ""; }; - 9013133C38E66F88D918BAA5D7105F92 /* PickerCamerViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerCamerViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PickerCamerViewCell.swift; sourceTree = ""; }; - 905D38CB18C6D7D4FCFE589AE6168BA5 /* sharpyuv_dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv_dsp.h; path = sharpyuv/sharpyuv_dsp.h; sourceTree = ""; }; - 907CC3064F74B222E3E0073D5AD8B602 /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Extensions/Result+Alamofire.swift"; sourceTree = ""; }; - 90ABBE9D63AD78104E5DACFD423F724C /* AnimatedControl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedControl.swift; path = Sources/Public/Controls/AnimatedControl.swift; sourceTree = ""; }; - 9167B3FF06763D714F9660F54885ECEF /* SDCycleScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDCycleScrollView.m; path = SDCycleScrollView/Lib/SDCycleScrollView/SDCycleScrollView.m; sourceTree = ""; }; - 91C413DA11BA0A2F7D5DE3F394B6B61F /* YBImageBrowser-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBImageBrowser-umbrella.h"; sourceTree = ""; }; - 91C711A1DC0B3F501774D59914B427DF /* YBImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBImage.m; path = YBImageBrowser/Image/YBImage.m; sourceTree = ""; }; - 91C802E651BCE006BD4115AB9D594543 /* OIMFaceElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMFaceElem.h; path = OpenIMSDK/Model/OIMFaceElem.h; sourceTree = ""; }; - 91E03E21D00A0CFC8BB4829B9104C22F /* MASViewConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASViewConstraint.m; path = Masonry/MASViewConstraint.m; sourceTree = ""; }; - 91FB2EE0D18C43ED23BA513E80509BEA /* Multicast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multicast.swift; path = RxSwift/Observables/Multicast.swift; sourceTree = ""; }; - 91FDF1CAA6188BB76D061C1A1A292B80 /* VirtualTimeScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeScheduler.swift; path = RxSwift/Schedulers/VirtualTimeScheduler.swift; sourceTree = ""; }; - 9223CD5E46678235221233277EDFE02D /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; - 9245CE764CFC8D2EE878F9982D8D7E40 /* AlbumViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/AlbumViewCell.swift; sourceTree = ""; }; - 924741FD99920A8D329E493A5868847A /* lossless.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless.c; path = src/dsp/lossless.c; sourceTree = ""; }; - 9258CFF7C85CF79A431C334C91C49A73 /* DataStreamRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataStreamRequest.swift; path = Source/Core/DataStreamRequest.swift; sourceTree = ""; }; - 92848CB8CEF981C9B3BC395EEC10733C /* OpenIMSDK.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OpenIMSDK.h; path = OpenIMSDK/OpenIMSDK.h; sourceTree = ""; }; - 92F1C3BA22F62F1CFB1DE61364BA3A00 /* IQKeyboardNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardNotification.debug.xcconfig; sourceTree = ""; }; - 92F5E3708E512F20F2F3931DF742408D /* SchedulerType+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SchedulerType+SharedSequence.swift"; path = "RxCocoa/Traits/SharedSequence/SchedulerType+SharedSequence.swift"; sourceTree = ""; }; - 93608F9DC483D379F667A4F03EDE2D96 /* IQTextInputViewNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextInputViewNotification.debug.xcconfig; sourceTree = ""; }; - 9361EDCF72DA935BC195CF2F2E7FEEB1 /* DataSources.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataSources.swift; path = Sources/RxDataSources/DataSources.swift; sourceTree = ""; }; - 937ADC586D7A9572D0499B091531BB27 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; - 937BB6E663A5DDF84A196EB20804E1C1 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; }; - 937D966D88196EC775BA025C4832B900 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Sources/Moya/MultipartFormData.swift; sourceTree = ""; }; - 938E1CDDDC030960A63016E0B7190652 /* MarqueeLabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarqueeLabel.swift; path = Sources/MarqueeLabel.swift; sourceTree = ""; }; - 939FD9EE67CE7F1E53A18F47AA4723E6 /* MAMultiTexturePolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiTexturePolylineRenderer.h; path = MAMapKit.framework/Headers/MAMultiTexturePolylineRenderer.h; sourceTree = ""; }; - 93EAA2A959A3EA70624A72F2FB588943 /* SwiftDate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftDate.swift; path = Sources/SwiftDate/SwiftDate.swift; sourceTree = ""; }; - 93EB8108EBFD809D4BA7DD0D01AC8F2F /* RxTextViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTextViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTextViewDelegateProxy.swift; sourceTree = ""; }; - 93F96F1B2F72E1AF5CB8D5EB7411DC8F /* MAShape.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAShape.h; path = MAMapKit.framework/Headers/MAShape.h; sourceTree = ""; }; - 9421E603875C52CCF37AA01A75D831F8 /* SDFileAttributeHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDFileAttributeHelper.h; path = SDWebImage/Private/SDFileAttributeHelper.h; sourceTree = ""; }; - 944D14CC3340E5906FB0AE787C227F8A /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; - 94801563DB532EDC0D80A3BCEE705193 /* IQKeyboardCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardCore.release.xcconfig; sourceTree = ""; }; - 949664818DDAAF8B27BABD5A314AE777 /* MAMapAccessibilityIdentifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapAccessibilityIdentifier.h; path = MAMapKit.framework/Headers/MAMapAccessibilityIdentifier.h; sourceTree = ""; }; - 94D516F270368ACF9D94D50BA45877D7 /* LayerEffectNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerEffectNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/LayerEffectNodes/LayerEffectNode.swift; sourceTree = ""; }; - 94E6EE5AEC188C24CA3F770D37E635EC /* PhotoEditorDrawView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorDrawView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorDrawView.swift; sourceTree = ""; }; - 94F7F3E3105E990CC2499FF7816AE311 /* PrecompAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrecompAsset.swift; path = Sources/Private/Model/Assets/PrecompAsset.swift; sourceTree = ""; }; - 9529091C803AAABDBA7281A7BC067C73 /* IQKeyboardToolbar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardToolbar.modulemap; sourceTree = ""; }; - 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 95443C107F9AEEA2EE018985A7D23387 /* LayerImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerImageProvider.swift; path = Sources/Private/MainThread/LayerContainers/Utility/LayerImageProvider.swift; sourceTree = ""; }; - 956D08303C546C8822DB0DCBD148CF06 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MJRefresh.h"; path = "MJRefresh/NSBundle+MJRefresh.h"; sourceTree = ""; }; - 9591005EF300740D15A68DC41F123102 /* CameraViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CameraViewController.swift; path = Sources/HXPHPicker/Picker/Controller/CameraViewController.swift; sourceTree = ""; }; - 959731C5E318724CF5BC5D4444F684D1 /* DDContextFilterLogFormatter+Deprecated.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDContextFilterLogFormatter+Deprecated.h"; path = "Sources/CocoaLumberjack/include/CocoaLumberjack/DDContextFilterLogFormatter+Deprecated.h"; sourceTree = ""; }; - 95F037BC936089687A0571DF3857C90B /* RxRelay-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxRelay-dummy.m"; sourceTree = ""; }; - 95FBC83924660AF9550D968A6631AD5A /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = ""; }; - 961625FA203A229009E5377F960B59F0 /* MultiTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultiTarget.swift; path = Sources/Moya/MultiTarget.swift; sourceTree = ""; }; - 96280EB941ACB84F13C3D03EFD21D089 /* MAGeometry.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGeometry.h; path = MAMapKit.framework/Headers/MAGeometry.h; sourceTree = ""; }; - 963E16D80DDA6E3F39317FBEEF4A019F /* IQKeyboardToolbarManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Internal.swift"; path = "IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager+Internal.swift"; sourceTree = ""; }; - 96438B90C1831FEF8FEAD0F9265BB943 /* MAOfflineItemMunicipality.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemMunicipality.h; path = MAMapKit.framework/Headers/MAOfflineItemMunicipality.h; sourceTree = ""; }; - 96A774383BDFCF0DCC96A12872CBD4BB /* NSImage+Compatibility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSImage+Compatibility.h"; path = "SDWebImage/Core/NSImage+Compatibility.h"; sourceTree = ""; }; - 972CC00CAA521E6FA780F098E389470A /* SDWeakProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWeakProxy.m; path = SDWebImage/Private/SDWeakProxy.m; sourceTree = ""; }; - 9748FAB56C967BFAED8A26117036C999 /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = ""; }; - 975ECCBDDA389719AEC4E54DB0112147 /* CAAnimation+TimingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CAAnimation+TimingConfiguration.swift"; path = "Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift"; sourceTree = ""; }; - 977D96FA02CBC7EE86913380335CAEE9 /* SGPermissionCamera.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGPermissionCamera.m; path = SGQRCode/Permission/SGPermissionCamera.m; sourceTree = ""; }; - 97847B9AE08AA8C0D6CD270E39CDC0E2 /* OIMManager+Message.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Message.h"; path = "OpenIMSDK/Interface/OIMManager+Message.h"; sourceTree = ""; }; + 8E228DE53A7843A9B62E323CFFB04240 /* ImageView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageView+Kingfisher.swift"; path = "Sources/Extensions/ImageView+Kingfisher.swift"; sourceTree = ""; }; + 8E25ED01381098B01A662D40ED3B1C5E /* URLPathComponent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLPathComponent.swift; path = Sources/URLMatcher/URLPathComponent.swift; sourceTree = ""; }; + 8E579505C72B45CC000E8E91927E7A5B /* PickerTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerTypes.swift; path = Sources/HXPHPicker/Picker/Model/PickerTypes.swift; sourceTree = ""; }; + 8E69D9DD0B6099895F3D54842186DC5A /* Kingfisher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-umbrella.h"; sourceTree = ""; }; + 8E7634E51DE590157C8F535EA1D247B4 /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Kingfisher.swift"; path = "Sources/Extensions/UIButton+Kingfisher.swift"; sourceTree = ""; }; + 8ED125D7528257024B809AC5B68197AE /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; + 8EFDC55D9C77B32C3928B5308CA1A0C3 /* LayerModel+makeAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "LayerModel+makeAnimationLayer.swift"; path = "Sources/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift"; sourceTree = ""; }; + 8F244BB88E281861AA961B0B8B7F3FAC /* MJExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MJExtension-Info.plist"; sourceTree = ""; }; + 8F2ABB2AEB2CB29DE8F616DDE208CB10 /* MJRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshComponent.h; path = MJRefresh/Base/MJRefreshComponent.h; sourceTree = ""; }; + 8F648C5A78D49866F4428026C3DBC0FF /* yuv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = yuv.h; path = src/dsp/yuv.h; sourceTree = ""; }; + 8F6C4B32F8545FD29CC3B33741AFBEDF /* SGQRCode.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SGQRCode.release.xcconfig; sourceTree = ""; }; + 8F7CC255B973DED6704CF75AA5652653 /* _RXDelegateProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXDelegateProxy.h; path = RxCocoa/Runtime/include/_RXDelegateProxy.h; sourceTree = ""; }; + 8F8D5B1A459FAE61EDF4337A132BB5AF /* AnyNodeProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyNodeProperty.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift; sourceTree = ""; }; + 8FA1F9EE893754FCB88034C3F53B9134 /* webpi_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = webpi_dec.h; path = src/dec/webpi_dec.h; sourceTree = ""; }; + 8FDCC95F21DE5E485AAE4A6AFC3ECDE3 /* AssetManager+Authorization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+Authorization.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+Authorization.swift"; sourceTree = ""; }; + 8FECF4078450642BEA0A9B39AB4BE98C /* LottieAnimationViewInitializers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationViewInitializers.swift; path = Sources/Public/Animation/LottieAnimationViewInitializers.swift; sourceTree = ""; }; + 9005A4BA6A695B43606F43DA74AF0ED0 /* Core+Dictionary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+Dictionary.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+Dictionary.swift"; sourceTree = ""; }; + 901DB6006F9C44DE01F74CB94CF76648 /* Asset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Asset.swift; path = Sources/Private/Model/Assets/Asset.swift; sourceTree = ""; }; + 9026790117C43E79599D121A106C2214 /* NotificationCenter+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NotificationCenter+Rx.swift"; path = "RxCocoa/Foundation/NotificationCenter+Rx.swift"; sourceTree = ""; }; + 904B48D203DDC37F7BD33F40FE034271 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; + 906D0A72EE028674565F0303DE1D205A /* ProgressImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProgressImageView.swift; path = Sources/HXPHPicker/Core/View/ProgressImageView.swift; sourceTree = ""; }; + 908DC03A3D9216AB6FE7FE902C573A81 /* DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DistinctUntilChanged.swift; path = RxSwift/Observables/DistinctUntilChanged.swift; sourceTree = ""; }; + 909BD42DC3755A52936AECE9F677FAC7 /* EditorChartlet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorChartlet.swift; path = Sources/HXPHPicker/Editor/Model/EditorChartlet.swift; sourceTree = ""; }; + 909D62EF63BD78A83AC24163EEE78816 /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Data+Compression.swift"; sourceTree = ""; }; + 90B5BC834A2DCAECF1A45B2A40BF12F8 /* Core+CALayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+CALayer.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+CALayer.swift"; sourceTree = ""; }; + 90C7FFBD13E7069D7CDB43E2A9F7F81D /* OIMCallbacker+Closure.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMCallbacker+Closure.h"; path = "OpenIMSDK/Callbacker/OIMCallbacker+Closure.h"; sourceTree = ""; }; + 90E2AEDE3DA3F9A2A9D53BFD34D9D235 /* IQKeyboardCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardCore-prefix.pch"; sourceTree = ""; }; + 9108431DE0EE65E182C641811F6F644A /* SizeExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SizeExtensions.swift; path = Sources/Utility/SizeExtensions.swift; sourceTree = ""; }; + 910B1455FE142F868DB22A1E2D94066D /* cost.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost.c; path = src/dsp/cost.c; sourceTree = ""; }; + 913C06E86762583AA08FA9981CC07752 /* MASConstraintMaker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASConstraintMaker.m; path = Masonry/MASConstraintMaker.m; sourceTree = ""; }; + 914D1DC48410EEA11DC4146D823176F8 /* ImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProvider.swift; path = Sources/General/ImageSource/ImageDataProvider.swift; sourceTree = ""; }; + 914F74DC9A660B3CCD6B5049FA3E857E /* RxRelay.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxRelay.debug.xcconfig; sourceTree = ""; }; + 917B5AE204AB6A982EF8CB9D8A5555E1 /* Disposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Disposable.swift; path = RxSwift/Disposable.swift; sourceTree = ""; }; + 918ECADF5BF52E258972BF447F8A10EF /* IQKeyboardCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardCore.modulemap; sourceTree = ""; }; + 91AED5A00B8A2452332D3796039AFA18 /* SDImageIOCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOCoder.m; path = SDWebImage/Core/SDImageIOCoder.m; sourceTree = ""; }; + 91B0431B844DD4BC6EA015F23F666DBB /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshGifHeader.m; path = MJRefresh/Custom/Header/MJRefreshGifHeader.m; sourceTree = ""; }; + 91F40D000DF542C6D6257B1B433BAA8B /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; }; + 91F9B1A6C9A789429ABD96817E09C218 /* TableViewSectionedDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TableViewSectionedDataSource.swift; path = Sources/RxDataSources/TableViewSectionedDataSource.swift; sourceTree = ""; }; + 92045CC4A14841CF942F7D0EE8B79E7D /* TagListView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "TagListView-prefix.pch"; sourceTree = ""; }; + 924B109D0B5D6A53163A686247653238 /* near_lossless_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = near_lossless_enc.c; path = src/enc/near_lossless_enc.c; sourceTree = ""; }; + 925963B6762F7EDD3F4B025942C781DD /* PreviewLivePhotoViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewLivePhotoViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PreviewLivePhotoViewCell.swift; sourceTree = ""; }; + 92825D18FFC3CBC0A7BD59C44FACD099 /* AssetManager+ImageData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+ImageData.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+ImageData.swift"; sourceTree = ""; }; + 9291056517CD88E650D02DBF191884B9 /* SGPermission.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGPermission.h; path = SGQRCode/Permission/SGPermission.h; sourceTree = ""; }; + 92ED2EB695BF51A59A9309EFCD8B7BAA /* ObserveOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserveOn.swift; path = RxSwift/Observables/ObserveOn.swift; sourceTree = ""; }; + 92EDBF8FFCFE5EE0F3E29D0ED7298030 /* ResourceBundle-IQTextView-IQTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQTextView-IQTextView-Info.plist"; sourceTree = ""; }; + 92EFF684FDFA11D0956B96DD55C639A3 /* Plugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Plugin.swift; path = Sources/Moya/Plugin.swift; sourceTree = ""; }; + 930A966769BFBCE4E38BBE706B3106C9 /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; + 932301FE559406FA40A9042558D4F7DC /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = ""; }; + 9338849C2BBC91DD9D38114527BD13B0 /* RxSearchBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxSearchBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift; sourceTree = ""; }; + 935291735FD863A36C3BB6A8BDF7A2F9 /* OIMQuoteElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMQuoteElem.m; path = OpenIMSDK/Model/OIMQuoteElem.m; sourceTree = ""; }; + 936CB7B4BDC58080C1761D5802B3F961 /* muxi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = muxi.h; path = src/mux/muxi.h; sourceTree = ""; }; + 937527F6AC0ACCCA2F3FE296E1CEAA54 /* SDWebImageDownloaderDecryptor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderDecryptor.m; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.m; sourceTree = ""; }; + 93AC70A2D46A8E4C52484F59DCF920FD /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/ImageIO.framework; sourceTree = DEVELOPER_DIR; }; + 93D1007188695E58DB2F07BDFDF18D71 /* SDWebImageError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageError.h; path = SDWebImage/Core/SDWebImageError.h; sourceTree = ""; }; + 93D67B4D138C469D66869335FAC4A656 /* TagListView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TagListView.debug.xcconfig; sourceTree = ""; }; + 93D9B635C959143CB4FFDC5AFF2342A0 /* AsSingle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsSingle.swift; path = RxSwift/Observables/AsSingle.swift; sourceTree = ""; }; + 93E12D74AA92766FA145737CB1FF4B12 /* AssetManager+Asset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+Asset.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+Asset.swift"; sourceTree = ""; }; + 94057504769A3A6E724B5B40972FC141 /* Moya-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Moya-dummy.m"; sourceTree = ""; }; + 940C74F803A7278DA8A603C8A4C8CE5A /* cost_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_mips_dsp_r2.c; path = src/dsp/cost_mips_dsp_r2.c; sourceTree = ""; }; + 9427F04B99D87CA5595F70B09E854EDC /* RxTableViewSectionedReloadDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewSectionedReloadDataSource.swift; path = Sources/RxDataSources/RxTableViewSectionedReloadDataSource.swift; sourceTree = ""; }; + 94441A97766437C85EA2053848569EA5 /* DDContextFilterLogFormatter+Deprecated.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "DDContextFilterLogFormatter+Deprecated.m"; path = "Sources/CocoaLumberjack/Extensions/DDContextFilterLogFormatter+Deprecated.m"; sourceTree = ""; }; + 944736B27436A346B72E1922E58C113A /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = ""; }; + 946F64F2974C5F3D0BEDE60786B551E5 /* Kingfisher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Kingfisher-Info.plist"; sourceTree = ""; }; + 94AFF6B159156CF9FB52FA537C9D048A /* MBProgressHUD-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-dummy.m"; sourceTree = ""; }; + 94C3D7F5F5DD3200C6843026A2749F7E /* DotLottieCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieCache.swift; path = Sources/Public/DotLottie/Cache/DotLottieCache.swift; sourceTree = ""; }; + 950AF206CB2131B94A4913E8D6D73802 /* OIMReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMReachability.m; path = OpenIMSDK/Utils/OIMReachability.m; sourceTree = ""; }; + 953299ECE8729913D60E8FE4347C81B9 /* RxSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxSwift.modulemap; sourceTree = ""; }; + 953DA43EB13E30AF8D9D972941D5826F /* Delegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delegate.swift; path = Sources/Utility/Delegate.swift; sourceTree = ""; }; + 956F909BA66A7652F595667B35B52BFF /* ProgressHUD.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ProgressHUD.swift; path = Sources/HXPHPicker/Core/View/ProgressHUD.swift; sourceTree = ""; }; + 957ABD5CBD7C6C587953F24C9B4801B8 /* MARouteOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MARouteOverlay.h; path = MAMapKit.framework/Headers/MARouteOverlay.h; sourceTree = ""; }; + 957C981964A435BDF75AB5CB24C17F0B /* OIMGroupMemberInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMGroupMemberInfo.h; path = OpenIMSDK/Model/OIMGroupMemberInfo.h; sourceTree = ""; }; + 957FB55BA840E6DCA8B080C66EA98A00 /* AMapCommonObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapCommonObj.h; path = AMapSearchKit.framework/Headers/AMapCommonObj.h; sourceTree = ""; }; + 958AA68B7BB3D260BE27D937E76C9710 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; }; + 95A4FDAF241C16930F812761D74FCEF5 /* AppearanceStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppearanceStyle.swift; path = Sources/HXPHPicker/Core/Model/AppearanceStyle.swift; sourceTree = ""; }; + 95B4863B9298753CB8613C21E39C9B27 /* YBIBUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBUtilities.m; path = YBImageBrowser/Helper/YBIBUtilities.m; sourceTree = ""; }; + 95C9B78922BE02FFF53369884C14F1FB /* RecursiveLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveLock.swift; path = Platform/RecursiveLock.swift; sourceTree = ""; }; + 95CC0C8C9DF91B6EEC6755575144D1BE /* UIScrollView+IQKeyboardManagerExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+IQKeyboardManagerExtension.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtension.swift"; sourceTree = ""; }; + 95E8FA08C357760274FBE094F7121F08 /* Mappable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mappable.swift; path = Sources/Mappable.swift; sourceTree = ""; }; + 964E1CEEC8EEF50447125EFF8F2C54A9 /* Do.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Do.swift; path = RxSwift/Observables/Do.swift; sourceTree = ""; }; + 9668DF6256ACD7532AE815424C1276DB /* MathKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MathKit.swift; path = Sources/Private/Utility/Extensions/MathKit.swift; sourceTree = ""; }; + 967D6286ECF8DBBE843AB35C9E2CF2B4 /* NSDecimalNumberTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSDecimalNumberTransform.swift; path = Sources/NSDecimalNumberTransform.swift; sourceTree = ""; }; + 969C95064469988CF9DD2C0988D5721B /* GradientValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift; sourceTree = ""; }; + 96F3E5D9B2FF0D6AA2D5960343BEE699 /* MAMultiPointOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPointOverlay.h; path = MAMapKit.framework/Headers/MAMultiPointOverlay.h; sourceTree = ""; }; + 97404EDD54B128EB9F21CCA4CC58A92B /* KFImageProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageProtocol.swift; path = Sources/SwiftUI/KFImageProtocol.swift; sourceTree = ""; }; + 976B64416E3016008D42A1E155509FD3 /* mapTo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = mapTo.swift; path = Source/RxSwift/mapTo.swift; sourceTree = ""; }; 979486118B3E90C08386079D57962701 /* SnapKit */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SnapKit; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 97A7803B1238FF4874E59DBF1A7ADE7E /* Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Map.swift; path = RxSwift/Observables/Map.swift; sourceTree = ""; }; - 97A94F41128644A73B8BB322379AD1AB /* Masonry-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Masonry-Info.plist"; sourceTree = ""; }; - 97D599D0C0EA915D51D3C2779E4B546F /* HXPHPicker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HXPHPicker.debug.xcconfig; sourceTree = ""; }; - 97DE3A82457FECCDA36D235A9A527121 /* NotAuthorizedConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NotAuthorizedConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/NotAuthorizedConfiguration.swift; sourceTree = ""; }; - 97F0DF9B08CCA8D2A5749BBA40C04F42 /* GradientStrokeNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientStrokeNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift; sourceTree = ""; }; - 986D3638256A93D202D509D2EA916718 /* mapAt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = mapAt.swift; path = Source/RxSwift/mapAt.swift; sourceTree = ""; }; - 988C977871E4F16B43124775C5442980 /* PhotoAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoAsset.swift; path = Sources/HXPHPicker/Picker/Model/PhotoAsset.swift; sourceTree = ""; }; - 989D623AF0CB634DB11052E3FC4DC617 /* IdentifiableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IdentifiableType.swift; path = Sources/Differentiator/IdentifiableType.swift; sourceTree = ""; }; - 98C65967D7AEF74EAC5A85711A296395 /* sharpyuv_csp.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_csp.c; path = sharpyuv/sharpyuv_csp.c; sourceTree = ""; }; - 98CB8DA217C5930EC3944F99F5D655D7 /* YBIBOrientationReceiveProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBOrientationReceiveProtocol.h; path = YBImageBrowser/Protocol/YBIBOrientationReceiveProtocol.h; sourceTree = ""; }; - 98D78C9FF90C7172E103F3D42D122546 /* YBIBPhotoAlbumManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBPhotoAlbumManager.h; path = YBImageBrowser/Helper/YBIBPhotoAlbumManager.h; sourceTree = ""; }; - 990707B203C5928699E7AAADC40C85D6 /* TAAbstractDotView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TAAbstractDotView.h; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAAbstractDotView.h; sourceTree = ""; }; - 991D1386E3E848056EA3B4E051FE493E /* picture_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_enc.c; path = src/enc/picture_enc.c; sourceTree = ""; }; - 9923D74C7DCC4CC752F4502C4B9F4AB3 /* Resource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resource.swift; path = Sources/General/ImageSource/Resource.swift; sourceTree = ""; }; - 993FD35E999A7AB78E66C8B6CB9FDB35 /* IQTitleBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTitleBarButtonItem.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQTitleBarButtonItem.swift; sourceTree = ""; }; - 9949D2F039C26335E06B4DEDB869C47F /* HXPHPicker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HXPHPicker.swift; path = Sources/HXPHPicker/Core/HXPHPicker.swift; sourceTree = ""; }; - 99A0AB85281536E0E545FFA662C432F5 /* YBIBImageScrollView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageScrollView.h; path = YBImageBrowser/Image/YBIBImageScrollView.h; sourceTree = ""; }; - 99DADE9DE147112FECFE409CD724C123 /* dec_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_mips32.c; path = src/dsp/dec_mips32.c; sourceTree = ""; }; - 99DBBEE27AA60246E2BFF5947C21C49F /* apply.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = apply.swift; path = Source/RxSwift/apply.swift; sourceTree = ""; }; - 99DE9108716840253E3172EC905024FC /* YBIBTopView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBTopView.m; path = YBImageBrowser/ToolView/YBIBTopView.m; sourceTree = ""; }; - 9A226DD5B5DE35D44F9321FEA69D7502 /* thread_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_utils.h; path = src/utils/thread_utils.h; sourceTree = ""; }; - 9A2A7C5D27987780C1AD46450EB28461 /* ValueProviderStore.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueProviderStore.swift; path = Sources/Private/CoreAnimation/ValueProviderStore.swift; sourceTree = ""; }; - 9A4D97DA05C3A8E92FE31917D35A2473 /* SDImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageLoader.h; path = SDWebImage/Core/SDImageLoader.h; sourceTree = ""; }; - 9A610F8E5A523D74EB02337C66D2442C /* IQKeyboardNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardNotification.swift; path = IQKeyboardNotification/Classes/IQKeyboardNotification.swift; sourceTree = ""; }; - 9A835D487FD056ED86C09488FF6297B8 /* MACustomBuildingOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomBuildingOverlayRenderer.h; path = MAMapKit.framework/Headers/MACustomBuildingOverlayRenderer.h; sourceTree = ""; }; - 9A866A6512ACC69E4827C91B2C8E59B7 /* Popover-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Popover-Info.plist"; sourceTree = ""; }; - 9AACEF2C953C3C0DBC735A19E819E97D /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; - 9AE453074B44CE425E74E7005ECD4AE8 /* DotLottieUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieUtils.swift; path = Sources/Private/Model/DotLottie/DotLottieUtils.swift; sourceTree = ""; }; - 9AFF3A2C20A0878A9F0BD547D0C6006C /* GroupBy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupBy.swift; path = RxSwift/Observables/GroupBy.swift; sourceTree = ""; }; - 9B10279D7918F58546A902DD776F193D /* RenderNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RenderNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Protocols/RenderNode.swift; sourceTree = ""; }; - 9B38CA1B256C4DC4578E9BED9368B736 /* HasImageComponent+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "HasImageComponent+Kingfisher.swift"; path = "Sources/Extensions/HasImageComponent+Kingfisher.swift"; sourceTree = ""; }; - 9B47B0F33ADB52865D45F738C9337602 /* AnimatableSectionModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatableSectionModel.swift; path = Sources/Differentiator/AnimatableSectionModel.swift; sourceTree = ""; }; - 9BC029F6B78235F5DBCA8BEA669E6064 /* MoyaError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MoyaError.swift; path = Sources/Moya/MoyaError.swift; sourceTree = ""; }; - 9BC0A20DD2D47C97E991C418B88BE2C5 /* CacheSerializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CacheSerializer.swift; path = Sources/Cache/CacheSerializer.swift; sourceTree = ""; }; - 9BC42012201F6578E940392397D5E5F8 /* IQKeyboardReturnManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardReturnManager-umbrella.h"; sourceTree = ""; }; - 9BD6B4F346C99BD856693783A8C59593 /* CombinedShapeAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombinedShapeAnimation.swift; path = Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift; sourceTree = ""; }; - 9C13E6FBDDAB97317E0522724037E9E2 /* Moya.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Moya.release.xcconfig; sourceTree = ""; }; - 9C247ABAB37F0C054419181BFC3D3E7E /* LivePhotoError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LivePhotoError.swift; path = Sources/HXPHPicker/Core/Model/LivePhotoError.swift; sourceTree = ""; }; - 9C4BD1FDD57389DDABA93B25B1F33C60 /* ResourceBundle-RxSwift_Privacy-RxSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RxSwift_Privacy-RxSwift-Info.plist"; sourceTree = ""; }; - 9C6F8597CB530F782630CE04406C2C19 /* MJRefreshNormalTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m; sourceTree = ""; }; - 9C9DAE1505A940BA7AE87B8FD412527B /* UIView+WebCacheState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheState.h"; path = "SDWebImage/Core/UIView+WebCacheState.h"; sourceTree = ""; }; - 9CA16EE1A89EBCA3540FF1842B65A1F0 /* NSObject+YBImageBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+YBImageBrowser.m"; path = "YBImageBrowser/Base/NSObject+YBImageBrowser.m"; sourceTree = ""; }; - 9CB8B56D6AF6C0096630403D14A6A2F8 /* Infallible+CombineLatest+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+CombineLatest+Collection.swift"; path = "RxSwift/Traits/Infallible/Infallible+CombineLatest+Collection.swift"; sourceTree = ""; }; - 9CCA7A792E4A6A2B6109301CC66A69A9 /* RxNavigationControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxNavigationControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift; sourceTree = ""; }; - 9CECC955C1BC5B80B4C9603E67AF9B13 /* MainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainScheduler.swift; path = RxSwift/Schedulers/MainScheduler.swift; sourceTree = ""; }; - 9CF168F773685B0F062B7011CD49245B /* UIViewPropertyAnimator+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewPropertyAnimator+Rx.swift"; path = "Source/RxCocoa/UIViewPropertyAnimator+Rx.swift"; sourceTree = ""; }; - 9D0884D8E461C506BA1299415A08D8E6 /* upsampling_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_sse2.c; path = src/dsp/upsampling_sse2.c; sourceTree = ""; }; - 9D25EE96F04C43612DF2FA22177EB0C8 /* AMapFoundationKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationKit.h; path = AMapFoundationKit.framework/Headers/AMapFoundationKit.h; sourceTree = ""; }; - 9D30F72ABB0E7C0638BD31E4CE7840A3 /* Moya+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Moya+Alamofire.swift"; path = "Sources/Moya/Moya+Alamofire.swift"; sourceTree = ""; }; - 9D5ECA710EB149367627C0ECCCD88F67 /* Infallible+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Bind.swift"; path = "RxCocoa/Common/Infallible+Bind.swift"; sourceTree = ""; }; + 979C891C173C4B89C451458A3F545DCC /* alpha_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_enc.c; path = src/enc/alpha_enc.c; sourceTree = ""; }; + 97AA22B3EFF347E5FA01A0D40617FA36 /* TimePeriod+Support.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "TimePeriod+Support.swift"; path = "Sources/SwiftDate/TimePeriod/TimePeriod+Support.swift"; sourceTree = ""; }; + 97D74D3A2081E4658E8D782F0DFB43C2 /* LayerProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerProperty.swift; path = Sources/Private/CoreAnimation/Animations/LayerProperty.swift; sourceTree = ""; }; + 97D8DC7E7FCCA6B36A398A4130916FF5 /* WebSocketRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocketRequest.swift; path = Source/Core/WebSocketRequest.swift; sourceTree = ""; }; + 97EF826E6048C875FF0150EBB63D62DA /* YBImageBrowser.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YBImageBrowser.release.xcconfig; sourceTree = ""; }; + 98026ABD4730AD0D7DE536A7F513DDB3 /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = ""; }; + 9823236B88743EB6A4D25D711237C722 /* quant_levels_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant_levels_utils.h; path = src/utils/quant_levels_utils.h; sourceTree = ""; }; + 9827171C80049752294AD9E3E7618E0C /* ReducedMotionOption.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReducedMotionOption.swift; path = Sources/Public/Configuration/ReducedMotionOption.swift; sourceTree = ""; }; + 98675E3A1A2936ED5AD80EDCA005B45A /* StrokeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StrokeRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift; sourceTree = ""; }; + 98AD5468026B6327AC1AC789C55E2B66 /* KFImageOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageOptions.swift; path = Sources/SwiftUI/KFImageOptions.swift; sourceTree = ""; }; + 98C70EAA109E0E04638FA1D75DD9F750 /* AMapNearbyUploadInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNearbyUploadInfo.h; path = AMapSearchKit.framework/Headers/AMapNearbyUploadInfo.h; sourceTree = ""; }; + 98CDBE58C4CEDB9BD1550333B927C91D /* YBIBLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBLoadingView.h; path = YBImageBrowser/AuxiliaryView/YBIBLoadingView.h; sourceTree = ""; }; + 98D77213A7C4320F6008B30A82AE41CE /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MJRefresh.h"; path = "MJRefresh/NSBundle+MJRefresh.h"; sourceTree = ""; }; + 98E65BD4ED51C14C9AEED0810840CC1C /* UIImageView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImageView+WebCache.h"; path = "SDWebImage/Core/UIImageView+WebCache.h"; sourceTree = ""; }; + 98FE132ACD16AAAFCB4C2207A360977B /* Archive+WritingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+WritingDeprecated.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+WritingDeprecated.swift"; sourceTree = ""; }; + 9909A72F16EE2DC3ABF5C0F04E9ACEC3 /* StrokeAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StrokeAnimation.swift; path = Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift; sourceTree = ""; }; + 99239440EF284973039A0999DC626537 /* distinct.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = distinct.swift; path = Source/RxSwift/distinct.swift; sourceTree = ""; }; + 992563FFA7421581C3FDF8EA91BA1F9C /* DotLottieImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieImageProvider.swift; path = Sources/Private/Model/DotLottie/DotLottieImageProvider.swift; sourceTree = ""; }; + 993E3A197E04AE42791F78A4570F6478 /* LottieAnimationCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationCache.swift; path = Sources/Public/AnimationCache/LottieAnimationCache.swift; sourceTree = ""; }; + 9945C30FA08BD9EC319748ED2D43517F /* AnyEquatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyEquatable.swift; path = Sources/Private/Utility/Helpers/AnyEquatable.swift; sourceTree = ""; }; + 99499D0EE1F54DD810D25785B2CEF644 /* IQKeyboardNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardNotification.modulemap; sourceTree = ""; }; + 99527D922C5842B63773D4E636CAF2A6 /* Mask.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mask.swift; path = Sources/Private/Model/Objects/Mask.swift; sourceTree = ""; }; + 996E52A9F81C41390E20DE3A4592D278 /* PhotoEditResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditResult.swift; path = Sources/HXPHPicker/Editor/PhotoEditResult.swift; sourceTree = ""; }; + 997167D7CBCAD446D8B3CDD072502918 /* IQTextInputViewNotification-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQTextInputViewNotification-dummy.m"; sourceTree = ""; }; + 99865637FCFF7B1AA28FC0923C3042EE /* TransformAnimations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformAnimations.swift; path = Sources/Private/CoreAnimation/Animations/TransformAnimations.swift; sourceTree = ""; }; + 99A13D9C8041EE3BD62071DAE3F0C6B2 /* Keyframes+combined.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Keyframes+combined.swift"; path = "Sources/Private/CoreAnimation/Extensions/Keyframes+combined.swift"; sourceTree = ""; }; + 99A57B66940EB146F742E55C77359AA8 /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/Features/URLEncodedFormEncoder.swift; sourceTree = ""; }; + 99A5D487DE1C7561340E93F71231A048 /* HasImageComponent+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "HasImageComponent+Kingfisher.swift"; path = "Sources/Extensions/HasImageComponent+Kingfisher.swift"; sourceTree = ""; }; + 9A0653D24FED7922043E4E7661E6A56B /* MBProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MBProgressHUD-Info.plist"; sourceTree = ""; }; + 9A0F856E93522334178410DBF24E676D /* PhotoAsset+Network.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoAsset+Network.swift"; path = "Sources/HXPHPicker/Picker/Model/PhotoAsset+Network.swift"; sourceTree = ""; }; + 9A29D87B1DD0597A8C888EE5B31EB730 /* FrameSubAck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameSubAck.swift; path = Source/FrameSubAck.swift; sourceTree = ""; }; + 9A2CE0AF51BE27F12200078A93A6C66E /* YBIBOperateBrowserProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBOperateBrowserProtocol.h; path = YBImageBrowser/Protocol/YBIBOperateBrowserProtocol.h; sourceTree = ""; }; + 9A3AB5C61F217707706D0EE32CFEA319 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; }; + 9A41343F97BF0D399ADC1E9711D86A22 /* SGScanViewConfigure.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGScanViewConfigure.m; path = SGQRCode/ScanView/SGScanViewConfigure.m; sourceTree = ""; }; + 9A45467E991A7D1E26A9A9CDD47E4EC3 /* sharpyuv_dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv_dsp.h; path = sharpyuv/sharpyuv_dsp.h; sourceTree = ""; }; + 9A58F10CA935A050138ADEC85D511540 /* DateTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateTransform.swift; path = Sources/DateTransform.swift; sourceTree = ""; }; + 9A60D3136A08EC0C773382CEE7C49B14 /* NavigatorDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigatorDelegate.swift; path = Sources/URLNavigator/NavigatorDelegate.swift; sourceTree = ""; }; + 9A6F311555A73BB737010366B0CDEEDE /* ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist"; sourceTree = ""; }; + 9A82381F95A0B1C9085F0DC4DCDEE26B /* demux.c */ = {isa = PBXFileReference; includeInIndex = 1; name = demux.c; path = src/demux/demux.c; sourceTree = ""; }; + 9ABFFC2EF84C27BEA54CF8DD10F38B28 /* SGTorch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGTorch.m; path = SGQRCode/Torch/SGTorch.m; sourceTree = ""; }; + 9AD40EA1CF3BDED2A363F76D9B6911F2 /* upsampling.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling.c; path = src/dsp/upsampling.c; sourceTree = ""; }; + 9B26973B3CBD32429FC5B8671E715F12 /* HXPHPicker-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "HXPHPicker-prefix.pch"; sourceTree = ""; }; + 9B46A5D19E97AE6984F675B88762077E /* NetworkLoggerPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkLoggerPlugin.swift; path = Sources/Moya/Plugins/NetworkLoggerPlugin.swift; sourceTree = ""; }; + 9BA3D3A4D6E0BDD3AE5425664D8746EE /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = ""; }; + 9BC67518006B19DC55658D20E4359695 /* LayerImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerImageProvider.swift; path = Sources/Private/MainThread/LayerContainers/Utility/LayerImageProvider.swift; sourceTree = ""; }; + 9C3603E52BD81ED0DFEA15C65199D20C /* DotLottieAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieAnimation.swift; path = Sources/Private/Model/DotLottie/DotLottieAnimation.swift; sourceTree = ""; }; + 9C419E6E04DBFE2E3EFEB4AD94165FA9 /* CALayer+addAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+addAnimation.swift"; path = "Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift"; sourceTree = ""; }; + 9C4D23E4B97E5589131E460C9DAE5009 /* _RX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RX.m; path = RxCocoa/Runtime/_RX.m; sourceTree = ""; }; + 9C4D61F01CE840F45DF6982F78033302 /* Repeat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repeat.swift; path = RxSwift/Observables/Repeat.swift; sourceTree = ""; }; + 9C5F06A8E927D1486C8E2BE4C3CEF5B2 /* SGSoundEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGSoundEffect.h; path = SGQRCode/SoundEffect/SGSoundEffect.h; sourceTree = ""; }; + 9C7EEF7FD983ACD669C21EC0404713ED /* LottieAnimationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationView.swift; path = Sources/Public/Animation/LottieAnimationView.swift; sourceTree = ""; }; + 9C881CC130CEB757F00BBCE825670589 /* PhotoPreviewSelectedViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewSelectedViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPreviewSelectedViewCell.swift; sourceTree = ""; }; + 9C9D1DC3A8237ADFBC76223E5E1932BB /* TagListView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TagListView-dummy.m"; sourceTree = ""; }; + 9CD16763011689F5599A9449C0100867 /* IQScrollViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQScrollViewConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQScrollViewConfiguration.swift; sourceTree = ""; }; + 9CF9B4F936F9017EE6FE6902E94AAAEC /* Collection+Diff.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Collection+Diff.swift"; path = "Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/Collection+Diff.swift"; sourceTree = ""; }; + 9D185FE7B7678520832236B38A00E369 /* RenderNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RenderNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Protocols/RenderNode.swift; sourceTree = ""; }; + 9D230BB4BBC629C4AD808FB6819CFE89 /* IQBarButtonItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItemConfiguration.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQBarButtonItemConfiguration.swift; sourceTree = ""; }; + 9D2C92E71F92957D93A3E7A0F3E1C393 /* muxread.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxread.c; path = src/mux/muxread.c; sourceTree = ""; }; + 9D3F97F68C76452A9B412F4F0553D559 /* TagListView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = TagListView.release.xcconfig; sourceTree = ""; }; + 9D5338B11E142296D30DC453C617E8F4 /* CropConfirmViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CropConfirmViewConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/CropConfirmViewConfiguration.swift; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9DD1638A7E851D89BA5A60B16C3122AA /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Photos.framework; sourceTree = DEVELOPER_DIR; }; - 9E1546130068EEAD3189EC41869D6F14 /* UIImage+Transform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Transform.m"; path = "SDWebImage/Core/UIImage+Transform.m"; sourceTree = ""; }; - 9E3C9772593EC36053DCE3AD21CDA16D /* StrokeNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StrokeNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift; sourceTree = ""; }; - 9E4F572F034A1B90543745C038E95B6A /* ObjectMapper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ObjectMapper-prefix.pch"; sourceTree = ""; }; - 9E519B15CCB12F735F0129579FF286E3 /* DelegateProxyType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelegateProxyType.swift; path = RxCocoa/Common/DelegateProxyType.swift; sourceTree = ""; }; - 9E8AF1331E01EDB4F004F4129550A574 /* DotLottieCacheProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieCacheProvider.swift; path = Sources/Public/DotLottie/Cache/DotLottieCacheProvider.swift; sourceTree = ""; }; - 9EB164560DE3677F1DA177D4DC5B5447 /* NSObject+Rx+KVORepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx+KVORepresentable.swift"; path = "RxCocoa/Foundation/NSObject+Rx+KVORepresentable.swift"; sourceTree = ""; }; - 9EC2C9B5255FD1BD8E427E9A7A199580 /* LottieSwitch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieSwitch.swift; path = Sources/Public/Controls/LottieSwitch.swift; sourceTree = ""; }; - 9F09F941B55860CCB56708CB4F1FDA5F /* bit_reader_inl_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_reader_inl_utils.h; path = src/utils/bit_reader_inl_utils.h; sourceTree = ""; }; - 9F2A1EB79C2BE2EA918A66FEF777D04D /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Sources/ConstraintConfig.swift; sourceTree = ""; }; - 9F2F63F0B03B6BFA25E6C141689BD633 /* AssetManager+ImageData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+ImageData.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+ImageData.swift"; sourceTree = ""; }; - 9F376FE855AF22F30019CB36BAA7A1E8 /* filters.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters.c; path = src/dsp/filters.c; sourceTree = ""; }; - 9F4DD82FA503C00D1869D0680B76A86C /* LottieAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimation.swift; path = Sources/Public/Animation/LottieAnimation.swift; sourceTree = ""; }; - 9F63ADBEB6601A1586154D53C923B5D4 /* quant.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quant.h; path = src/dsp/quant.h; sourceTree = ""; }; - 9F7376569D3C3F89560606F792EFCAE3 /* SDImageCachesManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManager.h; path = SDWebImage/Core/SDImageCachesManager.h; sourceTree = ""; }; - 9F8AF2C5A4BBDB77E38E045AFFEBF172 /* SGQRCode.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SGQRCode.debug.xcconfig; sourceTree = ""; }; - 9FB522F4C7C47BA527C5E509E78B4350 /* demux.c */ = {isa = PBXFileReference; includeInIndex = 1; name = demux.c; path = src/demux/demux.c; sourceTree = ""; }; - 9FBB552DBF10EEAB3DC15F5C4727EF3D /* Switch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Switch.swift; path = RxSwift/Observables/Switch.swift; sourceTree = ""; }; - 9FC8B0D7C9DF7F1E28698FF3993A1672 /* VideoEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorViewController.swift; path = Sources/HXPHPicker/Editor/Controller/VideoEditorViewController.swift; sourceTree = ""; }; - 9FE22C52F3EFE4A4578ABF3C37C14741 /* YBIBCollectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBCollectionView.h; path = YBImageBrowser/Base/YBIBCollectionView.h; sourceTree = ""; }; - A01BB5837F881970519254C3F1F0B175 /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/Features/EventMonitor.swift; sourceTree = ""; }; - A0A2D3C3FF94DFA55B6240A4E3F7EF71 /* cascade.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = cascade.swift; path = Source/RxSwift/cascade.swift; sourceTree = ""; }; - A0B615FCCC02CD636E8D81ADC0F6C65A /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Sources/UILayoutSupport+Extensions.swift"; sourceTree = ""; }; - A10D88129CFDA405482F878874F048F1 /* SGScanViewConfigure.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGScanViewConfigure.m; path = SGQRCode/ScanView/SGScanViewConfigure.m; sourceTree = ""; }; - A120227F9F4B625771EBD96F015D8008 /* RxSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxSwift-Info.plist"; sourceTree = ""; }; - A12071B705466F16A1CF14EA2B9CDFFC /* AMapSearch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapSearch.debug.xcconfig; sourceTree = ""; }; - A124C9F3769D0065B20BB49855542106 /* CombineLatest+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+arity.swift"; path = "RxSwift/Observables/CombineLatest+arity.swift"; sourceTree = ""; }; - A132C1553C8DE2206B733C062A0E2D83 /* EpoxyModelProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyModelProperty.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelProperty.swift; sourceTree = ""; }; - A1603778C0EE3DA3ECCBEBA945D3B01F /* OIMFileElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMFileElem.m; path = OpenIMSDK/Model/OIMFileElem.m; sourceTree = ""; }; - A1688BEE8D8DD531A4FF9FB8214FE03E /* MAMapVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapVersion.h; path = MAMapKit.framework/Headers/MAMapVersion.h; sourceTree = ""; }; + 9D95D57DFF072259B98628A58665039F /* UIView+IQKeyboardManagerExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardManagerExtension.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIView+IQKeyboardManagerExtension.swift"; sourceTree = ""; }; + 9DAD00461B83C200FA915645CDB0E2C6 /* DefaultsKey.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKey.swift; path = Sources/DefaultsKey.swift; sourceTree = ""; }; + 9DAFE69F3F304AC496F03B746D4F05B7 /* KingfisherWebP-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "KingfisherWebP-Info.plist"; sourceTree = ""; }; + 9DCED5C705FE63535A256328BB0E994A /* NSObject+Rx+KVORepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx+KVORepresentable.swift"; path = "RxCocoa/Foundation/NSObject+Rx+KVORepresentable.swift"; sourceTree = ""; }; + 9DEB529B2C777502325ABEA4D9CFF4A9 /* MAArcRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAArcRenderer.h; path = MAMapKit.framework/Headers/MAArcRenderer.h; sourceTree = ""; }; + 9E09E8D0DDB0127275867B6DB66EAC96 /* SolidLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidLayer.swift; path = Sources/Private/CoreAnimation/Layers/SolidLayer.swift; sourceTree = ""; }; + 9E8B5C0110F4223411274CE6A011F364 /* SDCallbackQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDCallbackQueue.h; path = SDWebImage/Core/SDCallbackQueue.h; sourceTree = ""; }; + 9EC2A9DDAB7BEE8FDC3EACBC3C4C1D1E /* MAPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolyline.h; path = MAMapKit.framework/Headers/MAPolyline.h; sourceTree = ""; }; + 9ED7FC1A30A3ECB192352380A7A874A3 /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/General/Kingfisher.swift; sourceTree = ""; }; + 9EDCD3AB67527112F13D7113124CC91D /* URLNavigator.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = URLNavigator.modulemap; sourceTree = ""; }; + 9EE62403F3E6512DC6CF16E7A5F5C68E /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; + 9EEC0659E54BABA5CEDC5C8D6F2B82C0 /* TAPageControl.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TAPageControl.h; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAPageControl.h; sourceTree = ""; }; + 9F98F9817B280E58C08FC6A1993D49FA /* MarqueeLabel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MarqueeLabel.swift; path = Sources/MarqueeLabel.swift; sourceTree = ""; }; + 9FF9DE9D91C58B32C61967930F1A4A42 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = ""; }; + A00EA2624DD142E40DE0ADF47D2A0AB3 /* token_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = token_enc.c; path = src/enc/token_enc.c; sourceTree = ""; }; + A01FFB1189079876A3BE427E2D58D934 /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; + A0219DE9E829EB25509BB1E2C6F67F4C /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = ""; }; + A0526BE677EE80BEB8B8F270EBF0711B /* MAMultiTexturePolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiTexturePolylineRenderer.h; path = MAMapKit.framework/Headers/MAMultiTexturePolylineRenderer.h; sourceTree = ""; }; + A05278B9761105500CD055B4C550BDC2 /* CombineLatest+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+Collection.swift"; path = "RxSwift/Observables/CombineLatest+Collection.swift"; sourceTree = ""; }; + A06B171ACB56AD93E1BD1EBEF5864588 /* lossless_enc_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_msa.c; path = src/dsp/lossless_enc_msa.c; sourceTree = ""; }; + A06D2EBC68A9A66C6DECE0BA1D733FA3 /* Entry+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+ZIP64.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Entry+ZIP64.swift"; sourceTree = ""; }; + A0754BE3F77591C44FFAB586747F773C /* SDAnimatedImageRep.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageRep.m; path = SDWebImage/Core/SDAnimatedImageRep.m; sourceTree = ""; }; + A0A7A20E96488707B469EF7CBE0AEF37 /* String+Parser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Parser.swift"; path = "Sources/SwiftDate/Foundation+Extras/String+Parser.swift"; sourceTree = ""; }; + A0BC8E970B9984DFA602426BCBC66226 /* String+SHA256.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+SHA256.swift"; path = "Sources/Utility/String+SHA256.swift"; sourceTree = ""; }; + A0CBE9B053F9FC8D9F31828C0584A37D /* EditorToolViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorToolViewCell.swift; path = Sources/HXPHPicker/Editor/View/EditorToolViewCell.swift; sourceTree = ""; }; + A0D118785D957509F43768C5F4E0C6CA /* YYImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "YYImage-Info.plist"; sourceTree = ""; }; + A0DB6C7F3D7CF810502FB403BE2D852D /* PhotoPickerBottomView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerBottomView.swift; path = Sources/HXPHPicker/Picker/View/PhotoPickerBottomView.swift; sourceTree = ""; }; + A0E60F83DE43BBBF924BEF72B94D7D88 /* IQKeyboardToolbarManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardToolbarManager-dummy.m"; sourceTree = ""; }; + A0EDB4D93155CAEB727C0AB45713F6D5 /* SetBehaviorsProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SetBehaviorsProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/SetBehaviorsProviding.swift; sourceTree = ""; }; + A10CD0E8D82FD587766DE98C4C52DA77 /* YBImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBImage.m; path = YBImageBrowser/Image/YBImage.m; sourceTree = ""; }; + A11B776E936D8D46C6A528A1CE11FAC3 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = RxRelay/Utils.swift; sourceTree = ""; }; + A1249BF2812DDEF7380FB54875C83716 /* Navigator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Navigator.swift; path = Sources/URLNavigator/Navigator.swift; sourceTree = ""; }; + A1458B5A431F562E12F39408D20AACD5 /* MAMultiPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPolyline.h; path = MAMapKit.framework/Headers/MAMultiPolyline.h; sourceTree = ""; }; + A166E25A3C3451C37A3AB8D76235D632 /* DotLottieConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieConfiguration.swift; path = Sources/Public/DotLottie/DotLottieConfiguration.swift; sourceTree = ""; }; A16FD016E18EACCF6B23F219F2E236FE /* IQKeyboardToolbar-IQKeyboardToolbar */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQKeyboardToolbar-IQKeyboardToolbar"; path = IQKeyboardToolbar.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - A18CEDAEF818C6AB48438A2230736E32 /* SDMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDMemoryCache.h; path = SDWebImage/Core/SDMemoryCache.h; sourceTree = ""; }; - A1A4FD150E8969054E33120D391A51C8 /* lossless_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_mips_dsp_r2.c; path = src/dsp/lossless_mips_dsp_r2.c; sourceTree = ""; }; - A22DC8E59A81000BBA63235416889042 /* IQTextInputView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputView.swift; path = IQKeyboardCore/Classes/IQTextInputView.swift; sourceTree = ""; }; - A22E4F69C2B5364D39225FE8A26D6D52 /* IQKeyboardCore-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardCore-Info.plist"; sourceTree = ""; }; - A2333B9AC870862E2D29C8F94BF1F89A /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoNormalFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m; sourceTree = ""; }; - A23D984530015E18E2F4B38BB459C1FD /* IQKeyboardAppearanceManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardAppearanceManager+Internal.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceManager+Internal.swift"; sourceTree = ""; }; - A23F8B3C6F7CCF478BCF4BAE56BD4DF9 /* quant_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_dec.c; path = src/dec/quant_dec.c; sourceTree = ""; }; - A2739ABA43794B9409EE2F3DDA37D1A7 /* DotLottieImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieImageProvider.swift; path = Sources/Private/Model/DotLottie/DotLottieImageProvider.swift; sourceTree = ""; }; - A28212BF67021DCC567895F90F42F3B3 /* RxTextStorageDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTextStorageDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTextStorageDelegateProxy.swift; sourceTree = ""; }; - A2AAA811CAAF000CD5110DE8E1FF8B85 /* RxPickerViewAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewAdapter.swift; path = RxCocoa/iOS/DataSources/RxPickerViewAdapter.swift; sourceTree = ""; }; - A2BDBC359068D4ABAE82394D74FB8523 /* IQTextView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQTextView.modulemap; sourceTree = ""; }; - A2C6981FB90E9DB2786F343976922ECA /* OIMManager+Login.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Login.m"; path = "OpenIMSDK/Interface/OIMManager+Login.m"; sourceTree = ""; }; - A2CE242AF1F10BE3EF9A73779447424E /* YBImageBrowserDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBImageBrowserDelegate.h; path = YBImageBrowser/Protocol/YBImageBrowserDelegate.h; sourceTree = ""; }; - A2E05EB2A16264EE344D5C57B626E0E7 /* IQKeyboardToolbarManager+Toolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Toolbar.swift"; path = "IQKeyboardToolbarManager/Classes/Toolbar/IQKeyboardToolbarManager+Toolbar.swift"; sourceTree = ""; }; - A2E935C69715E7BEAA6E8BB816DE0032 /* RequestTaskMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTaskMap.swift; path = Source/Core/RequestTaskMap.swift; sourceTree = ""; }; - A30602900EAAC1E60D74FCEEB0960916 /* AMapServices.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapServices.h; path = AMapFoundationKit.framework/Headers/AMapServices.h; sourceTree = ""; }; - A30F967339486C931FF72A91349018AC /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQBarButtonItem.swift; sourceTree = ""; }; - A34655F0A811AB3A87F04E2474CB58B5 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQTextInputViewNotification/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; - A35504DC759D1D6D581B34A9591AB9F4 /* YBIBImageCache+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBImageCache+Internal.h"; path = "YBImageBrowser/Image/YBIBImageCache+Internal.h"; sourceTree = ""; }; - A3789559DC432ABA817A4958988A7DE5 /* TagView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagView.swift; path = TagListView/TagView.swift; sourceTree = ""; }; - A3AF198343EDA479FAEFF07AB3155C1A /* OIMCallbacker+Closure.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMCallbacker+Closure.m"; path = "OpenIMSDK/Callbacker/OIMCallbacker+Closure.m"; sourceTree = ""; }; - A3ED3DE1B23ED24A4AD3B102497F472B /* SetContentProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SetContentProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/SetContentProviding.swift; sourceTree = ""; }; - A3F2F6B8CB2B809BBF697237FB094086 /* DDTTYLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDTTYLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDTTYLogger.h; sourceTree = ""; }; - A41EF41F02941532EE13C414E23DEEDD /* PhotoManager+Download.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoManager+Download.swift"; path = "Sources/HXPHPicker/Core/Util/PhotoManager+Download.swift"; sourceTree = ""; }; - A453B6D8197404FC1374D7F63F8B640E /* MJPropertyType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJPropertyType.h; path = MJExtension/MJPropertyType.h; sourceTree = ""; }; - A468180CC8FED21C9CBCF714A602BA70 /* TimePeriodCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodCollection.swift; path = Sources/SwiftDate/TimePeriod/Groups/TimePeriodCollection.swift; sourceTree = ""; }; - A46B954BDFF657B2EB27B561A75FD56B /* MAMultiPointOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPointOverlayRenderer.h; path = MAMapKit.framework/Headers/MAMultiPointOverlayRenderer.h; sourceTree = ""; }; - A4BFCEEC214B513B2C016565E852579F /* MAIndoorInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAIndoorInfo.h; path = MAMapKit.framework/Headers/MAIndoorInfo.h; sourceTree = ""; }; - A5579C794B8B2149F7FF896EA599A88A /* MASViewConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASViewConstraint.h; path = Masonry/MASViewConstraint.h; sourceTree = ""; }; - A57FD2A0791CC337715FFD68EBC59025 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Sources/Moya/Response.swift; sourceTree = ""; }; - A598A01BE8C27F0423DB78EB55F82E42 /* MeasuringViewRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MeasuringViewRepresentable.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/LayoutUtilities/MeasuringViewRepresentable.swift; sourceTree = ""; }; - A59E29643218DB83EB446596CF3A4210 /* Completable+AndThen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Completable+AndThen.swift"; path = "RxSwift/Traits/PrimitiveSequence/Completable+AndThen.swift"; sourceTree = ""; }; - A5BFBD150FA1FFD5F8206A024E6D8015 /* random_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = random_utils.h; path = src/utils/random_utils.h; sourceTree = ""; }; - A5C635E55F5A6DFE07FD9D482A1443A7 /* DisposeBag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBag.swift; path = RxSwift/Disposables/DisposeBag.swift; sourceTree = ""; }; - A6169659CBED06CD788319B06F6437EF /* OIMAtElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMAtElem.h; path = OpenIMSDK/Model/OIMAtElem.h; sourceTree = ""; }; - A63CABC0DE1372702B329D3C31A8F207 /* DDOSLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDOSLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDOSLogger.h; sourceTree = ""; }; - A66D9F8A28B2D8B918FF71CBEC6E5BC5 /* PhotoEditorViewController+Export.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoEditorViewController+Export.swift"; path = "Sources/HXPHPicker/Editor/Controller/PhotoEditorViewController+Export.swift"; sourceTree = ""; }; - A66DF04928172288AAF39431F1258403 /* BuiltIns.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BuiltIns.swift; path = Sources/BuiltIns.swift; sourceTree = ""; }; - A67326A62BBF7678EA70AC35CB159929 /* IQTextView+Placeholderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQTextView+Placeholderable.swift"; path = "IQTextView/Classes/IQTextView+Placeholderable.swift"; sourceTree = ""; }; - A677DBA18E68A3B1473D33FD77407ADD /* SDWebImageDownloaderDecryptor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderDecryptor.h; path = SDWebImage/Core/SDWebImageDownloaderDecryptor.h; sourceTree = ""; }; - A6C5691B4B9FEB2303C898F704D97B3F /* CallbackContextEpoxyModeled.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CallbackContextEpoxyModeled.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/CallbackContextEpoxyModeled.swift; sourceTree = ""; }; - A70960A456CC7B878B6BE0A13B941DBE /* _RX.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RX.m; path = RxCocoa/Runtime/_RX.m; sourceTree = ""; }; - A70FED667384419D528193F57E48A8F1 /* Mapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Mapper.swift; path = Sources/Mapper.swift; sourceTree = ""; }; - A746BA66E73C424E8AAAA83B4F93FEBB /* SubjectType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubjectType.swift; path = RxSwift/Subjects/SubjectType.swift; sourceTree = ""; }; - A76FDED2A38259CFBEF42A7E0ADA24C1 /* SwiftyUserDefaults-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyUserDefaults-prefix.pch"; sourceTree = ""; }; - A77598EF3EBC00300D5A3F9E4B15F065 /* TextLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextLayer.swift; path = Sources/Private/CoreAnimation/Layers/TextLayer.swift; sourceTree = ""; }; - A7B95A9E68D6B1BFC0187CCA4BC88B13 /* DDLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLog.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLog.h; sourceTree = ""; }; - A7CAC3DB04F7ADB64B8499A90B77C74B /* dec_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_mips_dsp_r2.c; path = src/dsp/dec_mips_dsp_r2.c; sourceTree = ""; }; - A7CC3C827AC34942AB71C3500296EC33 /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; }; - A7D400804C9D63E6FC3EC09C0CDDD6D2 /* CompatibilityTracker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompatibilityTracker.swift; path = Sources/Private/CoreAnimation/CompatibilityTracker.swift; sourceTree = ""; }; - A7E16049507CC03B9090F2AF6AA72E29 /* YBIBScreenRotationHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBScreenRotationHandler.h; path = YBImageBrowser/Base/YBIBScreenRotationHandler.h; sourceTree = ""; }; - A7E6A17940D1B64025EF4866E44EB716 /* ImageModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageModifier.swift; path = Sources/Networking/ImageModifier.swift; sourceTree = ""; }; - A8167F7A91C1C9DD4217753A632852CD /* SDmetamacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDmetamacros.h; path = SDWebImage/Private/SDmetamacros.h; sourceTree = ""; }; - A8212076E19A3552BC329E458689B1B1 /* VideoEditorMusicAnimationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorMusicAnimationView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorMusicAnimationView.swift; sourceTree = ""; }; - A8386269616E7CE007CD245147A27BFC /* SwiftDate-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftDate-prefix.pch"; sourceTree = ""; }; - A852BD96FBC53D4DB881E0209211A72C /* NSDecimalNumberTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NSDecimalNumberTransform.swift; path = Sources/NSDecimalNumberTransform.swift; sourceTree = ""; }; - A85F7BFA6933B34EAFBDDE988DB2A8A9 /* AMap3DMap.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMap3DMap.release.xcconfig; sourceTree = ""; }; - A89C8E12857A90B1C389AB823B07BD56 /* BehaviorRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorRelay.swift; path = RxRelay/BehaviorRelay.swift; sourceTree = ""; }; - A8D92D190853671E509BAA5E005AAD97 /* PhotoPreviewSelectedView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewSelectedView.swift; path = Sources/HXPHPicker/Picker/View/PhotoPreviewSelectedView.swift; sourceTree = ""; }; + A1DA6E0CC1D2FAF481390FDF49CB9EE8 /* SGScanCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGScanCode.h; path = SGQRCode/QRCode/SGScanCode.h; sourceTree = ""; }; + A1DACC2DC8AD21EC30FE9C39863EC883 /* SDWebImageManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageManager.m; path = SDWebImage/Core/SDWebImageManager.m; sourceTree = ""; }; + A1DCF093CA16431C64ED20AF66EAB4DC /* Masonry.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Masonry.modulemap; sourceTree = ""; }; + A21AF33BAC1856A8747F2733F50DB38C /* encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = encode.h; path = src/webp/encode.h; sourceTree = ""; }; + A229AE0D21491B82D7E0DAE152DE073D /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackNormalFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m; sourceTree = ""; }; + A22F13325BAECE5E89A7635E627B97CB /* SwiftKeychainWrapper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftKeychainWrapper-dummy.m"; sourceTree = ""; }; + A233DB53169F833FF0DC8F0A5692710F /* ObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableType.swift; path = RxSwift/ObservableType.swift; sourceTree = ""; }; + A2434F3EB6290F8CE20AB41821143D16 /* cost_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_mips32.c; path = src/dsp/cost_mips32.c; sourceTree = ""; }; + A26A017981C2551A9932A411A10D8C13 /* Differentiator.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Differentiator.debug.xcconfig; sourceTree = ""; }; + A27735D73BDAF35198BF15B74CAFA479 /* AMapSearchAPI.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchAPI.h; path = AMapSearchKit.framework/Headers/AMapSearchAPI.h; sourceTree = ""; }; + A27A11E0906C1DEC75B5B18E610C9434 /* RxRelay-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxRelay-dummy.m"; sourceTree = ""; }; + A27AA83F2845140359A4DB58C644F78A /* SDCycleScrollView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDCycleScrollView.release.xcconfig; sourceTree = ""; }; + A287BBD95D2A3CE560410E6AAEFD0C82 /* thread_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = thread_utils.h; path = src/utils/thread_utils.h; sourceTree = ""; }; + A29BD49A7C76A70FC93ED9BBE634D6A2 /* backward_references_cost_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = backward_references_cost_enc.c; path = src/enc/backward_references_cost_enc.c; sourceTree = ""; }; + A2A3A2F1F37FF6F5C217BD219BA3DCFA /* filters_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_mips_dsp_r2.c; path = src/dsp/filters_mips_dsp_r2.c; sourceTree = ""; }; + A2CD2E3BBF844A6612B4784DF5C04CFA /* ImageProgressive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageProgressive.swift; path = Sources/Image/ImageProgressive.swift; sourceTree = ""; }; + A2FB51B9742FF46DD5E6F6CC65B93B6B /* SDWebImageCompat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCompat.m; path = SDWebImage/Core/SDWebImageCompat.m; sourceTree = ""; }; + A3BC31B6E58488D20D1E01F30A6E36A5 /* SDImageCacheDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheDefine.m; path = SDWebImage/Core/SDImageCacheDefine.m; sourceTree = ""; }; + A4003189831C8739B8012FBB644D89F4 /* SGQRCode-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SGQRCode-Info.plist"; sourceTree = ""; }; + A42061DFC6E2B374C142A8DB9B3289E6 /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; + A45C3161BC7648F62303036FF3B350C5 /* OIMGroupInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMGroupInfo.h; path = OpenIMSDK/Model/OIMGroupInfo.h; sourceTree = ""; }; + A462FD5A5791151FAF19DE1A2BB6CAF8 /* IQKeyboardReturnManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardReturnManager.debug.xcconfig; sourceTree = ""; }; + A4739742911C8301AAE3EF467466767F /* DotNetParserFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotNetParserFormatter.swift; path = Sources/SwiftDate/Formatters/DotNetParserFormatter.swift; sourceTree = ""; }; + A48AE4B983D1A1F6626A2B7F77DFA6B2 /* Switch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Switch.swift; path = RxSwift/Observables/Switch.swift; sourceTree = ""; }; + A49386E944B025DD42EE8A1F8EB38266 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; + A49A6F4E09E1DE49F95B7C7B5F769716 /* SDImageFrame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageFrame.h; path = SDWebImage/Core/SDImageFrame.h; sourceTree = ""; }; + A49D1842DD970A77A3B0D605617890B8 /* Editor+UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Editor+UIImage.swift"; path = "Sources/HXPHPicker/Editor/Extension/Editor+UIImage.swift"; sourceTree = ""; }; + A4A7F2883A127431D6E6E825F82B1CD1 /* SwiftDate.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftDate.debug.xcconfig; sourceTree = ""; }; + A50464F051FFAD36C579BF994F2EE62A /* Core+PHAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+PHAsset.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+PHAsset.swift"; sourceTree = ""; }; + A509ACD41593F9645F64E6E501A170B4 /* bit_writer_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_writer_utils.h; path = src/utils/bit_writer_utils.h; sourceTree = ""; }; + A564302709C6F613C097FCA7C36410B8 /* YBIBContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBContainerView.m; path = YBImageBrowser/Base/YBIBContainerView.m; sourceTree = ""; }; + A57A3781B2D11ED00B067F77C51CD911 /* UIImage+ExtendedCacheData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+ExtendedCacheData.m"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.m"; sourceTree = ""; }; + A5855B017DB303D2A1DBEC7EFDEEBEF7 /* AlipaySDK-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AlipaySDK-iOS.release.xcconfig"; sourceTree = ""; }; + A58B86B87E69679760C7B7E8604BB766 /* PhotoEditorMosaicToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorMosaicToolView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorMosaicToolView.swift; sourceTree = ""; }; + A5D91DB00869FD3D156C8E656E0146BE /* DotLottieUtils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieUtils.swift; path = Sources/Private/Model/DotLottie/DotLottieUtils.swift; sourceTree = ""; }; + A6231FD2D37A52E5BFE0B866D8EB940C /* SwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftUIView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/SwiftUIView.swift; sourceTree = ""; }; + A63D5EC5608CA5FC91E9F28422C4C1E7 /* KVORepresentable+Swift.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KVORepresentable+Swift.swift"; path = "RxCocoa/Foundation/KVORepresentable+Swift.swift"; sourceTree = ""; }; + A653B0A60B5E5A8FEC71EC7CA4A3EB5F /* AssetManager+Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+Image.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+Image.swift"; sourceTree = ""; }; + A66A31893F6C7863209C97E72EC09DF9 /* unwrap+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "unwrap+SharedSequence.swift"; path = "Source/RxCocoa/unwrap+SharedSequence.swift"; sourceTree = ""; }; + A66FBF950048189A9BC5A7C43078F25B /* SwiftyUserDefaults.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyUserDefaults.release.xcconfig; sourceTree = ""; }; + A6883A58E11528E040F55C0325D7B37F /* LayerEffect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerEffect.swift; path = Sources/Private/Model/LayerEffects/LayerEffect.swift; sourceTree = ""; }; + A6B15A87F23CED5AFFB3908396D1AD38 /* UIView+Resign.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Resign.swift"; path = "IQKeyboardManagerSwift/Resign/UIKItExtensions/UIView+Resign.swift"; sourceTree = ""; }; + A73D10EE0B3B95755803C56234B8C194 /* UITabBar+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITabBar+Rx.swift"; path = "RxCocoa/iOS/UITabBar+Rx.swift"; sourceTree = ""; }; + A74A7D2A8E145C693B70DF164CC44062 /* AMapSearchVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchVersion.h; path = AMapSearchKit.framework/Headers/AMapSearchVersion.h; sourceTree = ""; }; + A781D796BB0C79520A672AE004474165 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; }; + A7AF6E104842D1D774F95573E8ACDFC4 /* CoreAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreAnimationLayer.swift; path = Sources/Private/CoreAnimation/CoreAnimationLayer.swift; sourceTree = ""; }; + A7C8BB5332F80E96E8D6A4B4D6AA10A0 /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; + A7D52DBF5B8B5DD78B762AC31DF025DE /* KingfisherWebP.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KingfisherWebP.release.xcconfig; sourceTree = ""; }; + A7E0219D96D197D256967A214677AE6B /* UIViewControllerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewControllerType.swift; path = Sources/URLNavigator/UIViewControllerType.swift; sourceTree = ""; }; + A80EC926E501D239E1C011FDAC48CB5B /* SGQRCode-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SGQRCode-prefix.pch"; sourceTree = ""; }; + A81A9BF5594B5731597BBC2E2B350AE5 /* CocoaMQTT-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CocoaMQTT-Info.plist"; sourceTree = ""; }; + A826013E455DCB77EA899538B69425BF /* cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = src/dsp/cpu.h; sourceTree = ""; }; + A830E1FCCBFF0E3E0CB9AC490BA68B14 /* SDImageIOAnimatedCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageIOAnimatedCoder.m; path = SDWebImage/Core/SDImageIOAnimatedCoder.m; sourceTree = ""; }; + A8363BA837F7E198BFBCA2B3BCA30959 /* Archive+Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Helpers.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+Helpers.swift"; sourceTree = ""; }; + A84F997BE9F6903E8E03618EBBA3FB65 /* ImageFormat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageFormat.swift; path = Sources/Image/ImageFormat.swift; sourceTree = ""; }; + A85C1FB7E970597CDEA090223148461D /* MqttDecodeConnAck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttDecodeConnAck.swift; path = Source/MqttDecodeConnAck.swift; sourceTree = ""; }; + A89DFF6BEF600D2FD437FB469EB3876D /* lossless_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_sse41.c; path = src/dsp/lossless_sse41.c; sourceTree = ""; }; + A89F0017E752468FC04ED5B3CB8071A4 /* BooleanDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BooleanDisposable.swift; path = RxSwift/Disposables/BooleanDisposable.swift; sourceTree = ""; }; + A8BEB8AC75C51F307499646F3B4C0DF2 /* CocoaMQTTLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTLogger.swift; path = Source/CocoaMQTTLogger.swift; sourceTree = ""; }; + A8DDCF4864693C73E1125B4AF69B2DA3 /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = ""; }; + A8E0AFB41829ABCBA41B2E4A12FC1FF8 /* OIMManager+Login.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Login.h"; path = "OpenIMSDK/Interface/OIMManager+Login.h"; sourceTree = ""; }; + A8E337169F44377E81115D90C19F1BC0 /* InterpolatableExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InterpolatableExtensions.swift; path = Sources/Private/Utility/Interpolatable/InterpolatableExtensions.swift; sourceTree = ""; }; A8E950A16D00F649C54FFB30F81D7842 /* IQKeyboardManagerSwift */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardManagerSwift; path = IQKeyboardManagerSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - A8F92E2A7462A6E9C1EBE6F316F7E10B /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; - A8FE3A0CAF8782AEB054AD93A654B274 /* TagListView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "TagListView-Info.plist"; sourceTree = ""; }; - A90426A3569DFD849BCC6A1F9C5CCD8D /* SDImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCache.m; path = SDWebImage/Core/SDImageCache.m; sourceTree = ""; }; - A91F2AA5FE62815A42F8020A333595DE /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/Features/CachedResponseHandler.swift; sourceTree = ""; }; - A95AA6726D0817E43DE36A9CDFFAF8DB /* yuv.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv.c; path = src/dsp/yuv.c; sourceTree = ""; }; - A96C05B637BDA477BEE511BDBAF925FE /* _RXKVOObserver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXKVOObserver.h; path = RxCocoa/Runtime/include/_RXKVOObserver.h; sourceTree = ""; }; - A96E31FD91560DE1C982C3A2F559FB6B /* SwiftKeychainWrapper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftKeychainWrapper.release.xcconfig; sourceTree = ""; }; - A9717FEB35D2D2F9A59EC9D64C1C3CAE /* DDASLLogCapture.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogCapture.m; path = Sources/CocoaLumberjack/DDASLLogCapture.m; sourceTree = ""; }; - A9A5A6309F39C14ADCA5F233F829C0AB /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; - A9B1C90D6A160806DBC532F191101F7B /* SingleAssignmentDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SingleAssignmentDisposable.swift; path = RxSwift/Disposables/SingleAssignmentDisposable.swift; sourceTree = ""; }; - A9B48004DE11AD5F7D92BCECE9169620 /* MAOfflineProvince.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineProvince.h; path = MAMapKit.framework/Headers/MAOfflineProvince.h; sourceTree = ""; }; - A9C59615FF8BA2E341509BA2898E468F /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Source/Core/HTTPMethod.swift; sourceTree = ""; }; - A9EAC8FC1287A9C24DA5BC7D31F39F91 /* rescaler_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_mips32.c; path = src/dsp/rescaler_mips32.c; sourceTree = ""; }; - A9EB2433B6E7A927FB90C619CB9BAF2F /* config_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = config_enc.c; path = src/enc/config_enc.c; sourceTree = ""; }; - A9EC385B4E999D9713BD79006E2B9E7C /* IQTextView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextView.debug.xcconfig; sourceTree = ""; }; - AA0BB7AB446A12933B77D4C0AE7B8AA8 /* UIColorExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIColorExtension.swift; path = Sources/Public/iOS/UIColorExtension.swift; sourceTree = ""; }; - AA2009BD31AB4862C0F522D1157D1B11 /* SGQRCode-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SGQRCode-prefix.pch"; sourceTree = ""; }; - AA285ADE8A6A7FDFFE668150218D3D8C /* CurveVertex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurveVertex.swift; path = Sources/Private/Utility/Primitives/CurveVertex.swift; sourceTree = ""; }; - AA79DD3CDCB73818B02AC1D089A6D543 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = ""; }; - AAD0FAC7FA408BC1FCB711EFCEDAB743 /* IQKeyboardManagerSwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardManagerSwift.release.xcconfig; sourceTree = ""; }; - AADD4B026F6027AF572D51A25BD61D10 /* UITableView+IndexPaths.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+IndexPaths.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UITableView+IndexPaths.swift"; sourceTree = ""; }; - AAED5794D1814F1E87DB3BBCE6FBE1B2 /* MASCompositeConstraint.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MASCompositeConstraint.m; path = Masonry/MASCompositeConstraint.m; sourceTree = ""; }; - AAF22B492F23B4CFC20A5E24D1E91905 /* SDCycleScrollView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDCycleScrollView-Info.plist"; sourceTree = ""; }; - AB13A26BC6750B3E62BC905FFE398E3C /* near_lossless_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = near_lossless_enc.c; path = src/enc/near_lossless_enc.c; sourceTree = ""; }; - AB2DDA3D7CBE2D21345D27AC7AF3D8B6 /* NSData+ImageContentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSData+ImageContentType.h"; path = "SDWebImage/Core/NSData+ImageContentType.h"; sourceTree = ""; }; - AB3AF5015C0B68FB788983C3D31F518B /* UICollectionView+IndexPaths.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+IndexPaths.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UICollectionView+IndexPaths.swift"; sourceTree = ""; }; - AB53487CE53F8FB4D70D0221212EC78E /* lossless_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc.c; path = src/dsp/lossless_enc.c; sourceTree = ""; }; - AB564C754205CD3493687FA26FF26303 /* IQKeyboardReturnManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardReturnManager-prefix.pch"; sourceTree = ""; }; - AB7FA079A6480E26839E652C739D968A /* LottieAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationLayer.swift; path = Sources/Public/Animation/LottieAnimationLayer.swift; sourceTree = ""; }; - ABAA3CDFB336842D51FBF95ABD577DDB /* OIMAttachedInfoElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMAttachedInfoElem.m; path = OpenIMSDK/Model/OIMAttachedInfoElem.m; sourceTree = ""; }; - ABAA6161220738159EA6407CD6D75B1C /* SGPermission.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGPermission.h; path = SGQRCode/Permission/SGPermission.h; sourceTree = ""; }; - ABC97A3BC2FAB2610A09174860B90436 /* LottieAnimationHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationHelpers.swift; path = Sources/Public/Animation/LottieAnimationHelpers.swift; sourceTree = ""; }; - ABDDA2F98E6FF243C9EAAF78BE220BA3 /* UIView+IQKeyboardExtensionDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtensionDeprecated.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtensionDeprecated.swift"; sourceTree = ""; }; - ABDF1BFBE98F3670973FDD3336644BFE /* Repeat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Repeat.swift; path = RxSwift/Observables/Repeat.swift; sourceTree = ""; }; - AC1E1F787958CC63A2481A4849213576 /* MAPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolyline.h; path = MAMapKit.framework/Headers/MAPolyline.h; sourceTree = ""; }; - AC2AD7BD30CB7339F736B669B8A956DF /* frame_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = frame_enc.c; path = src/enc/frame_enc.c; sourceTree = ""; }; - AC3BD5DF5C448ECFA97F2D14FD13D728 /* GradientAnimations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientAnimations.swift; path = Sources/Private/CoreAnimation/Animations/GradientAnimations.swift; sourceTree = ""; }; - AC5247F475E31AF3FCDD129E145E5EA2 /* Indicator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Indicator.swift; path = Sources/Views/Indicator.swift; sourceTree = ""; }; - AC62F1FD8293CE55DC16776968CD8EFA /* LottieConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieConfiguration.swift; path = Sources/Public/Configuration/LottieConfiguration.swift; sourceTree = ""; }; - AC74A3DD06D0A473754208FC64517B43 /* Date.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Date.swift; path = Sources/SwiftDate/Date/Date.swift; sourceTree = ""; }; - AC806792CC71E85249287A955EF3507D /* Date+Compare.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Compare.swift"; path = "Sources/SwiftDate/Date/Date+Compare.swift"; sourceTree = ""; }; - AC83235E9EDBD10A36F3E1F871D63BF3 /* SwiftKeychainWrapper-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftKeychainWrapper-dummy.m"; sourceTree = ""; }; - AC86EDE9FF4EF53151A9DBC007517513 /* NSObject+MJProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJProperty.m"; path = "MJExtension/NSObject+MJProperty.m"; sourceTree = ""; }; - AC8A56E876CE12D362A2C2E78A8D3CCE /* OIMUserInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMUserInfo.m; path = OpenIMSDK/Model/OIMUserInfo.m; sourceTree = ""; }; - ACA84D9FD7A30E84D64FDD5B306DE077 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardReturnManager/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; - ACC3F849100B4177C338AEEF424E627F /* StarAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StarAnimation.swift; path = Sources/Private/CoreAnimation/Animations/StarAnimation.swift; sourceTree = ""; }; - ACC681D108A8345F492BADBED19B1FA5 /* WechatOpenSDK-XCFramework-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "WechatOpenSDK-XCFramework-xcframeworks.sh"; sourceTree = ""; }; - ACCCADC954162C87B199D3E8C5D94DA0 /* YBIBPhotoAlbumManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBPhotoAlbumManager.m; path = YBImageBrowser/Helper/YBIBPhotoAlbumManager.m; sourceTree = ""; }; - ACFDC59C4D51BAC7D448516B4133A38B /* DDLog+Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DDLog+Combine.swift"; path = "Sources/CocoaLumberjackSwift/DDLog+Combine.swift"; sourceTree = ""; }; - AD03CCC56A646093FE8F14113693E9AE /* CompositionLayersInitializer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositionLayersInitializer.swift; path = Sources/Private/MainThread/LayerContainers/Utility/CompositionLayersInitializer.swift; sourceTree = ""; }; - AD0CEA64153A7C2D5E5C9DBB44A63976 /* OpenIMSDKCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OpenIMSDKCore.release.xcconfig; sourceTree = ""; }; - AD14CB3A9622BD754B4DDE7ACDA1BA7A /* IntegerOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IntegerOperators.swift; path = Sources/IntegerOperators.swift; sourceTree = ""; }; - AD1C37483F1765480EA3F2E60B78344D /* SDCallbackQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDCallbackQueue.m; path = SDWebImage/Core/SDCallbackQueue.m; sourceTree = ""; }; - AD27972448441D5FB6107C986BEBBE74 /* AnyValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyValueProvider.swift; path = Sources/Public/DynamicProperties/AnyValueProvider.swift; sourceTree = ""; }; - AD2D1327000C70FC0BBAA01C490E011C /* lottie-ios-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-prefix.pch"; sourceTree = ""; }; - AD3691342BA64611F087DB419A91ACBB /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = ""; }; - AD3F046E6A26BC1343E61DFF8913EEBD /* SDImageAWebPCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAWebPCoder.m; path = SDWebImage/Core/SDImageAWebPCoder.m; sourceTree = ""; }; - AD4BBD0CD593005DCB8ECA0DEAF875E4 /* ObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableType.swift; path = RxSwift/ObservableType.swift; sourceTree = ""; }; - AD658EEF20E9119CE663C6D7FC68A348 /* AuthenticationChallengeResponsable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponsable.swift; path = Sources/Networking/AuthenticationChallengeResponsable.swift; sourceTree = ""; }; - AD6C858EAA13A54CA0AA44CC1CE1B01A /* SDAssociatedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAssociatedObject.h; path = SDWebImage/Private/SDAssociatedObject.h; sourceTree = ""; }; - AD9041B6DF19370EC5F993457993D52D /* EditorChartletView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorChartletView.swift; path = Sources/HXPHPicker/Editor/View/EditorChartletView.swift; sourceTree = ""; }; + A912BE71BCC6CE5C8A4741C1D8E0D65D /* ControlProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlProperty.swift; path = RxCocoa/Traits/ControlProperty.swift; sourceTree = ""; }; + A91A77B1FDA08F75874435E05D67FD40 /* SGWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGWeakProxy.h; path = SGQRCode/WeakProxy/SGWeakProxy.h; sourceTree = ""; }; + A96139C1CDAA829E1C5C99CC966F3CB0 /* NSButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSButton+Kingfisher.swift"; path = "Sources/Extensions/NSButton+Kingfisher.swift"; sourceTree = ""; }; + A9770EBDF903A431CE5AB241FCFFA29B /* SDWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWeakProxy.h; path = SDWebImage/Private/SDWeakProxy.h; sourceTree = ""; }; + A989C2079B8C5E48A3BFE36041C1D718 /* Locales.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Locales.swift; path = Sources/SwiftDate/Supports/Locales.swift; sourceTree = ""; }; + A99EBE5E9E3CAA905EC6539367F7792C /* CallbackProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CallbackProxy.h; path = OpenIMSDK/CallbackProxy/CallbackProxy.h; sourceTree = ""; }; + A9BBAC281B464444D34803B8EA62BC18 /* SDCycleScrollView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDCycleScrollView-dummy.m"; sourceTree = ""; }; + A9C7F4582926271F92F237DDB69DF485 /* partition+RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "partition+RxCocoa.swift"; path = "Source/RxCocoa/partition+RxCocoa.swift"; sourceTree = ""; }; + A9D622A57312540E1D02274F0ACCE389 /* NodePropertyMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NodePropertyMap.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift; sourceTree = ""; }; + A9F238C824DC5CABA2405329173D8675 /* YBIBVideoTopBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoTopBar.h; path = Video/YBIBVideoTopBar.h; sourceTree = ""; }; + AA7C0D3305D9B7A84E20C191529D4645 /* ResourceBundle-Alamofire-Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Alamofire-Alamofire-Info.plist"; sourceTree = ""; }; + AA7D8697DE6274197EF66543E7204F88 /* lossless.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless.c; path = src/dsp/lossless.c; sourceTree = ""; }; + AAA1925E912633702DFCEED5D168B04D /* AMapGeoFenceError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceError.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceError.h; sourceTree = ""; }; + AAA1C252AB5B246A0A86CC016441BE5E /* Scan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scan.swift; path = RxSwift/Observables/Scan.swift; sourceTree = ""; }; + AAA272F52E8ADAC35C395237086FBE2C /* IQKeyboardToolbarManager+Action.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Action.swift"; path = "IQKeyboardToolbarManager/Classes/Toolbar/IQKeyboardToolbarManager+Action.swift"; sourceTree = ""; }; + AAED09A3FF9F11B572D266C4C9AF76E7 /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift"; sourceTree = ""; }; + AB1C61EFA6F55C5182E8D76C343977AC /* WithLatestFrom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WithLatestFrom.swift; path = RxSwift/Observables/WithLatestFrom.swift; sourceTree = ""; }; + AB260D469E13128154D9E7ABE02CAFB8 /* PhotoEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorViewController.swift; path = Sources/HXPHPicker/Editor/Controller/PhotoEditorViewController.swift; sourceTree = ""; }; + AB272087ABE824979CB58F3810B9CDB8 /* Stroke.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Stroke.swift; path = Sources/Private/Model/ShapeItems/Stroke.swift; sourceTree = ""; }; + AB2DA40F1188D559D2779EB5EC0331BC /* AnimatedSwitch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedSwitch.swift; path = Sources/Public/Controls/AnimatedSwitch.swift; sourceTree = ""; }; + AB391B254D2D6498DF8E0C3EED6102BA /* DDContextFilterLogFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDContextFilterLogFormatter.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDContextFilterLogFormatter.h; sourceTree = ""; }; + AB40994AE1C02F08D2B55602420DAB57 /* AlbumViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/AlbumViewCell.swift; sourceTree = ""; }; + ABB48555987725F3F2DAF0B81D478F17 /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/Core/HTTPHeaders.swift; sourceTree = ""; }; + AC0DEEF56E149FD1D1F4844450CEFA30 /* DashPattern.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DashPattern.swift; path = Sources/Private/Model/Objects/DashPattern.swift; sourceTree = ""; }; + AC1490178B4403F12075DA020083F475 /* DelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelegateProxy.swift; path = RxCocoa/Common/DelegateProxy.swift; sourceTree = ""; }; + AC25F5250554656AB117D165FA972CC9 /* SDWebImageOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOperation.h; path = SDWebImage/Core/SDWebImageOperation.h; sourceTree = ""; }; + AC356DA22FF4E1FD88BD44E203B78566 /* ReplaySubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaySubject.swift; path = RxSwift/Subjects/ReplaySubject.swift; sourceTree = ""; }; + AC69131AF9EA014107D0800E6C683B52 /* SwiftDate-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftDate-Info.plist"; sourceTree = ""; }; + AC85375D7D20F08BF74644A806E2502A /* Core+Bundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+Bundle.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+Bundle.swift"; sourceTree = ""; }; + ACA0FD1057D4E019CF3F33E4DD4C7F55 /* MAMapCustomStyleOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapCustomStyleOptions.h; path = MAMapKit.framework/Headers/MAMapCustomStyleOptions.h; sourceTree = ""; }; + ACCF599458E42F9D6A4C0F3BE13220BF /* VirtualTimeScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeScheduler.swift; path = RxSwift/Schedulers/VirtualTimeScheduler.swift; sourceTree = ""; }; + ACD9E6D9D77A4F9B1BAA53135CC21EF6 /* URLRequest+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Alamofire.swift"; path = "Source/Extensions/URLRequest+Alamofire.swift"; sourceTree = ""; }; + ACDBB4CB21A0172744F834F4091673B4 /* YBIBImageCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageCell.m; path = YBImageBrowser/Image/YBIBImageCell.m; sourceTree = ""; }; + AD1D86B254CE47711A06BBB8609D5C1C /* UIView+SDExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+SDExtension.m"; path = "SDCycleScrollView/Lib/SDCycleScrollView/UIView+SDExtension.m"; sourceTree = ""; }; + AD34B51B09467734D0CC3DF50AAD4BDD /* DataStreamRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataStreamRequest.swift; path = Source/Core/DataStreamRequest.swift; sourceTree = ""; }; + AD78BC3B9444626883C4206C4B606F25 /* Moya+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Moya+Alamofire.swift"; path = "Sources/Moya/Moya+Alamofire.swift"; sourceTree = ""; }; + AD83DAC58E563A1D225FFBE27E953654 /* YYImage.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = YYImage.modulemap; sourceTree = ""; }; + AD86A09242BE8D4BF03B42D158E5C0D9 /* CachedImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedImageProvider.swift; path = Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift; sourceTree = ""; }; AD98CFAAF5B58CF9222F482D2618B073 /* Pods-QuickLocation */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = "Pods-QuickLocation"; path = Pods_QuickLocation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ADB41122F7EEAC1BC2E8C6BA3079508C /* YYImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYImage.m; path = YYImage/YYImage.m; sourceTree = ""; }; - ADE1736DF811673FB2909732A3F3BF40 /* IQDeepResponderContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQDeepResponderContainerView.swift; path = IQKeyboardToolbarManager/Classes/IQDeepResponderContainerView.swift; sourceTree = ""; }; - ADEB27CA669C4121E999811969AC33BB /* FloatValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FloatValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift; sourceTree = ""; }; - ADFA2645467E0829AC032303FE5EA3B0 /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; - AE2806152713FE09C2CB6AA76C33BD73 /* IQKeyboardManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Debug.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/Debug/IQKeyboardManager+Debug.swift"; sourceTree = ""; }; - AE38EB81281AAD4749C410E60DD3CDAD /* MAConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAConfig.h; path = MAMapKit.framework/Headers/MAConfig.h; sourceTree = ""; }; - AE3A29EAE2AD084E9A58744CA01CC32E /* enc_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_sse41.c; path = src/dsp/enc_sse41.c; sourceTree = ""; }; - AE5897611BC8BD2C214F2E90A0320833 /* Kingfisher-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Kingfisher-dummy.m"; sourceTree = ""; }; - AE5ABD4016BF6AACDBB92D0B961EFB06 /* ScheduledDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledDisposable.swift; path = RxSwift/Disposables/ScheduledDisposable.swift; sourceTree = ""; }; - AE7A0A006BF7EC69C5456D73B00C2B16 /* MATileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATileOverlay.h; path = MAMapKit.framework/Headers/MATileOverlay.h; sourceTree = ""; }; - AEA189D9B360430E513572847E80BFA3 /* SwiftDate-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftDate-umbrella.h"; sourceTree = ""; }; - AEA1F78F7416BA70657450BF20259B85 /* SwiftyJSON.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.release.xcconfig; sourceTree = ""; }; - AEC48A026B01DBA97EE27FE1A72019A8 /* IQKeyboardReturnManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnManager.swift; path = IQKeyboardReturnManager/Classes/IQKeyboardReturnManager.swift; sourceTree = ""; }; - AF212710FCA100E37EAE4915B943DC36 /* MAMultiPoint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPoint.h; path = MAMapKit.framework/Headers/MAMultiPoint.h; sourceTree = ""; }; - AF349643C3A63B3C5D763016F77EF7F5 /* Observable+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Bind.swift"; path = "RxCocoa/Common/Observable+Bind.swift"; sourceTree = ""; }; - AF41612EEB9F8E1B8A0A9496A63C2391 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJRefresh/PrivacyInfo.xcprivacy; sourceTree = ""; }; - AF440B48F12C86D500E4870C7336F8CE /* PhotoListCameraCellConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoListCameraCellConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PhotoListCameraCellConfiguration.swift; sourceTree = ""; }; - AF7AAD023CD959C7D04EDAEF495E42D4 /* rescaler_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_sse2.c; path = src/dsp/rescaler_sse2.c; sourceTree = ""; }; - AFCDE5AF3EB4961DEC846A4D7B35E777 /* Infallible+Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Operators.swift"; path = "RxSwift/Traits/Infallible/Infallible+Operators.swift"; sourceTree = ""; }; - B00B2714CE63029E316A682E308DACC9 /* IQKeyboardToolbarManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardToolbarManager-dummy.m"; sourceTree = ""; }; - B0141EC31CE079520632B9192FA59C41 /* Decode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Decode.swift; path = RxSwift/Observables/Decode.swift; sourceTree = ""; }; - B023E00F6097377AEE33C52783C2D1FB /* PhotoEditorFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorFilter.swift; path = Sources/HXPHPicker/Editor/Model/PhotoEditorFilter.swift; sourceTree = ""; }; - B02664CA4AF3A20B2AD925D0A1FED67D /* IQKeyboardToolbarManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbarManager.debug.xcconfig; sourceTree = ""; }; - B053BB799704A9F6F6384BBAF294DA09 /* SwiftLogLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SwiftLogLevel.h; path = Sources/CocoaLumberjackSwiftSupport/include/CocoaLumberjackSwiftSupport/SwiftLogLevel.h; sourceTree = ""; }; - B05BAD2FED8BCAA8BC346D23A2E4C934 /* BaseViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseViewController.swift; path = Sources/HXPHPicker/Core/Controller/BaseViewController.swift; sourceTree = ""; }; - B0676AB10DF7580007C901BF2C8B01B8 /* SwiftyJSON.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.debug.xcconfig; sourceTree = ""; }; - B0785BC93A1F0C4CDC04A31E0BCA48C6 /* vp8l_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = vp8l_dec.c; path = src/dec/vp8l_dec.c; sourceTree = ""; }; - B0786928B2C05998AE8F0FF54CE85D00 /* LottieURLSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieURLSession.swift; path = Sources/Public/Configuration/LottieURLSession.swift; sourceTree = ""; }; - B09F2B014F2F335A6DD1960BA5E604AF /* SGQRCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGQRCode.h; path = SGQRCode/SGQRCode.h; sourceTree = ""; }; + ADD590C801F4A52D73C98EA6ED07876F /* common_sse2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_sse2.h; path = src/dsp/common_sse2.h; sourceTree = ""; }; + ADDB1F578A79A46460968775A7A8BB7C /* DateInRegion+Compare.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Compare.swift"; path = "Sources/SwiftDate/DateInRegion/DateInRegion+Compare.swift"; sourceTree = ""; }; + ADDCBE1A39A53B0074D2F5EB3E791CCF /* Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = Sources/Differentiator/Utilities.swift; sourceTree = ""; }; + ADE23998ED27B4812995A97BEF5F323C /* vp8i_dec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8i_dec.h; path = src/dec/vp8i_dec.h; sourceTree = ""; }; + AE120212B6286301289F194C73D0175F /* TraitCollectionProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TraitCollectionProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/TraitCollectionProviding.swift; sourceTree = ""; }; + AE26DEC3493C62F248963D1C42788E9A /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/Operators.swift; sourceTree = ""; }; + AE4001EA3C74696CD653D4D456B33090 /* FromJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FromJSON.swift; path = Sources/FromJSON.swift; sourceTree = ""; }; + AE5E8976ED0958D0E88CF4130425A677 /* sharpyuv.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv.c; path = sharpyuv/sharpyuv.c; sourceTree = ""; }; + AE67D105FFA7A37148000E1CF35CB1A2 /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Sources/ConstraintConstantTarget.swift; sourceTree = ""; }; + AE7C96DF1255DC3006CBEA26F1C9BD7E /* StyleIDProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StyleIDProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/StyleIDProviding.swift; sourceTree = ""; }; + AE89F8D1916B993D275FAF4DB3647381 /* RxRelay-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxRelay-prefix.pch"; sourceTree = ""; }; + AEA62DA3B37F8C57C82A14C0101890F3 /* CurrentFileNameHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CurrentFileNameHelper.swift; path = Sources/CocoaLumberjackSwift/CurrentFileNameHelper.swift; sourceTree = ""; }; + AEB247929A37EFE26C6A805DEA433B91 /* DeniedAuthorizationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DeniedAuthorizationView.swift; path = Sources/HXPHPicker/Picker/View/DeniedAuthorizationView.swift; sourceTree = ""; }; + AED21DA327E29BB41B917FB1E341C399 /* IQKeyboardManager+Appearance_Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Appearance_Deprecated.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance_Deprecated.swift"; sourceTree = ""; }; + AEDFB3B7BB27DE01032FB09D870AD119 /* UICollectionView+IndexPaths.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+IndexPaths.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UICollectionView+IndexPaths.swift"; sourceTree = ""; }; + AF05CC8BD4D487667590A69116766F94 /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Sources/ConstraintRelatableTarget.swift; sourceTree = ""; }; + AF0B8DBB8BE630A64C34C16B1D7F8343 /* ignoreWhen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ignoreWhen.swift; path = Source/RxSwift/ignoreWhen.swift; sourceTree = ""; }; + AF1E1A17DAD75DE28EC1283BB21F7AD9 /* Binder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Binder.swift; path = RxSwift/Binder.swift; sourceTree = ""; }; + AF49723DC4972AEC4D4BF0627D0F329A /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; sourceTree = ""; }; + AF9289DFE96B0D477395C1AE2E955C29 /* ISOFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISOFormatter.swift; path = Sources/SwiftDate/Formatters/ISOFormatter.swift; sourceTree = ""; }; + AF976276672106FA581F52DF8576E905 /* libwebp.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = libwebp.modulemap; sourceTree = ""; }; + AFEDB749D90165E90B360880E2B0BF0F /* MAPolygonRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolygonRenderer.h; path = MAMapKit.framework/Headers/MAPolygonRenderer.h; sourceTree = ""; }; + B01841AD7F4C16405F1596D4FC42C0B7 /* frame_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = frame_enc.c; path = src/enc/frame_enc.c; sourceTree = ""; }; + B0191662DEAD607346CE2442458EEB17 /* IQTextView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQTextView.modulemap; sourceTree = ""; }; + B067C57685FF3EDC8CC9D9022087A8D5 /* OIMSearchParam.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSearchParam.m; path = OpenIMSDK/Model/OIMSearchParam.m; sourceTree = ""; }; + B0AB04C5B7E187EB649C48990318B217 /* SDCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDCollectionViewCell.h; path = SDCycleScrollView/Lib/SDCycleScrollView/SDCollectionViewCell.h; sourceTree = ""; }; B0B214D775196BA7CA8E17E53048A493 /* SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SDWebImage; path = SDWebImage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B0C85E19DE72AE17DD1F8E275523B4BF /* DefaultIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultIfEmpty.swift; path = RxSwift/Observables/DefaultIfEmpty.swift; sourceTree = ""; }; - B0E23FC914AC918A3812AD96D4739ED3 /* PhotoPreviewContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewContentView.swift; path = Sources/HXPHPicker/Picker/View/PhotoPreviewContentView.swift; sourceTree = ""; }; - B10210F7003D8FCDC58E9897BF8F9A7C /* YBIBCopywriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBCopywriter.m; path = YBImageBrowser/Helper/YBIBCopywriter.m; sourceTree = ""; }; - B13292BD10906E86B88551C19BEBC246 /* SDAnimatedImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImage.h; path = SDWebImage/Core/SDAnimatedImage.h; sourceTree = ""; }; - B13474C01D1C0B90896134215E5A5CEF /* AnimatableSectionModelType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatableSectionModelType.swift; path = Sources/Differentiator/AnimatableSectionModelType.swift; sourceTree = ""; }; - B15D37276FF9888DD3E00DD6F5196E38 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJRefresh.h"; path = "MJRefresh/UIScrollView+MJRefresh.h"; sourceTree = ""; }; - B194F603A90189ED3671958DAE609175 /* DispatchQueueConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DispatchQueueConfiguration.swift; path = RxSwift/Schedulers/Internal/DispatchQueueConfiguration.swift; sourceTree = ""; }; - B1B5154A7E3B2A7CADF24AE27A2BFB71 /* ValueContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ValueContainer.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueContainer.swift; sourceTree = ""; }; - B1D064A584F9C1427FDEFF411F0B5FE6 /* MAOfflineMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineMap.h; path = MAMapKit.framework/Headers/MAOfflineMap.h; sourceTree = ""; }; - B2001A2C582FBBA94AF91ADD4B9931C5 /* BezierPathRoundExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BezierPathRoundExtension.swift; path = Sources/Private/Utility/Primitives/BezierPathRoundExtension.swift; sourceTree = ""; }; - B2156C5852C3ECAFFA155D714B6C5139 /* Do.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Do.swift; path = RxSwift/Observables/Do.swift; sourceTree = ""; }; - B2377187B31347A650A1587E782382FA /* PassThroughOutputNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PassThroughOutputNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift; sourceTree = ""; }; - B239ED9649801435305F59AF6D6AE50A /* RxSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxSwift.modulemap; sourceTree = ""; }; - B23C3A2C524E46A832566B9E8F3565B5 /* OIMManager+Conversation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Conversation.m"; path = "OpenIMSDK/Interface/OIMManager+Conversation.m"; sourceTree = ""; }; - B2436D99B65B6A8D428A0B859116B860 /* ImageAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageAsset.swift; path = Sources/Private/Model/Assets/ImageAsset.swift; sourceTree = ""; }; - B244600AA2104B57BCCCA5F23E2F4613 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/RxCocoa/PrivacyInfo.xcprivacy; sourceTree = ""; }; - B256BABEEDB82B55BD4DFCE193D4745E /* not+RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "not+RxCocoa.swift"; path = "Source/RxCocoa/not+RxCocoa.swift"; sourceTree = ""; }; - B26E10D04B2569140F59199A5C55C891 /* PropertyWrappers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PropertyWrappers.swift; path = Sources/PropertyWrappers.swift; sourceTree = ""; }; - B27D930CCDFA0E100210ECA696F0A212 /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = RxSwift/Observables/CompactMap.swift; sourceTree = ""; }; - B281B08D41A8C1539780B8C2DCEDFBFB /* PickerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PickerConfiguration.swift; sourceTree = ""; }; - B281FF7A2ADCDBC7ABCD018AE61A7C48 /* TransformLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformLayer.swift; path = Sources/Private/CoreAnimation/Layers/TransformLayer.swift; sourceTree = ""; }; - B29F79281A6FD2F1AB20A45A56FF699F /* AnonymousDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnonymousDisposable.swift; path = RxSwift/Disposables/AnonymousDisposable.swift; sourceTree = ""; }; - B2AFEC94AC3BE895818CC20EF1694D57 /* YBIBInteractionProfile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBInteractionProfile.h; path = YBImageBrowser/Image/YBIBInteractionProfile.h; sourceTree = ""; }; - B2CFD3CFB14AFD520EDB9E11593AF849 /* filters_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_neon.c; path = src/dsp/filters_neon.c; sourceTree = ""; }; - B2FF70490B2E1F91F3313E405F04F864 /* YBIBImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageCache.m; path = YBImageBrowser/Image/YBIBImageCache.m; sourceTree = ""; }; - B30CA8E9E2F081102A0E466E3DBCA97C /* LocalAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocalAsset.swift; path = Sources/HXPHPicker/Picker/Model/LocalAsset.swift; sourceTree = ""; }; + B10E608E3748FA5D17E35C221637F5CB /* distinct+RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "distinct+RxCocoa.swift"; path = "Source/RxCocoa/distinct+RxCocoa.swift"; sourceTree = ""; }; + B1840F6778BA7A0E6406875B5666EA43 /* Window.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Window.swift; path = RxSwift/Observables/Window.swift; sourceTree = ""; }; + B1881949C33489CEE44FB1A8CE92D7EA /* OIMConversationInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMConversationInfo.h; path = OpenIMSDK/Model/OIMConversationInfo.h; sourceTree = ""; }; + B18F3A53A26839A8CEF0EACE96727E6B /* PhotoPickerControllerProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerControllerProtocol.swift; path = Sources/HXPHPicker/Picker/Controller/PhotoPickerControllerProtocol.swift; sourceTree = ""; }; + B19F630A272C257D405F9A149FBC4460 /* SDCycleScrollView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDCycleScrollView-prefix.pch"; sourceTree = ""; }; + B1A4FD8A8C9FBB2B4AE098AFCDEA027B /* IQTextView.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextView.debug.xcconfig; sourceTree = ""; }; + B1A66C060BA472F214129D41D55863B9 /* ObservableType+PrimitiveSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableType+PrimitiveSequence.swift"; path = "RxSwift/Traits/PrimitiveSequence/ObservableType+PrimitiveSequence.swift"; sourceTree = ""; }; + B1B69283210E0A01B746270E17822A67 /* RefCountDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RefCountDisposable.swift; path = RxSwift/Disposables/RefCountDisposable.swift; sourceTree = ""; }; + B1F10350695B3DDE24FB29DF4C930600 /* MGCDAsyncSocket.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MGCDAsyncSocket.h; path = Source/GCD/MGCDAsyncSocket.h; sourceTree = ""; }; + B212767BD106E5330DDC1032B129ABEC /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; + B22FE5811BBCC2B3F4C41290E2AA14F9 /* dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec.c; path = src/dsp/dec.c; sourceTree = ""; }; + B24AB5AFB6F42668409FB20FBF37EFE4 /* DictionaryInitializable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DictionaryInitializable.swift; path = Sources/Private/Model/DictionaryInitializable.swift; sourceTree = ""; }; + B26EFE7D0D803E3B328DE5A7C05B5F30 /* LanguageType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LanguageType.swift; path = Sources/HXPHPicker/Core/Model/LanguageType.swift; sourceTree = ""; }; + B2872DE8B11CC0C62C7F1B425BCBB585 /* AMapFoundation.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapFoundation.debug.xcconfig; sourceTree = ""; }; + B29722D6230A4E399189B5B3E153D285 /* IQKeyboardReturnManager+UITextViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnManager+UITextViewDelegate.swift"; path = "IQKeyboardReturnManager/Classes/Delegates/IQKeyboardReturnManager+UITextViewDelegate.swift"; sourceTree = ""; }; + B29CF7E5994BAA7457551E8424B43AD9 /* lottie-ios-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "lottie-ios-prefix.pch"; sourceTree = ""; }; + B29D086F596B924BFC34C5571585AB8B /* MainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MainScheduler.swift; path = RxSwift/Schedulers/MainScheduler.swift; sourceTree = ""; }; + B2DF02A1C83FCAC61CE81BF9B51677AC /* rescaler_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_msa.c; path = src/dsp/rescaler_msa.c; sourceTree = ""; }; + B2E98E412F65A94B34FCD32839C494DA /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Core/Session.swift; sourceTree = ""; }; + B2ED4E571D3FD0B525785E5C9317CE6D /* YBIBImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageCache.h; path = YBImageBrowser/Image/YBIBImageCache.h; sourceTree = ""; }; + B2FB4A7A72FEED4EEC521EBD466AF52F /* YBIBImageLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageLayout.h; path = YBImageBrowser/Image/YBIBImageLayout.h; sourceTree = ""; }; + B300794F61F87BC9AE775592D972BEE3 /* KingfisherWebP-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KingfisherWebP-umbrella.h"; sourceTree = ""; }; B313762A2C974EF09CE7FBAC374B6DFD /* HXPHPicker */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = HXPHPicker; path = HXPHPicker.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B325C9D59F8810A27BA690853116611E /* AMapURLSearchConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearchConfig.h; path = AMapFoundationKit.framework/Headers/AMapURLSearchConfig.h; sourceTree = ""; }; - B32EBE3B8C04AA6B4171868801375329 /* ElementAt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ElementAt.swift; path = RxSwift/Observables/ElementAt.swift; sourceTree = ""; }; - B379B52189FCFD6923CABBB988EE366F /* dec_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_sse41.c; path = src/dsp/dec_sse41.c; sourceTree = ""; }; - B37A3310A4C1CE6AF8477A9EDAF2E4A6 /* ShapeTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeTransform.swift; path = Sources/Private/Model/ShapeItems/ShapeTransform.swift; sourceTree = ""; }; - B37C4EA7F5ED5F46E43C8DB7203FFA1E /* TextDocument.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextDocument.swift; path = Sources/Private/Model/Text/TextDocument.swift; sourceTree = ""; }; - B403F5A8513C8A0A4EEC0650F17063FB /* SchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SchedulerType.swift; path = RxSwift/SchedulerType.swift; sourceTree = ""; }; - B40DB95A74207D02BC12B70085297924 /* SwiftKeychainWrapper.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftKeychainWrapper.modulemap; sourceTree = ""; }; - B4181173D600C81E639DF5A03E52AEA2 /* random_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = random_utils.c; path = src/utils/random_utils.c; sourceTree = ""; }; - B459F7B57FBA9C6D23791683C7E47BB8 /* MAHeatMapVectorGridOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorGridOverlayRenderer.h; path = MAMapKit.framework/Headers/MAHeatMapVectorGridOverlayRenderer.h; sourceTree = ""; }; - B47068467C61A7C35C481F7855A87237 /* Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Map.swift; path = Sources/Map.swift; sourceTree = ""; }; - B48EB763FE80E2BD8D9862A3C005F9FC /* IQKeyboardAppearanceConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardAppearanceConfiguration.swift; path = IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceConfiguration.swift; sourceTree = ""; }; - B496E0B79F00C67F9FFBDAA29BD68B37 /* Star.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Star.swift; path = Sources/Private/Model/ShapeItems/Star.swift; sourceTree = ""; }; + B335E945CD78406784CCA803F62F16F3 /* NSString+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MJExtension.m"; path = "MJExtension/NSString+MJExtension.m"; sourceTree = ""; }; + B33EEB175BF64F2AE39B373015729BB3 /* UITableView+IndexPaths.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+IndexPaths.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UITableView+IndexPaths.swift"; sourceTree = ""; }; + B34D8164E363688D35D07DC9EFA7ECDF /* YBImageBrowserDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBImageBrowserDelegate.h; path = YBImageBrowser/Protocol/YBImageBrowserDelegate.h; sourceTree = ""; }; + B3514A7FBBF4EB30D7EC248635A87A74 /* FloatingPointType+IdentifiableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FloatingPointType+IdentifiableType.swift"; path = "Sources/RxDataSources/FloatingPointType+IdentifiableType.swift"; sourceTree = ""; }; + B35298093BE07EC18C02E752D449371D /* FrameConnect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FrameConnect.swift; path = Source/FrameConnect.swift; sourceTree = ""; }; + B35DAB47F413C69F7A5ACA58DFE60344 /* RoundedCornersNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RoundedCornersNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/ModifierNodes/RoundedCornersNode.swift; sourceTree = ""; }; + B36D5FDE715BA934BD34F8786C8DA5A5 /* AnimationKeypath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationKeypath.swift; path = Sources/Public/DynamicProperties/AnimationKeypath.swift; sourceTree = ""; }; + B37E5F666720987BD19B13495B1D2AEC /* BezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BezierPath.swift; path = Sources/Private/Utility/Primitives/BezierPath.swift; sourceTree = ""; }; + B39413E51791A04479D1A4F3B3575E2E /* PickerInteractiveTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInteractiveTransition.swift; path = Sources/HXPHPicker/Picker/Transition/PickerInteractiveTransition.swift; sourceTree = ""; }; + B39A92039C1C6E5A539881A3C30A3EFB /* Runtime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Runtime.swift; path = Sources/Utility/Runtime.swift; sourceTree = ""; }; + B3C89B6D5952E42BDB087357BEDAAA88 /* CredentialsPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CredentialsPlugin.swift; path = Sources/Moya/Plugins/CredentialsPlugin.swift; sourceTree = ""; }; + B3E7BD37B3CED58C99075C4CAF81FBAA /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQTextInputViewNotification/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; + B402B8425EBB730BFC58AEB36CC52226 /* TextAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAnimator.swift; path = Sources/Private/Model/Text/TextAnimator.swift; sourceTree = ""; }; + B413FF66AC5CD323A97820A94E4B199D /* MAHeatMapVectorGridOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorGridOverlay.h; path = MAMapKit.framework/Headers/MAHeatMapVectorGridOverlay.h; sourceTree = ""; }; + B473F4F496BA450835903D12F8556484 /* YYImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYImage-prefix.pch"; sourceTree = ""; }; + B4781B29919C35D2A949B67A8CA17D3F /* YBImageBrowser-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YBImageBrowser-dummy.m"; sourceTree = ""; }; + B479A2DD7E7DF27106FC6E8B4BCC9594 /* RxRelay.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxRelay.release.xcconfig; sourceTree = ""; }; + B4A3C63C58D795A774EE240C747B81E6 /* ConcurrentAtomic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentAtomic.swift; path = Source/utilities/ConcurrentAtomic.swift; sourceTree = ""; }; + B4A6881CF86D0AD130F065B392BA79E6 /* Resource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Resource.swift; path = Sources/General/ImageSource/Resource.swift; sourceTree = ""; }; B4B1A58096F15199A14069C5D6AA1C99 /* IQKeyboardToolbar */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardToolbar; path = IQKeyboardToolbar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B4B1CC87B374C42556BACEDB70E5FEFA /* TagListView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "TagListView-dummy.m"; sourceTree = ""; }; - B4C026C1C0C1FF7FEE5FF1768B7C1F9D /* ISOFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISOFormatter.swift; path = Sources/SwiftDate/Formatters/ISOFormatter.swift; sourceTree = ""; }; - B4C4498E7B172BF948777253F5FFCC9A /* PhotoPanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPanGestureRecognizer.swift; path = Sources/HXPHPicker/Core/Model/PhotoPanGestureRecognizer.swift; sourceTree = ""; }; - B4E269F1764BE1BC501E09F81012012C /* ShapeLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeLayer.swift; path = Sources/Private/CoreAnimation/Layers/ShapeLayer.swift; sourceTree = ""; }; - B4EE7A0CB2B38A64ACC0428F57AEC7E8 /* lossless_enc_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_mips32.c; path = src/dsp/lossless_enc_mips32.c; sourceTree = ""; }; - B5190657508F7147ACBE8B04917D52D6 /* LRUCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LRUCache.swift; path = Sources/Private/EmbeddedLibraries/LRUCache/LRUCache.swift; sourceTree = ""; }; - B531F280DBAEF942F4FE6A28535EBE76 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardToolbarManager/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; - B538CBD104D8A06AE7A78D4BE98E50CE /* RxDataSources.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxDataSources.debug.xcconfig; sourceTree = ""; }; - B5400BB1D506451A1F627BEE91353F39 /* IQKeyboardManager+Resign_Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Resign_Deprecated.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardManager+Resign_Deprecated.swift"; sourceTree = ""; }; - B552EFCDA8BC74439CF19FF88D4BA03C /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; - B555B1099D99D8615619FD3085B9D500 /* Popover-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Popover-dummy.m"; sourceTree = ""; }; - B56ACCB20DA9D768C32CE92ADE5257AB /* YBImageBrowser.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YBImageBrowser.release.xcconfig; sourceTree = ""; }; - B5A37D6C6DD50F2C36D62037BC7142EC /* Differentiator-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Differentiator-umbrella.h"; sourceTree = ""; }; - B5C77BBEF52E60A948A676A9BDB60109 /* UIApplication+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIApplication+Rx.swift"; path = "RxCocoa/iOS/UIApplication+Rx.swift"; sourceTree = ""; }; - B60F33DE3FA740B4B9EE0AD8B0619BC0 /* DotNetParserFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotNetParserFormatter.swift; path = Sources/SwiftDate/Formatters/DotNetParserFormatter.swift; sourceTree = ""; }; - B613575929F9CDC08E3D012506899530 /* Completable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Completable.swift; path = RxSwift/Traits/PrimitiveSequence/Completable.swift; sourceTree = ""; }; - B620E23545E5CA00BFEFA93D97FBF1BE /* RxRelay-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxRelay-prefix.pch"; sourceTree = ""; }; - B6641FA3ACADA3576F1D309E21FC9447 /* ToArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToArray.swift; path = RxSwift/Observables/ToArray.swift; sourceTree = ""; }; - B6728F00D1736A5EA82B7A41A3FE632D /* URLNavigator.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = URLNavigator.modulemap; sourceTree = ""; }; - B68BC94B42D3E5F9AD397EA16BE5DD3A /* MJRefreshTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshTrailer.m; path = MJRefresh/Base/MJRefreshTrailer.m; sourceTree = ""; }; - B68EA6BB85F8C760488A50BDCC241910 /* filters_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_utils.c; path = src/utils/filters_utils.c; sourceTree = ""; }; - B6C2FBB7FA150DD8D8F445CC781BF20D /* CompoundBezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompoundBezierPath.swift; path = Sources/Private/Utility/Primitives/CompoundBezierPath.swift; sourceTree = ""; }; - B6FF27B4385AF3373CEC3201BDC261F2 /* EditorStickerItemView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerItemView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerItemView.swift; sourceTree = ""; }; - B702621E70E249E80F3885815B6D43E0 /* CompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/CompositionLayer.swift; sourceTree = ""; }; - B707AC802004219EE1A38C0A808B3868 /* Popover.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Popover.release.xcconfig; sourceTree = ""; }; + B4CDE77BD401C132B20942F8B3CA92E7 /* ControlEvent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlEvent.swift; path = RxCocoa/Traits/ControlEvent.swift; sourceTree = ""; }; + B50687CF3F684AA051CA00760DB2F127 /* Differentiator-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Differentiator-prefix.pch"; sourceTree = ""; }; + B50D229B975056B637CE2A13B0263B07 /* ColorExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorExtension.swift; path = Sources/Private/Utility/Primitives/ColorExtension.swift; sourceTree = ""; }; + B5546FF2CD7193A96888BDF496E32BAB /* CocoaLumberjack-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaLumberjack-prefix.pch"; sourceTree = ""; }; + B575818A4B7E646C5F142DB98D4CD278 /* PreviewVideoViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewVideoViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PreviewVideoViewCell.swift; sourceTree = ""; }; + B576EDF7A86415CCC3E2A8821457526B /* AccessTokenPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccessTokenPlugin.swift; path = Sources/Moya/Plugins/AccessTokenPlugin.swift; sourceTree = ""; }; + B581780208A80C4FB8291D723C00EFDB /* dec_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_sse2.c; path = src/dsp/dec_sse2.c; sourceTree = ""; }; + B583A8D3B15E63BC12FB32D1F96844FC /* TargetType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TargetType.swift; path = Sources/Moya/TargetType.swift; sourceTree = ""; }; + B58670AC2A6C221479AB2BFF0856B066 /* IQTextInputViewNotification.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewNotification.swift; path = IQTextInputViewNotification/Classes/IQTextInputViewNotification.swift; sourceTree = ""; }; + B5D2D3AE65A187B8FEF27AEA68252A80 /* MAOfflineItemMunicipality.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemMunicipality.h; path = MAMapKit.framework/Headers/MAOfflineItemMunicipality.h; sourceTree = ""; }; + B5EDE4C54CCCF208B2D71DCB9FDB21C7 /* Keyframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Keyframe.swift; path = Sources/Public/Keyframes/Keyframe.swift; sourceTree = ""; }; + B652E29752B7E03ECA2EB9B62D3DB63A /* vp8li_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8li_enc.h; path = src/enc/vp8li_enc.h; sourceTree = ""; }; + B68CF9A7198B8A74CD8CB8FDCDC2B8BC /* IQKeyboardManagerSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardManagerSwift-Info.plist"; sourceTree = ""; }; + B6DF2C5453F49CAFE051B8FD6D17FCA4 /* Archive+Progress.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Progress.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+Progress.swift"; sourceTree = ""; }; + B710990BD7BFF0A6D6E01A535C8AA8D1 /* SDImageTransformer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageTransformer.h; path = SDWebImage/Core/SDImageTransformer.h; sourceTree = ""; }; B725F96A98CB22A783C643BB02401232 /* SGQRCode */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SGQRCode; path = SGQRCode.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B72A389B0E6A6DD2F3D61F4DC7F84D83 /* Popover */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Popover; path = Popover.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B73102B73B599D035D7EDCACE5B41029 /* ResourceBundle-IQTextView-IQTextView-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQTextView-IQTextView-Info.plist"; sourceTree = ""; }; + B72E217B485757193D8084079600E909 /* EditorStickerTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerTextView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerTextView.swift; sourceTree = ""; }; + B75E188BCF351E3AFA06D9B5C90A1DD1 /* Moya-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Moya-Info.plist"; sourceTree = ""; }; + B75F8EA27F5A661B3123631BB2649458 /* OperationQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "OperationQueue+Alamofire.swift"; path = "Source/Extensions/OperationQueue+Alamofire.swift"; sourceTree = ""; }; + B76508B90B02228B7DEA4C69F78B18D6 /* BehaviorSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorSubject.swift; path = RxSwift/Subjects/BehaviorSubject.swift; sourceTree = ""; }; B7715718A7E1E513F9BC2E99B977FCA9 /* SwiftyUserDefaults */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftyUserDefaults; path = SwiftyUserDefaults.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B77B6CE440BB9382708B4A69C5FD7B41 /* NSObject+MJCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJCoding.m"; path = "MJExtension/NSObject+MJCoding.m"; sourceTree = ""; }; - B790DFF0E902BF9AE4692A51D0DFC77D /* Single.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Single.swift; path = RxSwift/Traits/PrimitiveSequence/Single.swift; sourceTree = ""; }; - B7D3C9EA9DED95F21EDE81DBA946AD04 /* IQKeyboardNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardNotification.modulemap; sourceTree = ""; }; - B7DD4E4308B543CDB2A0B96FD8FD5AD5 /* YBImageBrowser.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = YBImageBrowser.bundle; path = YBImageBrowser/YBImageBrowser.bundle; sourceTree = ""; }; - B7E1ED39AAD946F41815380593F8080E /* IQKeyboardReturnManager+UITextViewDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardReturnManager+UITextViewDelegate.swift"; path = "IQKeyboardReturnManager/Classes/Delegates/IQKeyboardReturnManager+UITextViewDelegate.swift"; sourceTree = ""; }; - B7FD01CF991B2947E8743F34F758F00A /* UIView+IQKeyboardExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardExtension.swift"; path = "IQKeyboardToolbar/Classes/IQKeyboardExtension/UIView+IQKeyboardExtension.swift"; sourceTree = ""; }; - B838E8CD32B3E7AF843A57E9E5C5B435 /* SDWebImageError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageError.m; path = SDWebImage/Core/SDWebImageError.m; sourceTree = ""; }; - B8435CCF2311680F3ED5C6D68A7DB889 /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; - B84ED04EF6E738BEDF956904DC7E150E /* buffer_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = buffer_dec.c; path = src/dec/buffer_dec.c; sourceTree = ""; }; - B86E1E6F43F67612B84DE9E72FB2157C /* IQKeyboardExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardExtended.swift; path = IQKeyboardCore/Classes/IQKeyboardExtended.swift; sourceTree = ""; }; - B88D5DEAACE6FC226515037194E0A093 /* Archive+ReadingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ReadingDeprecated.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+ReadingDeprecated.swift"; sourceTree = ""; }; - B893A474C858F5C4E36D48E3A0D8C038 /* AssociatedValues.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociatedValues.swift; path = Sources/SwiftDate/Supports/AssociatedValues.swift; sourceTree = ""; }; - B8BB502A0A93569100EFA0D73E3A13AE /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; - B8EA635F6E6ACFAAD23856120F08C7CD /* CustomLanguage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomLanguage.swift; path = Sources/HXPHPicker/Core/Model/CustomLanguage.swift; sourceTree = ""; }; + B772F4D6E7B2CD1919ABFF268D1694BE /* YBImageBrowser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBImageBrowser.m; path = YBImageBrowser/YBImageBrowser.m; sourceTree = ""; }; + B773BB9FAC093187BA138848D154492E /* DateInRegion+Components.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Components.swift"; path = "Sources/SwiftDate/DateInRegion/DateInRegion+Components.swift"; sourceTree = ""; }; + B77EF20CA7687CBA14FE0DDB7C8EBDC2 /* CocoaLumberjack.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CocoaLumberjack.modulemap; sourceTree = ""; }; + B7A25DB02EE751E6D01D050A5E7B3A93 /* Observable+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Bind.swift"; path = "RxRelay/Observable+Bind.swift"; sourceTree = ""; }; + B7B65555863ED958E7C15F4E036BDA4D /* RxDataSources-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxDataSources-prefix.pch"; sourceTree = ""; }; + B7C11EDE3B450C9942C6603E24661EF0 /* IQKeyboardReturnManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardReturnManager.release.xcconfig; sourceTree = ""; }; + B7D13E2DF65446BC4D8E7B407EAA0684 /* ShapeCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/ShapeCompositionLayer.swift; sourceTree = ""; }; + B7FBDEBE2C4E628598655B74A3137531 /* OIMManager+Group.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Group.h"; path = "OpenIMSDK/Interface/OIMManager+Group.h"; sourceTree = ""; }; + B81878181733515C615DB48F037DC03E /* DDLog+Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DDLog+Combine.swift"; path = "Sources/CocoaLumberjackSwift/DDLog+Combine.swift"; sourceTree = ""; }; + B85121EB950716DA0F583D20DABC268A /* YBIBSheetView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBSheetView.m; path = YBImageBrowser/ToolView/YBIBSheetView.m; sourceTree = ""; }; + B85B00D192F8CAF5C187AE860E1B7101 /* MAMapSnapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapSnapshot.h; path = MAMapKit.framework/Headers/MAMapSnapshot.h; sourceTree = ""; }; + B87219E2EAC813A4BC04BD1792CFAEE4 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/Features/ResponseSerialization.swift; sourceTree = ""; }; + B89A1A86F8CF99FF82A13D16543577F3 /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = ""; }; + B8CF6B41020B1C18360CF68D29A37865 /* LottieConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieConfiguration.swift; path = Sources/Public/Configuration/LottieConfiguration.swift; sourceTree = ""; }; + B8DB1EBE506F258F6871BF5B3853F937 /* Kingfisher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.debug.xcconfig; sourceTree = ""; }; + B8EC604002D3AACC61D5BDBC802F50D0 /* MJRefresh.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.debug.xcconfig; sourceTree = ""; }; + B8FA084404ADC4DAA8462C55C53C1E1B /* RecursiveScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveScheduler.swift; path = RxSwift/Schedulers/RecursiveScheduler.swift; sourceTree = ""; }; B9084FE779702931E8DF1D00A2D725FB /* ObjectMapper */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = ObjectMapper; path = ObjectMapper.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B9394C0414AC1F9427C4E7C0BC1863ED /* demux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = demux.h; path = src/webp/demux.h; sourceTree = ""; }; - B96763E0F72C4F15536986714E73823B /* Entry+ZIP64.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Entry+ZIP64.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Entry+ZIP64.swift"; sourceTree = ""; }; - B96FFDF9BCAA248D1DC8C88267CED019 /* AccessTokenPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AccessTokenPlugin.swift; path = Sources/Moya/Plugins/AccessTokenPlugin.swift; sourceTree = ""; }; - B977BF3D227A0AC28B05CD102057BCC1 /* palette.c */ = {isa = PBXFileReference; includeInIndex = 1; name = palette.c; path = src/utils/palette.c; sourceTree = ""; }; - B9813C135DE125969EAF42F73CC20580 /* URLSession+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSession+Rx.swift"; path = "RxCocoa/Foundation/URLSession+Rx.swift"; sourceTree = ""; }; - B99344DA0C98D4C009A4E1AECCDF9459 /* RecursiveLock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RecursiveLock.swift; path = Platform/RecursiveLock.swift; sourceTree = ""; }; - B9A7F9B1E648B27FC9190CFEA462392A /* TargetType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TargetType.swift; path = Sources/Moya/TargetType.swift; sourceTree = ""; }; - B9D4067406FA8209E984A168CBD3D6A7 /* SDImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageLoader.m; path = SDWebImage/Core/SDImageLoader.m; sourceTree = ""; }; + B92051DFD1B8964C84F2CCBDEA5D52B1 /* TestHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestHelpers.swift; path = Sources/Private/Utility/Debugging/TestHelpers.swift; sourceTree = ""; }; + B95B13BB8C7EC7678CC95F016E6DB9D2 /* DefaultsKeys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKeys.swift; path = Sources/DefaultsKeys.swift; sourceTree = ""; }; + B97AE06C4122280D4E7697B526A08475 /* VideoEditorCropViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorCropViewCell.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorCropViewCell.swift; sourceTree = ""; }; + B9825E98E044B068EC2375D6E98CF2F9 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalHeader.h; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.h; sourceTree = ""; }; + B9891B991F8D7F282B6C175E77BE7D0E /* ItemEvents.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ItemEvents.swift; path = RxCocoa/iOS/Events/ItemEvents.swift; sourceTree = ""; }; + B9A58617E989FFAC2B9D2EB8ED1B25C4 /* BezierPathRoundExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BezierPathRoundExtension.swift; path = Sources/Private/Utility/Primitives/BezierPathRoundExtension.swift; sourceTree = ""; }; B9DCB5EC0B1CDADD221717CADDF62359 /* SnapKit-SnapKit_Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SnapKit-SnapKit_Privacy"; path = SnapKit_Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - B9E550B72777FDD735DA970FB0A93766 /* MJFoundation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJFoundation.m; path = MJExtension/MJFoundation.m; sourceTree = ""; }; - BA0C32A8612AFBDAB31E407FBDC7FC06 /* mips_macro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mips_macro.h; path = src/dsp/mips_macro.h; sourceTree = ""; }; - BA124264AE4D19CCA7B7B57D21302619 /* OIMSearchResultInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSearchResultInfo.m; path = OpenIMSDK/Model/OIMSearchResultInfo.m; sourceTree = ""; }; - BA191322E165A18078EB558F6D18F31E /* SDImageCacheConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCacheConfig.m; path = SDWebImage/Core/SDImageCacheConfig.m; sourceTree = ""; }; - BA1C0686D3B77AFA9CF96045D8924FE4 /* IQKeyboardCore-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardCore-prefix.pch"; sourceTree = ""; }; - BA806823EA6D7514C7FEFBA0844C8247 /* IQKeyboardNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardNotification-Info.plist"; sourceTree = ""; }; - BA891B2995E55B127BCB278AF11B8B43 /* MABaseEngineOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MABaseEngineOverlay.h; path = MAMapKit.framework/Headers/MABaseEngineOverlay.h; sourceTree = ""; }; - BA8CD97A30916CD9C77856C59D4A8993 /* SwiftKeychainWrapper-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftKeychainWrapper-umbrella.h"; sourceTree = ""; }; - BA95F4A4BFFFE59FACF449B9D2D50CE3 /* UIScrollView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+Rx.swift"; path = "RxCocoa/iOS/UIScrollView+Rx.swift"; sourceTree = ""; }; - BAFDBAA1B3E4639B806A656741AAC875 /* CGPointExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGPointExtension.swift; path = Sources/Private/Utility/Primitives/CGPointExtension.swift; sourceTree = ""; }; - BAFFADB6718043647FA05D94FD3860E7 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = ""; }; - BB070EEA28E7CED98A5D3FBC546B2023 /* Combine.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Combine.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Combine.framework; sourceTree = DEVELOPER_DIR; }; - BB25DA3225ADD925FF448A1B0C1DB967 /* MAPolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolylineRenderer.h; path = MAMapKit.framework/Headers/MAPolylineRenderer.h; sourceTree = ""; }; - BB26D67793EF0FF90678F9F98CE61847 /* color_cache_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = color_cache_utils.h; path = src/utils/color_cache_utils.h; sourceTree = ""; }; - BB34224D13F0A6C900F251943BDB8520 /* InterpolatableExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InterpolatableExtensions.swift; path = Sources/Private/Utility/Interpolatable/InterpolatableExtensions.swift; sourceTree = ""; }; - BB38A21B400317176AA9BC8FFBF61A5E /* IQBarButtonItemConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItemConfiguration.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQBarButtonItemConfiguration.swift; sourceTree = ""; }; - BB3D3CAB8E5BB7D166549F00AB9C0C15 /* YBIBToastView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBToastView.h; path = YBImageBrowser/AuxiliaryView/YBIBToastView.h; sourceTree = ""; }; - BB3FD8C20C18627E7DFACF967A196E8D /* lossless.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lossless.h; path = src/dsp/lossless.h; sourceTree = ""; }; - BB4CCEF4612B6E93B18A7AB979A7B8E6 /* OIMUpdateFriendsReq.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMUpdateFriendsReq.m; path = OpenIMSDK/Model/OIMUpdateFriendsReq.m; sourceTree = ""; }; - BB7467BE133454D87B61A8895816C0A5 /* YYSpriteSheetImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYSpriteSheetImage.m; path = YYImage/YYSpriteSheetImage.m; sourceTree = ""; }; - BB8B31FB69DD6EE93331C2441B9893E8 /* ImageContentType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageContentType.swift; path = Sources/HXPHPicker/Core/Model/ImageContentType.swift; sourceTree = ""; }; - BB941175FCDE56397887345BB6BCE206 /* SwiftDate.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftDate.modulemap; sourceTree = ""; }; + B9E6296C6B08253BA23FAA38899D184E /* UploadRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UploadRequest.swift; path = Source/Core/UploadRequest.swift; sourceTree = ""; }; + B9F0A16DB2718E87062DB18D1618AAAF /* Archive+MemoryFile.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+MemoryFile.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+MemoryFile.swift"; sourceTree = ""; }; + BA028C6C6E1A7001499331E6B38C01F9 /* anim_decode.c */ = {isa = PBXFileReference; includeInIndex = 1; name = anim_decode.c; path = src/demux/anim_decode.c; sourceTree = ""; }; + BA10D70D427E316E20ABE84F02DE485D /* CoreTextRenderLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreTextRenderLayer.swift; path = Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift; sourceTree = ""; }; + BA453413AE53C58DA619D0B966B41FC6 /* InfiniteSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteSequence.swift; path = Platform/DataStructures/InfiniteSequence.swift; sourceTree = ""; }; + BA471A54694354CA0D84E2A452949610 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = ""; }; + BA50CF2B5D2F41B255A98CBFC75EF571 /* OIMManager+Conversation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Conversation.m"; path = "OpenIMSDK/Interface/OIMManager+Conversation.m"; sourceTree = ""; }; + BA6D541DD91BB83D988956E0E46B9C27 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoGifFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m; sourceTree = ""; }; + BA7C3B976B5FED44BFD89C3C0FBBE972 /* ScheduledDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledDisposable.swift; path = RxSwift/Disposables/ScheduledDisposable.swift; sourceTree = ""; }; + BA81E3B3EDD71C5E60450FB07D07DC17 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = ""; }; + BAB6D3BA9EB2705C68DEC158FFD134AF /* Debounce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debounce.swift; path = RxSwift/Observables/Debounce.swift; sourceTree = ""; }; + BAC22EE2D24B29FFE5B322BDA4188153 /* NavigatorProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NavigatorProtocol.swift; path = Sources/URLNavigator/NavigatorProtocol.swift; sourceTree = ""; }; + BAC4832233C2EAA5A0A324B4FECE605C /* SDImageCodersManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCodersManager.m; path = SDWebImage/Core/SDImageCodersManager.m; sourceTree = ""; }; + BAD8A328CB6EDF375064B5BEE7F65B87 /* SwiftLogLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SwiftLogLevel.h; path = Sources/CocoaLumberjackSwiftSupport/include/CocoaLumberjackSwiftSupport/SwiftLogLevel.h; sourceTree = ""; }; + BAD9B38243361F92E1740F0543B8738C /* YBImageBrowser-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "YBImageBrowser-Info.plist"; sourceTree = ""; }; + BAE70D15CB0E723B27BCADCA5F142B7B /* Result+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Result+Alamofire.swift"; path = "Source/Extensions/Result+Alamofire.swift"; sourceTree = ""; }; + BAF3240D5C6054FC9088F120BCC0AE61 /* Empty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Empty.swift; path = RxSwift/Observables/Empty.swift; sourceTree = ""; }; + BB037BF10F9C4170C64093D37538877C /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackNormalFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h; sourceTree = ""; }; + BB176CC8A097D4E742BA5C362AB0B997 /* DDFileLogger+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "DDFileLogger+Internal.h"; path = "Sources/CocoaLumberjack/DDFileLogger+Internal.h"; sourceTree = ""; }; + BB37EDCCBA41B0C9641257E086DC8ABF /* BehaviorsConfigurableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorsConfigurableView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/BehaviorsConfigurableView.swift; sourceTree = ""; }; + BB93E38AD3C52061F96904FE8367EBB7 /* MAOfflineItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItem.h; path = MAMapKit.framework/Headers/MAOfflineItem.h; sourceTree = ""; }; BB97A63C05CB76B306A8275DF4A550B5 /* Pods-QuickLocation-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-QuickLocation-acknowledgements.markdown"; sourceTree = ""; }; - BBBC010B85BCBA9FA6908DE4D9348839 /* rescaler_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_neon.c; path = src/dsp/rescaler_neon.c; sourceTree = ""; }; - BBC2244F81633A2E7E1CB28DD4AA64FA /* MAHeatMapVectorOverlayRender.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAHeatMapVectorOverlayRender.h; path = MAMapKit.framework/Headers/MAHeatMapVectorOverlayRender.h; sourceTree = ""; }; - BBC4752255378F245AD160803FB5186D /* TakeWithPredicate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TakeWithPredicate.swift; path = RxSwift/Observables/TakeWithPredicate.swift; sourceTree = ""; }; - BBCDF59E6D69248934B4BC8F30930BBC /* SDWebImageCompat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCompat.h; path = SDWebImage/Core/SDWebImageCompat.h; sourceTree = ""; }; - BBD10C64367048249EB3CCA3A4728FF2 /* RetryWhen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryWhen.swift; path = RxSwift/Observables/RetryWhen.swift; sourceTree = ""; }; - BBDC785D271CA5318A067B81436E8352 /* OIMFullUserInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMFullUserInfo.h; path = OpenIMSDK/Model/OIMFullUserInfo.h; sourceTree = ""; }; - BBF5747CA453C4BA37E67B413EF9E878 /* AsMaybe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsMaybe.swift; path = RxSwift/Observables/AsMaybe.swift; sourceTree = ""; }; - BC30D019482F4221FF633E550DAC417D /* quant_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_enc.c; path = src/enc/quant_enc.c; sourceTree = ""; }; + BB9927B03C2D0F7E7F9022B6EFF4C646 /* AssetManager+AVAssetExportSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+AVAssetExportSession.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+AVAssetExportSession.swift"; sourceTree = ""; }; + BB9E8F62AB5BBD697AAD9ED993626C03 /* PhotoPreviewViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewViewController.swift; path = Sources/HXPHPicker/Picker/Controller/PhotoPreviewViewController.swift; sourceTree = ""; }; + BBD2DB39097CEEE8679B416972A73C59 /* SchedulerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SchedulerType.swift; path = RxSwift/SchedulerType.swift; sourceTree = ""; }; + BBEF8ABEDA5FDBA01511762EB65DD72A /* IQKeyboardNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardNotification.debug.xcconfig; sourceTree = ""; }; BC432FD48A5932251F1CAFBC4BF74894 /* RxCocoa */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxCocoa; path = RxCocoa.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BC43992A1CEA954A9FF7EAFBFE2123A5 /* unwrap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = unwrap.swift; path = Source/RxSwift/unwrap.swift; sourceTree = ""; }; - BC6CFC68DC5E71DEF88306F0089B2448 /* Session.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Session.swift; path = Source/Core/Session.swift; sourceTree = ""; }; - BC7E39CC063AB41D123D508DC96ED3C7 /* YYImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYImage.release.xcconfig; sourceTree = ""; }; - BC8B0B4D9A47EDA4FB888829AF560CD8 /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; - BC93400A9949AF32E23616180B0B6CDD /* Observable+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Bind.swift"; path = "RxRelay/Observable+Bind.swift"; sourceTree = ""; }; - BCB8986ADEB13628FCBEE6A879989156 /* URLNavigator-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "URLNavigator-prefix.pch"; sourceTree = ""; }; - BD1690BEAF90622CE6B9A176205DB662 /* VirtualTimeConverterType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeConverterType.swift; path = RxSwift/Schedulers/VirtualTimeConverterType.swift; sourceTree = ""; }; - BD30A03CDBD30EA947D04F11E53B9CCE /* NSObject+MJClass.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJClass.m"; path = "MJExtension/NSObject+MJClass.m"; sourceTree = ""; }; - BD4119C293858086ECD9A8866275C5A9 /* URLConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLConvertible.swift; path = Sources/URLMatcher/URLConvertible.swift; sourceTree = ""; }; - BD427A1EF10A746C4A553BB183FB8A67 /* MAMapSnapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapSnapshot.h; path = MAMapKit.framework/Headers/MAMapSnapshot.h; sourceTree = ""; }; - BD4667C302EAFF74DF30B4071AAC48CA /* ImageDownloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloader.swift; path = Sources/Networking/ImageDownloader.swift; sourceTree = ""; }; - BD4ADD434EFB26616EA32E6982267301 /* CLIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLIColor.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/CLIColor.h; sourceTree = ""; }; - BD65B01FFFE710531CEAB6814557AA61 /* DelaySubscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelaySubscription.swift; path = RxSwift/Observables/DelaySubscription.swift; sourceTree = ""; }; - BD766BEEA3CB87371EF37EDE094330B4 /* OpacityAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OpacityAnimation.swift; path = Sources/Private/CoreAnimation/Animations/OpacityAnimation.swift; sourceTree = ""; }; - BD860D73C4D35821C2B060BD58768183 /* OIMVideoElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMVideoElem.h; path = OpenIMSDK/Model/OIMVideoElem.h; sourceTree = ""; }; - BD95EF9454E3F53ABDBC35194ED025C5 /* DownloadRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownloadRequest.swift; path = Source/Core/DownloadRequest.swift; sourceTree = ""; }; - BDB33574F45BE6091CBD60487B6B9FAC /* lottie-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios.debug.xcconfig"; sourceTree = ""; }; - BDE3C415D49D9DBEE2D6B0B692F711A8 /* enc_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_neon.c; path = src/dsp/enc_neon.c; sourceTree = ""; }; - BE1897BB0C9F910694FC61F30214A0EE /* YYImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "YYImage-Info.plist"; sourceTree = ""; }; - BE2AE28AB42D6BB69AEC9E7501336749 /* RequestTypeWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTypeWrapper.swift; path = Sources/Moya/RequestTypeWrapper.swift; sourceTree = ""; }; - BE5939CE0FDBDC6B3C62814EA03E1F30 /* Binding+Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Binding+Map.swift"; path = "Sources/Private/Utility/Helpers/Binding+Map.swift"; sourceTree = ""; }; - BE68E3C8423A0C2B3B2F147C351569BD /* histogram_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = histogram_enc.c; path = src/enc/histogram_enc.c; sourceTree = ""; }; - BE6F22872D0C90A564CE9655853DB065 /* Zip+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+Collection.swift"; path = "RxSwift/Observables/Zip+Collection.swift"; sourceTree = ""; }; - BE7291A0D9ED471F9754D1FD9D58F0F4 /* IQKeyboardManager+ActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ActiveConfiguration.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+ActiveConfiguration.swift"; sourceTree = ""; }; - BE7DEA50FF25BDE8F47C9A4C55418AD1 /* String+SHA256.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+SHA256.swift"; path = "Sources/Utility/String+SHA256.swift"; sourceTree = ""; }; - BE9BA9868608B0F72E0F1A2BCFA4CD6D /* CredentialsPlugin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CredentialsPlugin.swift; path = Sources/Moya/Plugins/CredentialsPlugin.swift; sourceTree = ""; }; - BEB9AB80392ECE7248709873DCA13FCC /* Marker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Marker.swift; path = Sources/Private/Model/Objects/Marker.swift; sourceTree = ""; }; - BECB67C4910C284EF8C311E0AF7A187D /* RxCocoa.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxCocoa.release.xcconfig; sourceTree = ""; }; - BED7A2A6B98402F4898A2ED5031C9DD6 /* AnimatedSwitch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedSwitch.swift; path = Sources/Public/Controls/AnimatedSwitch.swift; sourceTree = ""; }; - BEFCC919734F12F29D14D4BC157695AB /* URLConvertible+URLRequestConvertible.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLConvertible+URLRequestConvertible.swift"; path = "Source/Core/URLConvertible+URLRequestConvertible.swift"; sourceTree = ""; }; - BF0E479511C18ADD53E88F03961CB9F1 /* OIMLocationElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMLocationElem.h; path = OpenIMSDK/Model/OIMLocationElem.h; sourceTree = ""; }; - BF160B94684907A47F9B8E3E019F60FF /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardToolbar/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; - BF41EFA1EAF19A24E823D999541E1D14 /* TextCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/TextCompositionLayer.swift; sourceTree = ""; }; - BF48EC27DD64ECC464ACB1471E51E2EB /* MJRefreshNormalTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshNormalTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h; sourceTree = ""; }; - BF59DBF677935AFE11100B7BA87711D0 /* PreviewPhotoViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewPhotoViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PreviewPhotoViewCell.swift; sourceTree = ""; }; - BF62A78FF66483CF7EB197B4BC26ADDF /* YBImageBrowser.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YBImageBrowser.debug.xcconfig; sourceTree = ""; }; - BF79B8AE2F9CE0C811A464A737EDAD5A /* MAOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlay.h; path = MAMapKit.framework/Headers/MAOverlay.h; sourceTree = ""; }; - BFA6FD03C778C0B691600FE0A831EB76 /* ObjectMapper.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ObjectMapper.release.xcconfig; sourceTree = ""; }; - BFBF528C9DC2F22EF9166D52B4955E30 /* OpenIMSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OpenIMSDK.release.xcconfig; sourceTree = ""; }; - BFCCD0770B0B62C74DEABE252BBED5F0 /* Popover.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Popover.modulemap; sourceTree = ""; }; - BFEAA4C469AAC85BB62868EA0E706D5F /* CompatibleAnimationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompatibleAnimationView.swift; path = Sources/Public/iOS/Compatibility/CompatibleAnimationView.swift; sourceTree = ""; }; - C008E791217FF7AE2284DE4ED33D82DC /* CropConfirmViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CropConfirmViewConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/CropConfirmViewConfiguration.swift; sourceTree = ""; }; - C0242CA8AEDD877040E56C254660FC43 /* ColorValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift; sourceTree = ""; }; - C028AA7709CA95FD821510CA4D1F151B /* AlipaySDK.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = AlipaySDK.bundle; sourceTree = ""; }; - C02CFAD272BDBFF03F29BA64096B6F3F /* enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc.c; path = src/dsp/enc.c; sourceTree = ""; }; - C08DCD50DDA4F71C414AA7077CC96A96 /* UITabBar+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITabBar+Rx.swift"; path = "RxCocoa/iOS/UITabBar+Rx.swift"; sourceTree = ""; }; - C09B6CDED61FA0453ED2ADB6EA524148 /* ResourceBundle-Privacy-ObjectMapper-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Privacy-ObjectMapper-Info.plist"; sourceTree = ""; }; - C0F9D43170F9BCCB6D568800C5992073 /* YBImageBrowser-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YBImageBrowser-prefix.pch"; sourceTree = ""; }; - C107644E8F1B43B9190403B7575902BF /* curry.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = curry.swift; path = Source/Tools/curry.swift; sourceTree = ""; }; - C117CFE5F649547894B19490E91DC335 /* IQKeyboardCore.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardCore.modulemap; sourceTree = ""; }; - C130B750A15BEC82321EE1FB7C52C2EE /* EditorToolView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorToolView.swift; path = Sources/HXPHPicker/Editor/View/EditorToolView.swift; sourceTree = ""; }; - C13189BB9C5B978BC239E0FC3A946821 /* lossless_enc_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_mips_dsp_r2.c; path = src/dsp/lossless_enc_mips_dsp_r2.c; sourceTree = ""; }; - C13D413FA74ACD184F48EEECDAF835AF /* PreviewViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewViewConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PreviewViewConfiguration.swift; sourceTree = ""; }; - C13FACFBC79FA95702703916C3A64ECF /* Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debug.swift; path = RxSwift/Observables/Debug.swift; sourceTree = ""; }; - C148AA1C2819A5B7DEAC0ECF49DDB109 /* EditorImageResizerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorImageResizerView.swift; path = Sources/HXPHPicker/Editor/View/Photo/EditorImageResizerView.swift; sourceTree = ""; }; - C14B726FB27D2B21A55B33ADEC4ECFB9 /* SDGraphicsImageRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDGraphicsImageRenderer.m; path = SDWebImage/Core/SDGraphicsImageRenderer.m; sourceTree = ""; }; - C17C21B8184E139AF017777649C7942C /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Sources/ConstraintMakerEditable.swift; sourceTree = ""; }; - C184E760724FA58B37DE2A4F77BFEFDC /* DotLottieConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieConfiguration.swift; path = Sources/Public/DotLottie/DotLottieConfiguration.swift; sourceTree = ""; }; - C18AEDBF31CB2572AB07F8722E0870F3 /* filter_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filter_enc.c; path = src/enc/filter_enc.c; sourceTree = ""; }; - C19DD6665A13D1B7549BC7D51C85D9EF /* AsSingle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsSingle.swift; path = RxSwift/Observables/AsSingle.swift; sourceTree = ""; }; - C1B302C4A61CD77057994883E8AE64C5 /* YYSpriteSheetImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYSpriteSheetImage.h; path = YYImage/YYSpriteSheetImage.h; sourceTree = ""; }; - C1C0FD80E79D2926FDECD4C655DF8167 /* MarqueeLabel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MarqueeLabel-Info.plist"; sourceTree = ""; }; - C1C36DF3BE0882BE0A7E5CD447CBEF2B /* Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Zip+arity.swift"; path = "RxSwift/Observables/Zip+arity.swift"; sourceTree = ""; }; - C218ADBB9ED9BCB5794960F550704D52 /* IQKeyboardToolbarConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarConfiguration.swift; path = IQKeyboardToolbarManager/Classes/Configuration/IQKeyboardToolbarConfiguration.swift; sourceTree = ""; }; + BC58BA55D7533F2245DB9FE3327E7353 /* SDWebImageDownloaderRequestModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderRequestModifier.h; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.h; sourceTree = ""; }; + BC82B7E9975E6980600CDB79F602BDD8 /* random_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = random_utils.c; path = src/utils/random_utils.c; sourceTree = ""; }; + BCBA512CDD9A14E3AE8881732D0ECCF6 /* OIMPictureElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMPictureElem.m; path = OpenIMSDK/Model/OIMPictureElem.m; sourceTree = ""; }; + BCC5AC3823AF1F18738C22FBEA8154BF /* KFImageRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImageRenderer.swift; path = Sources/SwiftUI/KFImageRenderer.swift; sourceTree = ""; }; + BCFAA6E3673F32D9D944D7DD589746D5 /* AlipaySDK-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AlipaySDK-iOS.debug.xcconfig"; sourceTree = ""; }; + BD344724CF8CFF05B4EC629141908CFD /* NSObject+MJCoding.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJCoding.m"; path = "MJExtension/NSObject+MJCoding.m"; sourceTree = ""; }; + BD5055592BE65B1AFCBD850A79CCC6B5 /* KingfisherWebP.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KingfisherWebP.debug.xcconfig; sourceTree = ""; }; + BD5A142B20B08F85DF4E255309581669 /* UIView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MJExtension.h"; path = "MJRefresh/UIView+MJExtension.h"; sourceTree = ""; }; + BDE09D4F498218C6D85FACE5AF9F3203 /* Binding+Map.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Binding+Map.swift"; path = "Sources/Private/Utility/Helpers/Binding+Map.swift"; sourceTree = ""; }; + BDE8A491D26688B79C66157CE598DB67 /* AlipaySDK.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; path = AlipaySDK.bundle; sourceTree = ""; }; + BDE8C8E66FA082F46F1643FAC6D3F43D /* SDMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDMemoryCache.m; path = SDWebImage/Core/SDMemoryCache.m; sourceTree = ""; }; + BDF903CC6F915E514FBF685B2291C574 /* RxSwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwift.debug.xcconfig; sourceTree = ""; }; + BE2396AEB28B21E7D7963F4E67D9B1F9 /* OpenIMSDKCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OpenIMSDKCore.release.xcconfig; sourceTree = ""; }; + BE2B71D301E15E6410F723894618F8B2 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = ""; }; + BE3AC6EFED534E56B45FDD982333FDED /* PreviewVideoControlViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewVideoControlViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PreviewVideoControlViewCell.swift; sourceTree = ""; }; + BE64907BB7CB5497C4B31C6437EA2231 /* InfiniteSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteSequence.swift; path = Platform/DataStructures/InfiniteSequence.swift; sourceTree = ""; }; + BEBE1953B540829D2FA2A81822E200CA /* YBIBCollectionView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBCollectionView.h; path = YBImageBrowser/Base/YBIBCollectionView.h; sourceTree = ""; }; + BEDC7B7D5DFCC3D589C9258A53C79C1A /* Multicast.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Multicast.swift; path = RxSwift/Observables/Multicast.swift; sourceTree = ""; }; + BF134D80E9619348A65BBB751BB70BBF /* IQTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextView.swift; path = IQTextView/Classes/IQTextView.swift; sourceTree = ""; }; + BF32372FBC1D4CEB416B12E4E4D35483 /* IQTextInputViewNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextInputViewNotification-umbrella.h"; sourceTree = ""; }; + BF48C90544457D818A3293740E7D49D8 /* Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Rx.swift; path = RxSwift/Rx.swift; sourceTree = ""; }; + BF86B2932209BF72B21D027CCB3D5BE2 /* OIMManager+User.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+User.h"; path = "OpenIMSDK/Interface/OIMManager+User.h"; sourceTree = ""; }; + BFA1464237676D38F4BF5A57D9F5A55D /* IQKeyboardToolbarManager+Debug.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Debug.swift"; path = "IQKeyboardToolbarManager/Classes/Debug/IQKeyboardToolbarManager+Debug.swift"; sourceTree = ""; }; + BFA50E72BEA63413CB9C0B4CC48F4F7A /* EditorToolViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorToolViewConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/EditorToolViewConfiguration.swift; sourceTree = ""; }; + BFC9B638004387C6C5A45619A8A5B2E6 /* RxCollectionViewSectionedAnimatedDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewSectionedAnimatedDataSource.swift; path = Sources/RxDataSources/RxCollectionViewSectionedAnimatedDataSource.swift; sourceTree = ""; }; + BFDDE473595828D6E2632E61085FBD8B /* WebPProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebPProcessor.swift; path = Sources/WebPProcessor.swift; sourceTree = ""; }; + BFE309F25629521A4C37547AB03DD967 /* YBIBImageCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBImageCell.h; path = YBImageBrowser/Image/YBIBImageCell.h; sourceTree = ""; }; + BFFFBA599610B03A82906A883745C95A /* MJRefreshStateTrailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshStateTrailer.h; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h; sourceTree = ""; }; + C044C8F399ACA5B2EE61EF53158B478D /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = ""; }; + C05D0791B25960724D44549980AD74B1 /* webp_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = webp_dec.c; path = src/dec/webp_dec.c; sourceTree = ""; }; + C05DB1794BBBFB16B8EA48C125B1579E /* WechatOpenSDK-XCFramework.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "WechatOpenSDK-XCFramework.debug.xcconfig"; sourceTree = ""; }; + C066FC22BEEDC8272BC2A1BB6454B72F /* Materialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Materialize.swift; path = RxSwift/Observables/Materialize.swift; sourceTree = ""; }; + C068E1B38BFB93E75CB74A95D3FAC3A4 /* IQKeyboardAppearanceManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardAppearanceManager.swift; path = IQKeyboardManagerSwift/Appearance/IQKeyboardAppearanceManager.swift; sourceTree = ""; }; + C093540FF30E4F3FC0F5546E3FA8958C /* FramePubComp.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FramePubComp.swift; path = Source/FramePubComp.swift; sourceTree = ""; }; + C09DA885DD15FA8B7964193BE291C702 /* AlipaySDK-iOS-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "AlipaySDK-iOS-xcframeworks.sh"; sourceTree = ""; }; + C0A885057A11B51887D16E84D82AF7A6 /* OIMMessageElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMMessageElem.m; path = OpenIMSDK/Model/OIMMessageElem.m; sourceTree = ""; }; + C0AC41EA6D004745BAE6C7B3339BADDD /* GradientStrokeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientStrokeRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift; sourceTree = ""; }; + C0BB4CBF6048C1CFAA8CF2FA39D85DDA /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Source/SwiftyJSON/PrivacyInfo.xcprivacy; sourceTree = ""; }; + C0CD73578573AF5AD46B0F08EBEDF1A5 /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; + C0E35192C63708E12595F0EDB4626CC1 /* NSData+ImageContentType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSData+ImageContentType.m"; path = "SDWebImage/Core/NSData+ImageContentType.m"; sourceTree = ""; }; + C0F45767D09215F572F8D80F01EB8628 /* RetryStrategy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryStrategy.swift; path = Sources/Networking/RetryStrategy.swift; sourceTree = ""; }; + C10122837DEED57398C463CC0F8E4EB4 /* VideoEditorFrameMaskView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorFrameMaskView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorFrameMaskView.swift; sourceTree = ""; }; + C12787613C350ACAA6E34E28788B71EF /* SectionedViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionedViewDataSourceType.swift; path = RxCocoa/Common/SectionedViewDataSourceType.swift; sourceTree = ""; }; + C1AF925CB18B9B0B703C6F5CA5025160 /* MultiTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultiTarget.swift; path = Sources/Moya/MultiTarget.swift; sourceTree = ""; }; + C1B656B97F0E6F92AF27F46991440302 /* MJPropertyKey.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyKey.m; path = MJExtension/MJPropertyKey.m; sourceTree = ""; }; + C1D497158B767F77BFA5E0748C677F85 /* UIGestureRecognizer+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIGestureRecognizer+Rx.swift"; path = "RxCocoa/iOS/UIGestureRecognizer+Rx.swift"; sourceTree = ""; }; + C214635901487ED70CD287E8BC4AEC74 /* TextLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextLayerModel.swift; path = Sources/Private/Model/Layers/TextLayerModel.swift; sourceTree = ""; }; + C21C4FBD6D82FAF123B6FD4221EEC000 /* AlbumTitleView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumTitleView.swift; path = Sources/HXPHPicker/Picker/View/AlbumTitleView.swift; sourceTree = ""; }; + C224AC4EDC0D96C8B5598D7A2323510D /* DropShadowAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropShadowAnimation.swift; path = Sources/Private/CoreAnimation/Animations/DropShadowAnimation.swift; sourceTree = ""; }; + C258350AE25DA6A17D93C6E9D2CF991C /* RxTabBarControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTabBarControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTabBarControllerDelegateProxy.swift; sourceTree = ""; }; + C25E233CFC387CA4A006D4D00CDBB57A /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = ""; }; C261436D14052AE3C35F240BCD155CAC /* CocoaLumberjack */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CocoaLumberjack; path = CocoaLumberjack.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C2874A5748A76E6FF8D240C980346F2D /* ConstraintMakerPrioritizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPrioritizable.swift; path = Sources/ConstraintMakerPrioritizable.swift; sourceTree = ""; }; + C27A10A9A647A42B2B5BE3F24C1D6BB6 /* YBIBToolViewHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBToolViewHandler.m; path = YBImageBrowser/ToolView/YBIBToolViewHandler.m; sourceTree = ""; }; C298ABB78D9B05529B89D8322DB2E7B0 /* Kingfisher-Kingfisher */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "Kingfisher-Kingfisher"; path = Kingfisher.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - C2AC64CAFEB6D49E57D7FAA016865BC3 /* Dematerialize.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Dematerialize.swift; path = RxSwift/Observables/Dematerialize.swift; sourceTree = ""; }; - C2E26E78C920199D48C95A6E28FC1791 /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; }; - C2EBA132392950FF3765D57D57796814 /* sharpyuv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv.h; path = sharpyuv/sharpyuv.h; sourceTree = ""; }; - C2EBF1ACC8534A22F5BE37FAAD051863 /* MJExtensionConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtensionConst.h; path = MJExtension/MJExtensionConst.h; sourceTree = ""; }; - C2F7D06A790CB3DE1726D6C0C304807A /* ObservableConvertibleType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObservableConvertibleType.swift; path = RxSwift/ObservableConvertibleType.swift; sourceTree = ""; }; - C2FF16D1D087D591C2B162AEF8018694 /* URLPathComponent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLPathComponent.swift; path = Sources/URLMatcher/URLPathComponent.swift; sourceTree = ""; }; - C30ECEB47A30F096C7A11DAFC977D503 /* LanguageType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LanguageType.swift; path = Sources/HXPHPicker/Core/Model/LanguageType.swift; sourceTree = ""; }; - C339600B8575DE34AFEDE149E0B30136 /* IQKeyboardManager+Resign.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Resign.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardManager+Resign.swift"; sourceTree = ""; }; + C2ACDB20B7A0F28B516DC1D2EC6212E5 /* ScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItem.swift; path = RxSwift/Schedulers/Internal/ScheduledItem.swift; sourceTree = ""; }; + C30C54F5FE080C171CB0A8068F86BE2F /* quant_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_dec.c; path = src/dec/quant_dec.c; sourceTree = ""; }; + C31A05C7D26DBD0A551AA3C91D73FEFF /* MASCompositeConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASCompositeConstraint.h; path = Masonry/MASCompositeConstraint.h; sourceTree = ""; }; + C34E1FC5A28BDD54E39AB0B3CD4FE159 /* DDLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLog.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDLog.h; sourceTree = ""; }; + C36DE6C3FC332032CD0B60D0BDA7563D /* ViewType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewType.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/ViewType.swift; sourceTree = ""; }; C37C1FFDD7934BF1E8E952DAFD1B42B2 /* Pods-QuickLocation-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-QuickLocation-Info.plist"; sourceTree = ""; }; - C3DC42E9BB7BC32F274FCDB40EC61371 /* _RXKVOObserver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXKVOObserver.m; path = RxCocoa/Runtime/_RXKVOObserver.m; sourceTree = ""; }; - C3F217B8362CC3E3556A8BBDC8F0693C /* SDWebImageDownloaderConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderConfig.m; path = SDWebImage/Core/SDWebImageDownloaderConfig.m; sourceTree = ""; }; + C37E9B0A2752CD48FC43FABF09C7B745 /* StarAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StarAnimation.swift; path = Sources/Private/CoreAnimation/Animations/StarAnimation.swift; sourceTree = ""; }; + C38CCEC48E7F25EFD8909A52CAA8602B /* YYImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYImageCoder.h; path = YYImage/YYImageCoder.h; sourceTree = ""; }; + C39880C40AAAAD747B9A62379A5A895B /* IQKeyboardToolbarManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Deprecated.swift"; path = "IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager+Deprecated.swift"; sourceTree = ""; }; + C39C724CC87492EDAFC684B436DBC2CF /* SwiftyUserDefaults.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyUserDefaults.modulemap; sourceTree = ""; }; + C3A73710E2C0578C6A953780E42AD303 /* ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist"; sourceTree = ""; }; + C3DE50759EFD988D04743C79471C7618 /* PublishRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublishRelay.swift; path = RxRelay/PublishRelay.swift; sourceTree = ""; }; + C3F1699EBCB271D06621D975F6663A0E /* IQKeyboardExtended.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardExtended.swift; path = IQKeyboardCore/Classes/IQKeyboardExtended.swift; sourceTree = ""; }; + C3F1B8BD2825588EB74675386BF2CB44 /* PhotoListCameraCellConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoListCameraCellConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PhotoListCameraCellConfiguration.swift; sourceTree = ""; }; C3F44C782D64D7EB20B61CE3844EBFAD /* Kingfisher */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Kingfisher; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C3FC533DE5E471CA767990817D462FD9 /* MarqueeLabel-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MarqueeLabel-prefix.pch"; sourceTree = ""; }; - C40F5AA4F27B5CB9A27F0ACE39DCE988 /* GroupNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift; sourceTree = ""; }; - C40FD0E6009B44B34D4CA91F002AD958 /* UIViewControllerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewControllerType.swift; path = Sources/URLNavigator/UIViewControllerType.swift; sourceTree = ""; }; - C4153E009B13E648D368E7C4DE7737F2 /* MAMultiPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPolyline.h; path = MAMapKit.framework/Headers/MAMultiPolyline.h; sourceTree = ""; }; - C42E84DD790B283F0D5185499E7E6716 /* Utilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utilities.swift; path = Sources/Differentiator/Utilities.swift; sourceTree = ""; }; - C4B4AB0B79C4A577880AC965914ABDBB /* Event.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Event.swift; path = RxSwift/Event.swift; sourceTree = ""; }; - C4C753919F581AE643532B0D59A3E5D3 /* Transform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Transform.swift; path = Sources/Private/Model/Objects/Transform.swift; sourceTree = ""; }; - C4D0E6975AA68BF82B50479B31188714 /* Core+UIImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIImageView.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIImageView.swift"; sourceTree = ""; }; - C4E134D68D9A3EA6BAA45CBBF86E6282 /* AMapFoundationConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationConst.h; path = AMapFoundationKit.framework/Headers/AMapFoundationConst.h; sourceTree = ""; }; - C5033298D1CA93A7865AE65144ECEDB7 /* UIButton+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIButton+Kingfisher.swift"; path = "Sources/Extensions/UIButton+Kingfisher.swift"; sourceTree = ""; }; - C508E91145FD5398716837106BE87EED /* RxSearchBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxSearchBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxSearchBarDelegateProxy.swift; sourceTree = ""; }; - C53081C00C8A2D5E4DDB3C986037310A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Source/PrivacyInfo.xcprivacy; sourceTree = ""; }; - C559E1C6589C2C4D9F94A887A6257ACE /* AlipaySDK.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = AlipaySDK.xcframework; sourceTree = ""; }; - C592FF44021E880C95CFE088D4C80A27 /* VectorsExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VectorsExtensions.swift; path = Sources/Private/Utility/Primitives/VectorsExtensions.swift; sourceTree = ""; }; - C59EC7A1C6159115643B175BCBF65033 /* MJRefreshComponent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshComponent.h; path = MJRefresh/Base/MJRefreshComponent.h; sourceTree = ""; }; - C5A5182C75AEAD0F757530B825BB3DA6 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarManagerDeprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardToolbarManager/IQKeyboardManager+ToolbarManagerDeprecated.swift"; sourceTree = ""; }; - C5B7E713872D1FF5E662E3E0EA2B6505 /* YBIBVideoView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoView.h; path = Video/YBIBVideoView.h; sourceTree = ""; }; - C5E097351E3CA0442F19440EBE19E5E6 /* Core+UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIImage.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIImage.swift"; sourceTree = ""; }; - C5E3669AB59288D37DDEF78C1D1789C8 /* SGQRCodeLog.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGQRCodeLog.h; path = SGQRCode/SGQRCodeLog.h; sourceTree = ""; }; - C61CA1E7129FC9BB178D8C730B3B5A79 /* FillRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FillRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift; sourceTree = ""; }; - C62129F292FE4AAAD3B0854D292C8412 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoFooter.m; path = MJRefresh/Base/MJRefreshAutoFooter.m; sourceTree = ""; }; - C65141CFE1CE7172EBF4F892518DA710 /* AMapURLSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearch.h; path = AMapFoundationKit.framework/Headers/AMapURLSearch.h; sourceTree = ""; }; - C664CD013CBAA23F9525F2EC6C50AC09 /* LottieViewType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieViewType.swift; path = Sources/Public/Controls/LottieViewType.swift; sourceTree = ""; }; - C669EF21008A80A60B3840300815827B /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Sources/ConstraintViewDSL.swift; sourceTree = ""; }; - C6E757F10F5FAFFFD8D5AE70FEDE7FBE /* MAArc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAArc.h; path = MAMapKit.framework/Headers/MAArc.h; sourceTree = ""; }; - C6EED8EF1941D023328AEA4B21A95EFF /* IQTextInputViewNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextInputViewNotification.release.xcconfig; sourceTree = ""; }; - C6F4420A9FB2F691DC1A5C98FBAD4EB4 /* MJRefreshFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshFooter.m; path = MJRefresh/Base/MJRefreshFooter.m; sourceTree = ""; }; - C7047394005D22EF48C06D0F8CD2813B /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ViewController+MASAdditions.h"; path = "Masonry/ViewController+MASAdditions.h"; sourceTree = ""; }; - C70AB659BC6BC3C3EF51AB32BBF7BD2E /* IQKeyboardToolbarManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Deprecated.swift"; path = "IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager+Deprecated.swift"; sourceTree = ""; }; - C71982C9D407CCE05012DF8D73A62516 /* Just.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Just.swift; path = RxSwift/Observables/Just.swift; sourceTree = ""; }; - C727B0032405B20871145670E76F6A35 /* IQTextInputViewInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewInfo.swift; path = IQTextInputViewNotification/Classes/IQTextInputViewInfo.swift; sourceTree = ""; }; - C77D66DCCBD20AA11966F53C867FF4FB /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Accelerate.framework; sourceTree = DEVELOPER_DIR; }; - C78AE96DEEB3AE3D220D176418FF4438 /* RxTableViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift; sourceTree = ""; }; - C7B41E31317DB329D97E70B6AE1B3AAC /* YBIBScreenRotationHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBScreenRotationHandler.m; path = YBImageBrowser/Base/YBIBScreenRotationHandler.m; sourceTree = ""; }; - C7FE6109F51AB7D33301A8EC635FFAA0 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Moya/Image.swift; sourceTree = ""; }; - C803D3D90266F99C8F0394B468092649 /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Sources/ConstraintOffsetTarget.swift; sourceTree = ""; }; - C80AE828EC151DD45CDE7E73BB5017A3 /* AMapSearchObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchObj.h; path = AMapSearchKit.framework/Headers/AMapSearchObj.h; sourceTree = ""; }; - C816BC11F808237533A304258E6B9519 /* MJExtension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MJExtension-dummy.m"; sourceTree = ""; }; - C8317EDB1958C164EFD8B633A18F397F /* SGSoundEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGSoundEffect.m; path = SGQRCode/SoundEffect/SGSoundEffect.m; sourceTree = ""; }; - C858A960686949F3A01BB1D7772ED340 /* ResourceBundle-Kingfisher-Kingfisher-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Kingfisher-Kingfisher-Info.plist"; sourceTree = ""; }; - C871A85DF5F63890D0CDE0EB704B3560 /* YBImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBImage.h; path = YBImageBrowser/Image/YBImage.h; sourceTree = ""; }; - C88A87AA6AF553A2EB67FF48CC974717 /* RxTabBarDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTabBarDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTabBarDelegateProxy.swift; sourceTree = ""; }; - C8ACFECE5109B41E1551D2BB7FA2F9FE /* MAOverlayPathRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOverlayPathRenderer.h; path = MAMapKit.framework/Headers/MAOverlayPathRenderer.h; sourceTree = ""; }; - C8AD3E343425805782DD3A683C4AB359 /* RxSwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwift-umbrella.h"; sourceTree = ""; }; - C8F3F7FD348306025BE447B96E130A74 /* DefaultAnimationCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultAnimationCache.swift; path = Sources/Public/AnimationCache/DefaultAnimationCache.swift; sourceTree = ""; }; - C8FC5D8D4CAD082AFDF06500203F157F /* VideoEditResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditResult.swift; path = Sources/HXPHPicker/Editor/VideoEditResult.swift; sourceTree = ""; }; - C90B489DE950DD12FC8930AC3EAFE6AB /* CocoaLumberjack-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaLumberjack-umbrella.h"; sourceTree = ""; }; - C90C40D569DD82664EC7B02F8B760153 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/Core/ParameterEncoding.swift; sourceTree = ""; }; - C90D4DF6532EC599263E6EAF62E3B481 /* YBIBOperateBrowserProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBOperateBrowserProtocol.h; path = YBImageBrowser/Protocol/YBIBOperateBrowserProtocol.h; sourceTree = ""; }; - C961DD0E63F5AF416C1B3514F9AEBF47 /* OIMNotificationElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMNotificationElem.h; path = OpenIMSDK/Model/OIMNotificationElem.h; sourceTree = ""; }; - C966D75070D79B9D443364A819C0C3F2 /* SGQRCode.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = SGQRCode.bundle; path = SGQRCode/SGQRCode.bundle; sourceTree = ""; }; - C96FCAF290E620B33506E5F6F3F26719 /* IQKeyboardToolbarManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbarManager.release.xcconfig; sourceTree = ""; }; - C9889E1671FA4909135510BCB410874E /* AnimatorNodeDebugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatorNodeDebugging.swift; path = Sources/Private/Utility/Debugging/AnimatorNodeDebugging.swift; sourceTree = ""; }; - C9A10F0B9F0023A1C363E7C4517DDDBD /* YYImageCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYImageCoder.h; path = YYImage/YYImageCoder.h; sourceTree = ""; }; - C9DCB3383235EDBA4F3C971A96B27409 /* PriorityQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PriorityQueue.swift; path = Platform/DataStructures/PriorityQueue.swift; sourceTree = ""; }; - CA1147DBAED55DD02A850E00497B92DB /* EpoxyableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyableView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/EpoxyableView.swift; sourceTree = ""; }; - CA4B9D8BFF9CF3F65AD2916D9197DF2E /* PickerResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerResult.swift; path = Sources/HXPHPicker/Picker/PickerResult.swift; sourceTree = ""; }; - CAA1AA03A70AEA0C5A111D92FB984179 /* mux.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = mux.h; path = src/webp/mux.h; sourceTree = ""; }; - CAAF2B1865A817D3B34BE0FED63702E8 /* ReplaySubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReplaySubject.swift; path = RxSwift/Subjects/ReplaySubject.swift; sourceTree = ""; }; - CAC75994F054E5C98A812D17C7527B6E /* ControlProperty+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlProperty+Driver.swift"; path = "RxCocoa/Traits/Driver/ControlProperty+Driver.swift"; sourceTree = ""; }; - CACA5F91164444FD018604161211CEC8 /* StyleIDProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StyleIDProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/StyleIDProviding.swift; sourceTree = ""; }; - CACB3BCA3DB641C9B591E625330BA336 /* SDWebImageDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDefine.h; path = SDWebImage/Core/SDWebImageDefine.h; sourceTree = ""; }; - CAD52A080AAEE8A81783F36FB0CFFCE0 /* PhotoAsset+Codable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoAsset+Codable.swift"; path = "Sources/HXPHPicker/Picker/Model/PhotoAsset+Codable.swift"; sourceTree = ""; }; - CAE3B4042285FE77961E90A1CFBB8D5B /* DDContextFilterLogFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDContextFilterLogFormatter.m; path = Sources/CocoaLumberjack/Extensions/DDContextFilterLogFormatter.m; sourceTree = ""; }; - CAE7582B7C4BC8106041A1A832420987 /* EllipseNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EllipseNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift; sourceTree = ""; }; - CB04A3F038AB5357DF6579E119AC574D /* DDFileLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDFileLogger.m; path = Sources/CocoaLumberjack/DDFileLogger.m; sourceTree = ""; }; - CB06F3844E78B224186730DD60CA0865 /* RxTableViewReactiveArrayDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewReactiveArrayDataSource.swift; path = RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift; sourceTree = ""; }; - CB11F69CDAC50ABF5A1340AA052D39B4 /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; - CB1D91FC1AD6D99D86E78F301E3C0948 /* UIScrollView+IQKeyboardManagerExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+IQKeyboardManagerExtension.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIScrollView+IQKeyboardManagerExtension.swift"; sourceTree = ""; }; - CB4260D2F04BDE7B69E9332D05E23C54 /* YBImageBrowserVideo.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = YBImageBrowserVideo.bundle; path = Video/YBImageBrowserVideo.bundle; sourceTree = ""; }; - CB5268316387EAF511FE3FDA946F4C23 /* OIMFriendApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMFriendApplication.m; path = OpenIMSDK/Model/OIMFriendApplication.m; sourceTree = ""; }; - CB58640348852BF733D2F0BD5379DDE5 /* ImageDrawing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDrawing.swift; path = Sources/Image/ImageDrawing.swift; sourceTree = ""; }; - CB5ED48D1C2FEE6F9B6572BC3DC8D105 /* YBIBSheetView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBSheetView.h; path = YBImageBrowser/ToolView/YBIBSheetView.h; sourceTree = ""; }; - CB5F439F4729CFD04024FF05BCA74AE0 /* sharpyuv_cpu.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_cpu.c; path = sharpyuv/sharpyuv_cpu.c; sourceTree = ""; }; - CB6180AA64A729F29163E3E4DA72B8DA /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Sources/ConstraintMakerFinalizable.swift; sourceTree = ""; }; - CB74ADFB0BA860873B5973342495B456 /* ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist"; sourceTree = ""; }; - CB7FF1E8200FEA7E67B104C8495FFCE9 /* AMapSearchKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapSearchKit.h; path = AMapSearchKit.framework/Headers/AMapSearchKit.h; sourceTree = ""; }; - CB8D8C5604011BB605F1D1874F011C0E /* YBIBToastView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBToastView.m; path = YBImageBrowser/AuxiliaryView/YBIBToastView.m; sourceTree = ""; }; - CB9679AFC8A1A93C637AD8DA4B2A103C /* YBImageBrowser+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBImageBrowser+Internal.h"; path = "YBImageBrowser/Base/YBImageBrowser+Internal.h"; sourceTree = ""; }; - CB9C1CC0C5611BE2E3A59B48E0E6260A /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/Features/MultipartFormData.swift; sourceTree = ""; }; - CBAAAB6F1E8977B72F66A0CD9B335B76 /* DefaultsAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsAdapter.swift; path = Sources/DefaultsAdapter.swift; sourceTree = ""; }; - CBBF1F672E38253186ECF2C0972D5FC1 /* PHLivePhotoView+Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PHLivePhotoView+Kingfisher.swift"; path = "Sources/Extensions/PHLivePhotoView+Kingfisher.swift"; sourceTree = ""; }; - CBBFEC0A19957F2E4DC6F87C398A3318 /* Task.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Task.swift; path = Sources/Moya/Task.swift; sourceTree = ""; }; - CBCF16C1D8B08EBF7F70BEF64DE8914F /* CLIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLIColor.m; path = Sources/CocoaLumberjack/CLI/CLIColor.m; sourceTree = ""; }; - CBD645FB492CC8ABAF8474214E280CC7 /* muxedit.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxedit.c; path = src/mux/muxedit.c; sourceTree = ""; }; - CC24CDDC3C41D4E90FB7A47FD047D37A /* frame_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = frame_dec.c; path = src/dec/frame_dec.c; sourceTree = ""; }; - CC3798F5D6C9EBC45E8AABCABA094C90 /* UIViewConfiguringSwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIViewConfiguringSwiftUIView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/UIViewConfiguringSwiftUIView.swift; sourceTree = ""; }; - CC3D8146FC10F0640612BFBDF8B23019 /* Differentiator-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Differentiator-prefix.pch"; sourceTree = ""; }; - CC4D4B98E55AECCD92A3E8F03E8B4975 /* DisposeBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisposeBase.swift; path = RxSwift/Disposables/DisposeBase.swift; sourceTree = ""; }; - CC62DE620BE171E4861A660B5110C9F4 /* Infallible+Zip+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Zip+arity.swift"; path = "RxSwift/Traits/Infallible/Infallible+Zip+arity.swift"; sourceTree = ""; }; - CCA5382951AE75A98792835CE4E99624 /* Core+UIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIView.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIView.swift"; sourceTree = ""; }; - CCE90CA40DDCE3B2A7557F7300F48BDA /* TimePeriodGroup.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodGroup.swift; path = Sources/SwiftDate/TimePeriod/Groups/TimePeriodGroup.swift; sourceTree = ""; }; - CD009445A239BEED49369C3E6069079A /* SendMessageCallbackProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SendMessageCallbackProxy.h; path = OpenIMSDK/CallbackProxy/SendMessageCallbackProxy.h; sourceTree = ""; }; - CD0484F6BC5E5083AA0A3493E6A7E299 /* SDDisplayLink.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDDisplayLink.h; path = SDWebImage/Private/SDDisplayLink.h; sourceTree = ""; }; - CD18DA084428987D08B37C1AEAC65E52 /* YBImageBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBImageBrowser.h; path = YBImageBrowser/YBImageBrowser.h; sourceTree = ""; }; - CD3394AEB6113760F63CD2C8E55F0743 /* KeyframeGroup+exactlyOneKeyframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KeyframeGroup+exactlyOneKeyframe.swift"; path = "Sources/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift"; sourceTree = ""; }; - CD4BB25B01C11AECAA30B2010211F454 /* GIFImageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GIFImageView.swift; path = Sources/HXPHPicker/Picker/View/GIFImageView.swift; sourceTree = ""; }; - CD53BA557DF4BC4953A4AB9EC6A4FF57 /* CGFloatExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CGFloatExtensions.swift; path = Sources/Private/Utility/Extensions/CGFloatExtensions.swift; sourceTree = ""; }; - CD572E7B11147DD4A8222AA6C45D15D7 /* Timer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timer.swift; path = RxSwift/Observables/Timer.swift; sourceTree = ""; }; - CD8E93CCDB5866098FEF8856FFB20F0F /* SwiftyUserDefaults-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyUserDefaults-umbrella.h"; sourceTree = ""; }; - CDABE3383A3C68EFCCE02018595AFFB3 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = ""; }; - CDB3370B2D9A7B4B4FEE5BBFAC62D485 /* utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = utils.h; path = src/utils/utils.h; sourceTree = ""; }; - CDB7FF942B90BE067AA3B27A25238BA5 /* muxread.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxread.c; path = src/mux/muxread.c; sourceTree = ""; }; - CDFE58BD47F6BD0FC9FB7D6FB1471943 /* lottie-ios-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "lottie-ios-dummy.m"; sourceTree = ""; }; - CE5309C36CA7E076181ADB8990797A85 /* libwebp.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = libwebp.release.xcconfig; sourceTree = ""; }; - CE5BA2F6D6A3EBD1C8BCA53133492AF9 /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = ""; }; - CE6A24FF0DA7E2B9D9E7D6432F783172 /* NSButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSButton+WebCache.h"; path = "SDWebImage/Core/NSButton+WebCache.h"; sourceTree = ""; }; - CE864E35FBE5668BF392096A7DF58B8C /* Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operators.swift; path = Sources/Operators.swift; sourceTree = ""; }; - CE89B0E952C22E11B64A894D84F8DB83 /* Scan.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Scan.swift; path = RxSwift/Observables/Scan.swift; sourceTree = ""; }; - CEB0F03F7DE9B75763FEE50F19F9CFE7 /* dsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dsp.h; path = src/dsp/dsp.h; sourceTree = ""; }; - CEBFF121DDC08559C71E1B1D903EBD52 /* cost_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_mips32.c; path = src/dsp/cost_mips32.c; sourceTree = ""; }; + C444211868DE12D238B5BF354455FC4D /* _RXObjCRuntime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _RXObjCRuntime.h; path = RxCocoa/Runtime/include/_RXObjCRuntime.h; sourceTree = ""; }; + C4457220F18221DEEE691C455779CA75 /* TimePeriodChain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodChain.swift; path = Sources/SwiftDate/TimePeriod/Groups/TimePeriodChain.swift; sourceTree = ""; }; + C4542B0278922709B2677B3742D449B8 /* NodeProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NodeProperty.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/NodeProperty.swift; sourceTree = ""; }; + C45803DEA9BBD6D69D4D24C69F4DAFA1 /* OIMManager+Group.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Group.m"; path = "OpenIMSDK/Interface/OIMManager+Group.m"; sourceTree = ""; }; + C4822263D21DDDA08A1EF2995BBE39B7 /* filters_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters_msa.c; path = src/dsp/filters_msa.c; sourceTree = ""; }; + C490335440F75C578775EFDF160BC241 /* EpoxySwiftUILayoutMargins.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxySwiftUILayoutMargins.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxySwiftUILayoutMargins.swift; sourceTree = ""; }; + C4AEF7DE14166C25132B610DAB1F3C00 /* MJRefreshConst.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshConst.m; path = MJRefresh/MJRefreshConst.m; sourceTree = ""; }; + C4BC4E9795B94391814F9D9D11446D5A /* EditorStickerTrashView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerTrashView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerTrashView.swift; sourceTree = ""; }; + C4C7C3A5F449BC7B132C23B891237D99 /* OIMSimpleResultInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSimpleResultInfo.m; path = OpenIMSDK/Model/OIMSimpleResultInfo.m; sourceTree = ""; }; + C4D82C83902BC9F0FB3834FA90DDF005 /* BehaviorRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorRelay.swift; path = RxRelay/BehaviorRelay.swift; sourceTree = ""; }; + C53A4E9FEDAEA9A964D888B3B4ACDE62 /* Differentiator.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Differentiator.modulemap; sourceTree = ""; }; + C56F7B90029A72DEC58CF844484D77F5 /* OIMUserInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMUserInfo.m; path = OpenIMSDK/Model/OIMUserInfo.m; sourceTree = ""; }; + C5727BECEE9618152FED1401FF57F6A0 /* AnimationFontProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationFontProvider.swift; path = Sources/Public/FontProvider/AnimationFontProvider.swift; sourceTree = ""; }; + C577C2D8E39F304146E0343775615D10 /* Queue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Queue.swift; path = Platform/DataStructures/Queue.swift; sourceTree = ""; }; + C58AC090CF55DF65FBCB1E83D9A44E0A /* AMapURLSearch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearch.h; path = AMapFoundationKit.framework/Headers/AMapURLSearch.h; sourceTree = ""; }; + C5CE467F7D21EE255E3C0AC93EEC217A /* RxDataSources.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxDataSources.modulemap; sourceTree = ""; }; + C5CFBD20109F66699F30CEBC6AB89D14 /* YBIBVideoTopBar.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoTopBar.m; path = Video/YBIBVideoTopBar.m; sourceTree = ""; }; + C5D66152891A6C0CFE6DE74BD7438631 /* EpoxyModelProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyModelProperty.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelProperty.swift; sourceTree = ""; }; + C5DEF7F662508A12F2DEF686D8ED3570 /* Infallible+Bind.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Bind.swift"; path = "RxCocoa/Common/Infallible+Bind.swift"; sourceTree = ""; }; + C5E34F664A26E302A185A09496929E75 /* View+ValueChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "View+ValueChanged.swift"; path = "Sources/Private/Utility/Helpers/View+ValueChanged.swift"; sourceTree = ""; }; + C5E4AC95D725AE9914E15B02C6040935 /* YBIBDataMediator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBDataMediator.m; path = YBImageBrowser/Base/YBIBDataMediator.m; sourceTree = ""; }; + C613E0A1F41A822EED765247AC1F954D /* SDAsyncBlockOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAsyncBlockOperation.m; path = SDWebImage/Private/SDAsyncBlockOperation.m; sourceTree = ""; }; + C677F1F6911AEB8A0B1C0078557F254F /* YBIBCopywriter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBCopywriter.m; path = YBImageBrowser/Helper/YBIBCopywriter.m; sourceTree = ""; }; + C697541991BB83795F62A7EAC8FD2B49 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; }; + C6AA4F5CE1C7962178B6099FA00101B4 /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/Core/AFError.swift; sourceTree = ""; }; + C6D1A8F44FA7834D7AE24263F75B667B /* IQKeyboardManagerSwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardManagerSwift.modulemap; sourceTree = ""; }; + C6D30DDFE1BF6DACA6804172A77CAFA4 /* enc_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_sse41.c; path = src/dsp/enc_sse41.c; sourceTree = ""; }; + C6E63714E5163D46EAEF91865D01ECDC /* lossless.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lossless.h; path = src/dsp/lossless.h; sourceTree = ""; }; + C70EC81EB5E7986D89207A07B93295B9 /* HistoricalScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HistoricalScheduler.swift; path = RxSwift/Schedulers/HistoricalScheduler.swift; sourceTree = ""; }; + C73C04647C0D259054E566EDEDB52C13 /* AtomicInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicInt.swift; path = Platform/AtomicInt.swift; sourceTree = ""; }; + C73EB33F3F32ABFF91A2BD8F436835E0 /* CompositeDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositeDisposable.swift; path = RxSwift/Disposables/CompositeDisposable.swift; sourceTree = ""; }; + C7AD74FA213A3FFDCA24D48ABA00E8F0 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoGifFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h; sourceTree = ""; }; + C7C170BCC9E743F204BF744A97B3443F /* AMapGeoFenceRegionObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceRegionObj.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceRegionObj.h; sourceTree = ""; }; + C7E8128FA3C4DC6DC87343890BB0751E /* IQKeyboardToolbarManager-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbarManager-prefix.pch"; sourceTree = ""; }; + C80034199622607DF099889E0346FDEB /* ObjectMapper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ObjectMapper-prefix.pch"; sourceTree = ""; }; + C8009C99851F258D3BAC40E139579AC5 /* ObjectMapper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ObjectMapper.debug.xcconfig; sourceTree = ""; }; + C8277B036CADFDB18A9032F3676C20D1 /* KF.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KF.swift; path = Sources/General/KF.swift; sourceTree = ""; }; + C84DB09A5FF186DAD4C96289F6032C61 /* PhotoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoManager.swift; path = Sources/HXPHPicker/Core/Util/PhotoManager.swift; sourceTree = ""; }; + C85509D11138B3103A30250316CBE2D6 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; }; + C86BA257469B7EDB7C543D6521539A53 /* ViewProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ViewProviding.swift; sourceTree = ""; }; + C8EAC22AF845ED2317153E3913ACB6B1 /* AnimatedControl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedControl.swift; path = Sources/Public/Controls/AnimatedControl.swift; sourceTree = ""; }; + C90D59230855356AC2C7ECAC0C2A6DAB /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJRefresh.m"; path = "MJRefresh/UIScrollView+MJRefresh.m"; sourceTree = ""; }; + C945AE6B7986CFDFCD103CCDC547424A /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = RxSwift/Observables/Zip.swift; sourceTree = ""; }; + C946A52BE769027A887483647665E8F7 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; + C94D912ED11FB929D163DE90CA7CBF58 /* YBIBOrientationReceiveProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBOrientationReceiveProtocol.h; path = YBImageBrowser/Protocol/YBIBOrientationReceiveProtocol.h; sourceTree = ""; }; + C9714A1AD9F2DF6D9204ED18A1C836E6 /* IQRootControllerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQRootControllerConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQRootControllerConfiguration.swift; sourceTree = ""; }; + C9A1F58E7DA61B4F02959233658F889B /* Differentiator-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Differentiator-Info.plist"; sourceTree = ""; }; + C9AEE725EBC8AF812D343242835B5448 /* OpenIMSDK-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OpenIMSDK-umbrella.h"; sourceTree = ""; }; + C9FE80D4284F880557EC33949896271E /* SDWebImageTransitionInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageTransitionInternal.h; path = SDWebImage/Private/SDWebImageTransitionInternal.h; sourceTree = ""; }; + CA06EA67576AB4DA1C662F80B2FC1A3A /* MAPinAnnotationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPinAnnotationView.h; path = MAMapKit.framework/Headers/MAPinAnnotationView.h; sourceTree = ""; }; + CA1127638FB310D5F12AAE25ED25158A /* YBIBDefaultWebImageMediator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBDefaultWebImageMediator.m; path = YBImageBrowser/WebImageMediator/YBIBDefaultWebImageMediator.m; sourceTree = ""; }; + CA1E32AF2B6B2E567E088EE3153CA7E8 /* NSObject+MJClass.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJClass.h"; path = "MJExtension/NSObject+MJClass.h"; sourceTree = ""; }; + CA33EB72D1CACE2D1D5F62ABB5C0D627 /* ssim_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = ssim_sse2.c; path = src/dsp/ssim_sse2.c; sourceTree = ""; }; + CA53A2E29927041974A34C30773D58EC /* ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist"; sourceTree = ""; }; + CA661D4F822BB9E46CE4E3531131BCF2 /* UIScrollView+reachedBottom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+reachedBottom.swift"; path = "Source/RxCocoa/UIScrollView+reachedBottom.swift"; sourceTree = ""; }; + CA7328C77B8873228D8F9F083DD76E06 /* MarqueeLabel-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MarqueeLabel-dummy.m"; sourceTree = ""; }; + CA7DEF12C876C557DDFF6CC3B95D863F /* YBIBWebImageMediator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBWebImageMediator.h; path = YBImageBrowser/WebImageMediator/YBIBWebImageMediator.h; sourceTree = ""; }; + CAB2565A0DA889576964CD69CC948242 /* MJRefresh.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJRefresh.release.xcconfig; sourceTree = ""; }; + CAC6175EFA83D8732500292A8A30189C /* PhotoPreviewSelectedView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewSelectedView.swift; path = Sources/HXPHPicker/Picker/View/PhotoPreviewSelectedView.swift; sourceTree = ""; }; + CACCF45640195EFFB1603F926C73CFA3 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = ""; }; + CAEA5657079E5ED6EC6D28C57EB4C2BF /* AnimatedProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/AnimatedProviding.swift; sourceTree = ""; }; + CAFECD5FCBEEF8FDD448C9D99E7875DB /* DataTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataTransform.swift; path = Sources/DataTransform.swift; sourceTree = ""; }; + CB216BE0D8FC0CAFD94F4FBE9464267E /* NullCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NullCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/NullCompositionLayer.swift; sourceTree = ""; }; + CB226B090B92DCBB1D0C6EDDAC487C5D /* upsampling_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_msa.c; path = src/dsp/upsampling_msa.c; sourceTree = ""; }; + CB49502221C6831562B6F3334074EEB2 /* Core+UIDevice.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIDevice.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIDevice.swift"; sourceTree = ""; }; + CBA1509DD9D34552546037937DF23074 /* RxTableViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDataSourceProxy.swift; sourceTree = ""; }; + CC26C4F91EEB4297476C8D0F8B4D97BA /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Core/Protected.swift; sourceTree = ""; }; + CC59B2281AD964D6B8FED7B26F17BEC0 /* UIImage+Transform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Transform.h"; path = "SDWebImage/Core/UIImage+Transform.h"; sourceTree = ""; }; + CC704F85E6DECFEFBA3A0F282033AE27 /* SDWebImageDownloaderOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderOperation.h; path = SDWebImage/Core/SDWebImageDownloaderOperation.h; sourceTree = ""; }; + CC7B8DCEBB0FD4064FFEAB1E9BA967D1 /* IQKeyboardToolbar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbar.swift; path = IQKeyboardToolbar/Classes/IQKeyboardToolbar.swift; sourceTree = ""; }; + CC9713B9525A20943182AB6D5E22A57F /* AssetLibrary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssetLibrary.swift; path = Sources/Private/Model/Assets/AssetLibrary.swift; sourceTree = ""; }; + CCAFF5A5740D13881CB89FB2332CF4BC /* VideoEditorMusic.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorMusic.swift; path = Sources/HXPHPicker/Editor/Model/VideoEditorMusic.swift; sourceTree = ""; }; + CCD7BCD9C08B7D6A5BDF7D7B7E93E2C4 /* UITableView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+Rx.swift"; path = "RxCocoa/iOS/UITableView+Rx.swift"; sourceTree = ""; }; + CCDE73E0140C3BC9F72E28078BAB4C4E /* SDImageHEICCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageHEICCoder.h; path = SDWebImage/Core/SDImageHEICCoder.h; sourceTree = ""; }; + CD3136D404630159D6B3A92001E39C0D /* RxSwiftExt.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = RxSwiftExt.modulemap; sourceTree = ""; }; + CD66401597E7952E4DE53DEC58AC4941 /* SDWebImageDownloaderOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderOperation.m; path = SDWebImage/Core/SDWebImageDownloaderOperation.m; sourceTree = ""; }; + CD68B1602B9133E2816F156CB92881EF /* AlbumTitleViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumTitleViewConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/AlbumTitleViewConfiguration.swift; sourceTree = ""; }; + CD6EB60D65042D6F79F8E621BF2E5BBA /* MqttPublishProperties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttPublishProperties.swift; path = Source/MqttPublishProperties.swift; sourceTree = ""; }; + CD723E5D168E0DB8A0F018B2A3F37D7A /* OIMCallbacker+Closure.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMCallbacker+Closure.m"; path = "OpenIMSDK/Callbacker/OIMCallbacker+Closure.m"; sourceTree = ""; }; + CDB5DC8D1CA553235FAB3A2185D3646E /* ExtensionHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExtensionHelpers.swift; path = Sources/Utility/ExtensionHelpers.swift; sourceTree = ""; }; + CDCD962236713536EFF122F0B8A174DF /* UIScrollView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+Rx.swift"; path = "RxCocoa/iOS/UIScrollView+Rx.swift"; sourceTree = ""; }; + CE234EDBBA854CE992A10F0073B4502C /* AssociatedValues.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssociatedValues.swift; path = Sources/SwiftDate/Supports/AssociatedValues.swift; sourceTree = ""; }; + CE2D181860A376B53B945D2F66652716 /* SGQRCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGQRCode.h; path = SGQRCode/SGQRCode.h; sourceTree = ""; }; + CE2D6B492452344FA1B760EFFD9DC1E5 /* ISO8601DateTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISO8601DateTransform.swift; path = Sources/ISO8601DateTransform.swift; sourceTree = ""; }; + CE33785CC080AE402A8C5B0628D044B2 /* HXPHPicker.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = HXPHPicker.debug.xcconfig; sourceTree = ""; }; + CE53DF77216A675C25EC903D738D2065 /* AssetManager+VideoURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+VideoURL.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+VideoURL.swift"; sourceTree = ""; }; + CE9FDBE3DB1A26028345DD54F26D62B7 /* lottie-ios.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "lottie-ios.debug.xcconfig"; sourceTree = ""; }; + CEC0082E625A68C67E6A1ECF039B0BC7 /* SDWebImage.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.release.xcconfig; sourceTree = ""; }; + CEFAFB0750B061594184687C298B8099 /* UIView+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCache.m"; path = "SDWebImage/Core/UIView+WebCache.m"; sourceTree = ""; }; + CF011CAF790106FD6A19F8F57A0573BD /* Kingfisher.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Kingfisher.modulemap; sourceTree = ""; }; CF0AA9FBFBDB70858C030769541505ED /* MarqueeLabel */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MarqueeLabel; path = MarqueeLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CF0EB9FA6D0C021B52847CA29ACE00CF /* NSObject+MJKeyValue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJKeyValue.h"; path = "MJExtension/NSObject+MJKeyValue.h"; sourceTree = ""; }; CF1281E58AA1045D4B7F33FC56691C42 /* SDWebImage-SDWebImage */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "SDWebImage-SDWebImage"; path = SDWebImage.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - CF1A17DE9613A991E0CA0C68744B81D6 /* catchErrorJustComplete.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = catchErrorJustComplete.swift; path = Source/RxSwift/catchErrorJustComplete.swift; sourceTree = ""; }; - CF3E1C0900F540641D8FE98FD89E3640 /* YYImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YYImage.debug.xcconfig; sourceTree = ""; }; - CF707A0420C20F296F4B5A4D3D2534DD /* OIMSimpleResultInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSimpleResultInfo.h; path = OpenIMSDK/Model/OIMSimpleResultInfo.h; sourceTree = ""; }; - CF7AD9CDBAEA6134EE92F10730C7351A /* VideoEditorConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/VideoEditorConfiguration.swift; sourceTree = ""; }; - CFC284EBBDD148F95EC62C58F49F6110 /* EditorStickerContentView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerContentView.swift; path = Sources/HXPHPicker/Editor/View/EditorStickerContentView.swift; sourceTree = ""; }; - CFC2CA99DCB07C318665A8C26096B21E /* MJRefresh-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-umbrella.h"; sourceTree = ""; }; - CFC30276B8929B72D79A2C9660B6AAD1 /* FloatingPointType+IdentifiableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "FloatingPointType+IdentifiableType.swift"; path = "Sources/RxDataSources/FloatingPointType+IdentifiableType.swift"; sourceTree = ""; }; - CFE98B38843AE0C4E89B36CF77B5387B /* IQKeyboardManager+Appearance_Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Appearance_Deprecated.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance_Deprecated.swift"; sourceTree = ""; }; - D00CD7B0453036235F53A50214D4ED2D /* picture_csp_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_csp_enc.c; path = src/enc/picture_csp_enc.c; sourceTree = ""; }; - D076B59FCDF9A92CE3960EA4ADC0446E /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; - D08BE8E0FEE054D26245C2FF226177A0 /* Protected.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Protected.swift; path = Source/Core/Protected.swift; sourceTree = ""; }; - D09EEE16CE8246F2F7548E87067C664C /* MJRefreshHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshHeader.m; path = MJRefresh/Base/MJRefreshHeader.m; sourceTree = ""; }; - D116F3B6A0E7D4C7816BC8AF483B3EE2 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Sources/ConstraintLayoutGuide+Extensions.swift"; sourceTree = ""; }; - D1298B1397ACD7C9C70CFD673D14E200 /* OIMManager+User.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+User.m"; path = "OpenIMSDK/Interface/OIMManager+User.m"; sourceTree = ""; }; - D16E2301CBCEED8AA04536AFC22CE901 /* DelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelegateProxy.swift; path = RxCocoa/Common/DelegateProxy.swift; sourceTree = ""; }; - D1C5BEE9A50F34D3FE4396E083ABA3E4 /* DiskStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DiskStorage.swift; path = Sources/Cache/DiskStorage.swift; sourceTree = ""; }; - D1DB3CB1B0F9F8FBA6EB3FF0651D9C39 /* ViewTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewTransition.swift; path = Sources/RxDataSources/ViewTransition.swift; sourceTree = ""; }; - D1DB4F36A216F0FE7063760FC77B8302 /* OIMManager+Connection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Connection.m"; path = "OpenIMSDK/Interface/OIMManager+Connection.m"; sourceTree = ""; }; - D1F579E8E331132963070FBC936F1C2B /* URLSessionConfiguration+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLSessionConfiguration+Alamofire.swift"; path = "Source/Extensions/URLSessionConfiguration+Alamofire.swift"; sourceTree = ""; }; - D20A56560F315942F27C111F2B851792 /* YBIBImageScrollView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageScrollView.m; path = YBImageBrowser/Image/YBIBImageScrollView.m; sourceTree = ""; }; - D22A61EEFB555B9222253E7202D107B0 /* Runtime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Runtime.swift; path = Sources/Utility/Runtime.swift; sourceTree = ""; }; - D2509D403C834A34D7305D4C90158B37 /* ShapeCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/ShapeCompositionLayer.swift; sourceTree = ""; }; - D2596C6DAC2A8B615E67D865765BA5EB /* UISearchBar+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UISearchBar+Rx.swift"; path = "RxCocoa/iOS/UISearchBar+Rx.swift"; sourceTree = ""; }; - D27C029A21462E439909BC6A1460A0D3 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJExtension.h"; path = "MJRefresh/UIScrollView+MJExtension.h"; sourceTree = ""; }; - D2BF88E4E6955245A365CE72B7B29331 /* AnyEncodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyEncodable.swift; path = Sources/Moya/AnyEncodable.swift; sourceTree = ""; }; - D2F3CE00946882B137C6D3ADE1F17BF5 /* ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist"; sourceTree = ""; }; - D2F6C3141B01558E41612E3CB9A5B3F5 /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+MASDebugAdditions.m"; path = "Masonry/NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = ""; }; - D313154C522FDF13B1B8BB1616A141BA /* decode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = decode.h; path = src/webp/decode.h; sourceTree = ""; }; - D32609E1BA7CBC157907FAC2FA760E85 /* OpenIMSDK-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "OpenIMSDK-Info.plist"; sourceTree = ""; }; - D33902803F47DEADED2DFA7B7C947887 /* HTTPHeaders.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPHeaders.swift; path = Source/Core/HTTPHeaders.swift; sourceTree = ""; }; - D33E322A3E5E2970FF84AD445CACE4F1 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/Resources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - D3BF4F0F1230764811DE5441812E7D81 /* Moya-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Moya-Info.plist"; sourceTree = ""; }; - D3C3F3D9536425D441065A0DD49296FA /* SDImageCacheConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheConfig.h; path = SDWebImage/Core/SDImageCacheConfig.h; sourceTree = ""; }; - D3CB5318B015CED596B8976F167CB700 /* ControlEvent+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ControlEvent+Signal.swift"; path = "RxCocoa/Traits/Signal/ControlEvent+Signal.swift"; sourceTree = ""; }; - D3DD3163F3F69703D57F0C5EE33BFEE0 /* PhotoEditResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditResult.swift; path = Sources/HXPHPicker/Editor/PhotoEditResult.swift; sourceTree = ""; }; - D3DF20CFF93070089A3F83A2130C4121 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MJRefresh.m"; path = "MJRefresh/NSBundle+MJRefresh.m"; sourceTree = ""; }; - D3FAE393EA0CB065CF13EBD52B25C74E /* backward_references_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = backward_references_enc.h; path = src/enc/backward_references_enc.h; sourceTree = ""; }; - D414BEB5C18132E781D4587C8EFA1857 /* Masonry.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.release.xcconfig; sourceTree = ""; }; - D42BD13DE088E55D9440C64037EC2796 /* SDCallbackQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDCallbackQueue.h; path = SDWebImage/Core/SDCallbackQueue.h; sourceTree = ""; }; - D42F775E38DE1A545F3B25BD8738ACF2 /* Kingfisher.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Kingfisher.debug.xcconfig; sourceTree = ""; }; - D460BB20DEA54F4F1227BF8309D4153C /* ImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProvider.swift; path = Sources/General/ImageSource/ImageDataProvider.swift; sourceTree = ""; }; - D477BCCAE115C780D1F45A92E5F3BE15 /* CGImage+WebP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CGImage+WebP.h"; path = "Sources/KingfisherWebP-ObjC/include/CGImage+WebP.h"; sourceTree = ""; }; - D48287B30F0088EC0C5310945CA4B7A1 /* PolygonNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PolygonNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift; sourceTree = ""; }; - D4F2F0EA5C534B941F600989F2ADB613 /* MBProgressHUD-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-umbrella.h"; sourceTree = ""; }; + CF265D01BCDF891475E8B6CA021874DD /* ShapeItemLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeItemLayer.swift; path = Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift; sourceTree = ""; }; + CF2AB942FDE7274CE1F5D9667B6EC127 /* IQKeyboardReturnManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardReturnManager-dummy.m"; sourceTree = ""; }; + CF3AD82EC39778DB621B9AC73985F627 /* Cancellable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Cancellable.swift; path = Sources/Moya/Cancellable.swift; sourceTree = ""; }; + CF54465B2588A0521DFFB1FF4940DF6C /* RxSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RxSwift-dummy.m"; sourceTree = ""; }; + CF71F4E4CAE92E4661A148450BC4B394 /* Glyph.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Glyph.swift; path = Sources/Private/Model/Text/Glyph.swift; sourceTree = ""; }; + CF7AC93836316D77CDFA574E1609FB6B /* ConcurrentMainScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConcurrentMainScheduler.swift; path = RxSwift/Schedulers/ConcurrentMainScheduler.swift; sourceTree = ""; }; + CF88F372EC85C9D417C7FD9226BE7F3F /* SGPermission.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGPermission.m; path = SGQRCode/Permission/SGPermission.m; sourceTree = ""; }; + CF8B49FE54508962DCCAE48FF9C6BE2C /* YBIBImageCache+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBImageCache+Internal.h"; path = "YBImageBrowser/Image/YBIBImageCache+Internal.h"; sourceTree = ""; }; + CF9DEF0B8FE64352C40FF7FADFC32A4E /* UIColorExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UIColorExtension.swift; path = Sources/Public/iOS/UIColorExtension.swift; sourceTree = ""; }; + CFABBFE3E23539AC8A25CB8DF205E4E2 /* Defaults+Observing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+Observing.swift"; path = "Sources/Defaults+Observing.swift"; sourceTree = ""; }; + CFABCB79861B27F18DA91612184F6887 /* YBIBVideoView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoView.m; path = Video/YBIBVideoView.m; sourceTree = ""; }; + CFD05E64CF85F8CA7E5A6576121884A0 /* IQKeyboardToolbarPlaceholderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarPlaceholderConfiguration.swift; path = IQKeyboardToolbar/Classes/Placeholder/IQKeyboardToolbarPlaceholderConfiguration.swift; sourceTree = ""; }; + CFD6B054FF46A41FC9AEAF36A1E02246 /* AMapFoundationVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationVersion.h; path = AMapFoundationKit.framework/Headers/AMapFoundationVersion.h; sourceTree = ""; }; + CFE969BF87DF6A4473ACCB1E8565BDF0 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+ToolbarManagerDeprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardToolbarManager/IQKeyboardManager+ToolbarManagerDeprecated.swift"; sourceTree = ""; }; + D00321F8E978E74F4F4D60B3EB34997C /* AnimatedButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimatedButton.swift; path = Sources/Public/Controls/AnimatedButton.swift; sourceTree = ""; }; + D020FF9A5704378B0D8B41BF65396696 /* MqttCocoaAsyncSocket.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MqttCocoaAsyncSocket.debug.xcconfig; sourceTree = ""; }; + D031895E50BDFD816B263068206932EA /* DidEndDisplayingProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DidEndDisplayingProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidEndDisplayingProviding.swift; sourceTree = ""; }; + D0437BBB36BED63582B9839D1E20DCA8 /* URLNavigator-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "URLNavigator-dummy.m"; sourceTree = ""; }; + D057D2D724536C69CB371BBB638D3B1C /* DispatchQueue+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Extensions.swift"; path = "Platform/DispatchQueue+Extensions.swift"; sourceTree = ""; }; + D06FBFCACDB5DEA5E6A56C03EDB2CCFE /* tree_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = tree_dec.c; path = src/dec/tree_dec.c; sourceTree = ""; }; + D0716716AD81AB2B2F5991A5E536BC03 /* Photos.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Photos.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Photos.framework; sourceTree = DEVELOPER_DIR; }; + D094492C3C9C70F3767ABB9EF6D63919 /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; + D09EC7A968EE24B6056BBB55B155B841 /* MqttCocoaAsyncSocket-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MqttCocoaAsyncSocket-Info.plist"; sourceTree = ""; }; + D0A5F579E5060D3B3840AA15280205F8 /* MJRefreshStateTrailer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateTrailer.m; path = MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m; sourceTree = ""; }; + D0A90D1C88AE636E67296B135530FC21 /* Combine.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Combine.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/Combine.framework; sourceTree = DEVELOPER_DIR; }; + D0DE2E7445B1ACF99F6851237BF43962 /* huffman_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = huffman_utils.c; path = src/utils/huffman_utils.c; sourceTree = ""; }; + D0E21354913A22F0F4F3F224BF3699C6 /* IQKeyboardManager+Resign.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Resign.swift"; path = "IQKeyboardManagerSwift/Resign/IQKeyboardManager+Resign.swift"; sourceTree = ""; }; + D1023870AD95A079CF71B1619FF07463 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/Extensions/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; + D105F796848D507AEBB1461B0F8A6D7C /* TransformOf.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TransformOf.swift; path = Sources/TransformOf.swift; sourceTree = ""; }; + D10D891E1B9E58E640DDE11239776223 /* CLIColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLIColor.m; path = Sources/CocoaLumberjack/CLI/CLIColor.m; sourceTree = ""; }; + D13ADEC01AEBCFADCF283E3936FD6C64 /* PhotoManager+Audio.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoManager+Audio.swift"; path = "Sources/HXPHPicker/Core/Util/PhotoManager+Audio.swift"; sourceTree = ""; }; + D151E0C0C8749B59E1D6C1C422EE6C7F /* SDAnimatedImageView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImageView.m; path = SDWebImage/Core/SDAnimatedImageView.m; sourceTree = ""; }; + D15EDFC11F19BC7A78A242A7BC5BB452 /* RoundedCorners.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RoundedCorners.swift; path = Sources/Private/Model/ShapeItems/RoundedCorners.swift; sourceTree = ""; }; + D1A524C5B6ECAE4BAC7424565E81C313 /* enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc.c; path = src/dsp/enc.c; sourceTree = ""; }; + D1B597661EBD1744C9ED9D0DF6770F00 /* Moya.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Moya.modulemap; sourceTree = ""; }; + D1B7F2C96D885D7A145E648320C1726E /* SwiftyJSON.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.release.xcconfig; sourceTree = ""; }; + D1EC99C6BE34665E03162207933049DA /* RxCocoa-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxCocoa-umbrella.h"; sourceTree = ""; }; + D1FC999A64120C01A02C6491C02500C3 /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Sources/ConstraintView+Extensions.swift"; sourceTree = ""; }; + D20EDFE87D7E3E82F987FC08A4F00CEE /* UIView+RespondersObjc.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+RespondersObjc.swift"; path = "IQKeyboardToolbarManager/Classes/UIKitExtensions/UIView+RespondersObjc.swift"; sourceTree = ""; }; + D2168315CB9F6330A6402FFFDD1D6C30 /* libwebp-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "libwebp-umbrella.h"; sourceTree = ""; }; + D234CC248B770A58420B85F0D51049CD /* Masonry-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Masonry-dummy.m"; sourceTree = ""; }; + D270B58C52D873E88FE7A688C880CC47 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Sources/Constraint.swift; sourceTree = ""; }; + D27DD767F6F3E75D625CE059F48E6518 /* SkipUntil.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SkipUntil.swift; path = RxSwift/Observables/SkipUntil.swift; sourceTree = ""; }; + D330042F8A70A7845C60AA7BDA165452 /* upsampling_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_neon.c; path = src/dsp/upsampling_neon.c; sourceTree = ""; }; + D337FF64DAB0EF1DCF5E657FD4FA25D3 /* CachedResponseHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CachedResponseHandler.swift; path = Source/Features/CachedResponseHandler.swift; sourceTree = ""; }; + D387B9EF45C30A00D99BDDC504B89E42 /* mergeWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = mergeWith.swift; path = Source/RxSwift/mergeWith.swift; sourceTree = ""; }; + D3963C0BEB66BA33C14419B6AB8E504C /* UIView+WebCacheState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+WebCacheState.m"; path = "SDWebImage/Core/UIView+WebCacheState.m"; sourceTree = ""; }; + D3BAA59A5DF299D939954B1D0B6BAB74 /* DelegateProxyType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelegateProxyType.swift; path = RxCocoa/Common/DelegateProxyType.swift; sourceTree = ""; }; + D3D05FEE8ADDAB27B74995F22E6B4A65 /* SDAnimatedImage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImage.m; path = SDWebImage/Core/SDAnimatedImage.m; sourceTree = ""; }; + D3D69DB59BA23808B9FC7CA5290FE648 /* NSObject+YBImageBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+YBImageBrowser.h"; path = "YBImageBrowser/Base/NSObject+YBImageBrowser.h"; sourceTree = ""; }; + D406042DB342E978B1216F2CBB74B1A9 /* MarqueeLabel-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "MarqueeLabel-Info.plist"; sourceTree = ""; }; + D40EFA4AC4FAF688BB84B55A3FB2CF5D /* PhotoAsset+Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoAsset+Request.swift"; path = "Sources/HXPHPicker/Picker/Model/PhotoAsset+Request.swift"; sourceTree = ""; }; + D43D3D49600F86D5154E1438DC7E9E53 /* OIMMergeElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMMergeElem.h; path = OpenIMSDK/Model/OIMMergeElem.h; sourceTree = ""; }; + D479E6B7E6471A3F32550F11B6329C0B /* PickerResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerResult.swift; path = Sources/HXPHPicker/Picker/PickerResult.swift; sourceTree = ""; }; + D47AAA9B971BFF2F0C01320573159825 /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON/SwiftyJSON.swift; sourceTree = ""; }; + D483DE2B67FB68CEE562CE2EA924D7A9 /* UIImage+MemoryCacheCost.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MemoryCacheCost.m"; path = "SDWebImage/Core/UIImage+MemoryCacheCost.m"; sourceTree = ""; }; + D4B1C2103D7684DB18D233B798D4561F /* RxMutableBox.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxMutableBox.swift; path = RxSwift/RxMutableBox.swift; sourceTree = ""; }; + D50376BA225C0801D90EFEB172B1D6C4 /* YBIBAnimatedTransition.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBAnimatedTransition.h; path = YBImageBrowser/Base/YBIBAnimatedTransition.h; sourceTree = ""; }; + D507F5D54565CF1A7DE4A2435AFE878B /* RxSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxSwift-Info.plist"; sourceTree = ""; }; D51C3D0C53D23B97B032E3BDD4F82C82 /* Differentiator */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Differentiator; path = Differentiator.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - D551093E45236015C327AE4B9BEA862F /* CombineLatest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CombineLatest.swift; path = RxSwift/Observables/CombineLatest.swift; sourceTree = ""; }; - D5955C3F11BD2E1CC1EF1F0E6CBCE5B7 /* MACustomBuildingOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomBuildingOverlay.h; path = MAMapKit.framework/Headers/MACustomBuildingOverlay.h; sourceTree = ""; }; - D5A54FE569BE26DE8F8FABCE0B34BC75 /* IQKeyboardManager+Appearance.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Appearance.swift"; path = "IQKeyboardManagerSwift/Appearance/IQKeyboardManager+Appearance.swift"; sourceTree = ""; }; - D5BE10E514BD8C3BBDC238C222A00125 /* AnyNodeProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyNodeProperty.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift; sourceTree = ""; }; - D5C78551AE5DF3F869970B180F880896 /* UIView+SwiftUIView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+SwiftUIView.swift"; path = "Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/UIView+SwiftUIView.swift"; sourceTree = ""; }; - D5D3C4F3B57323AEE14C3961892E5BBB /* DidEndDisplayingProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DidEndDisplayingProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidEndDisplayingProviding.swift; sourceTree = ""; }; - D5E02CC1CDA6213ADD2D3A5455B1CAA1 /* LivePhotoSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LivePhotoSource.swift; path = Sources/General/ImageSource/LivePhotoSource.swift; sourceTree = ""; }; - D5E28175BBC94EB18FFA4750CEFF606C /* SwiftKeychainWrapper-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftKeychainWrapper-prefix.pch"; sourceTree = ""; }; + D524EE427DDAC4E734AE277A9CADE5CC /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; + D5252618732B4F33066C92F6903EA17B /* UIImage+Metadata.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Metadata.m"; path = "SDWebImage/Core/UIImage+Metadata.m"; sourceTree = ""; }; + D5660094DA95120EE2B8164E7355B119 /* IQDeepResponderContainerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQDeepResponderContainerView.swift; path = IQKeyboardToolbarManager/Classes/IQDeepResponderContainerView.swift; sourceTree = ""; }; + D581489AF2D977E97DD236B6C4C9583B /* ConstraintMakerRelatable+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintMakerRelatable+Extensions.swift"; path = "Sources/ConstraintMakerRelatable+Extensions.swift"; sourceTree = ""; }; + D58502CF1328DAFBECC1FCDA8D9977D3 /* MABaseOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MABaseOverlay.h; path = MAMapKit.framework/Headers/MABaseOverlay.h; sourceTree = ""; }; + D59B8B70311C2BD0CBADA376182EF9B8 /* MapError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MapError.swift; path = Sources/MapError.swift; sourceTree = ""; }; + D5ABA7A9A9E3BA9AF60465C2BEBFE6C8 /* AMapURLSearchConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapURLSearchConfig.h; path = AMapFoundationKit.framework/Headers/AMapURLSearchConfig.h; sourceTree = ""; }; + D5B31C16DC507AA7342155F0550B0D79 /* IQTextInputViewNotification.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextInputViewNotification.debug.xcconfig; sourceTree = ""; }; + D5B5E409A3CB6709D1C0EC5240773D49 /* ImageDataProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProcessor.swift; path = Sources/Networking/ImageDataProcessor.swift; sourceTree = ""; }; + D5C3483F4E8C5E0015004EAF99566DAE /* IQActiveConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQActiveConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQActiveConfiguration.swift; sourceTree = ""; }; + D5D131BAEA2B1C0468C915FC762A6341 /* KeyframeExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyframeExtensions.swift; path = Sources/Private/Utility/Interpolatable/KeyframeExtensions.swift; sourceTree = ""; }; + D5DB288CA1735838DAB9C361892E54EA /* RedirectHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RedirectHandler.swift; path = Sources/Networking/RedirectHandler.swift; sourceTree = ""; }; + D5E0182FEE828DC6578A7F76F77A59EB /* CompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/CompositionLayer.swift; sourceTree = ""; }; + D5E0BA4C08C42E4F935DB00E62F37EA2 /* KFAnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFAnimatedImage.swift; path = Sources/SwiftUI/KFAnimatedImage.swift; sourceTree = ""; }; + D5E5340CF5421A590D1A25C045077BA8 /* SDImageGraphics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageGraphics.m; path = SDWebImage/Core/SDImageGraphics.m; sourceTree = ""; }; D5FE1E37E2C698689D5F24AEE4636065 /* Pods-QuickLocation-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-QuickLocation-frameworks.sh"; sourceTree = ""; }; - D63215EDBB31AA1C7927001384586CCD /* Signal+Subscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Signal+Subscription.swift"; path = "RxCocoa/Traits/Signal/Signal+Subscription.swift"; sourceTree = ""; }; - D64F41A2745AE91DEE1543DBD286390F /* PHPickerResultImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PHPickerResultImageDataProvider.swift; path = Sources/General/ImageSource/PHPickerResultImageDataProvider.swift; sourceTree = ""; }; - D6710808298E8357BEF9DEDA21E199CF /* lossless_enc_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_sse2.c; path = src/dsp/lossless_enc_sse2.c; sourceTree = ""; }; - D67CAECC94DDFB066BCA8DF4BF753DB3 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/Features/NetworkReachabilityManager.swift; sourceTree = ""; }; - D68AE9C63479784FDA72DE0494BF25A9 /* SDImageGIFCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGIFCoder.h; path = SDWebImage/Core/SDImageGIFCoder.h; sourceTree = ""; }; - D68BEDC9751B141065CF1027FED503E6 /* Delegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Delegate.swift; path = Sources/Utility/Delegate.swift; sourceTree = ""; }; - D68C40790FE6F29278192AF58A55C115 /* YBIBImageData+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBImageData+Internal.h"; path = "YBImageBrowser/Image/YBIBImageData+Internal.h"; sourceTree = ""; }; - D6B2C759FB92C7CAA19BAEA2B83D076F /* OpenIMSDK-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OpenIMSDK-dummy.m"; sourceTree = ""; }; - D6C77430014C62956E5C73E7FC9DBD96 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoStateFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h; sourceTree = ""; }; - D6F586A5D8FE098F83C58AFB7B88C5B9 /* DataExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataExtension.swift; path = Sources/Private/Utility/Extensions/DataExtension.swift; sourceTree = ""; }; - D712C754D0B3BEFA8D9854077BC94893 /* rescaler_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_msa.c; path = src/dsp/rescaler_msa.c; sourceTree = ""; }; - D73E24376EF4CAD3A86EF871E59DA6A1 /* InfiniteSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteSequence.swift; path = Platform/DataStructures/InfiniteSequence.swift; sourceTree = ""; }; - D773DCDA3327CB85C313A8E3F689E532 /* PhotoAssetCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoAssetCollection.swift; path = Sources/HXPHPicker/Picker/Model/PhotoAssetCollection.swift; sourceTree = ""; }; - D77A6E5E115865516443F9DA796B6091 /* SDWebImageOperation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOperation.m; path = SDWebImage/Core/SDWebImageOperation.m; sourceTree = ""; }; - D7A6B09B1EB0F21A79A335F239769653 /* YBIBUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBUtilities.h; path = YBImageBrowser/Helper/YBIBUtilities.h; sourceTree = ""; }; - D7B4BE25B675D9E62A4F73B632D2FA4E /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; }; - D7BAE3331BAA65418B42B63EB7A827D8 /* YBIBSheetView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBSheetView.m; path = YBImageBrowser/ToolView/YBIBSheetView.m; sourceTree = ""; }; - D7BCE18E08BCB73003FA4EAB713A67F6 /* KFImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFImage.swift; path = Sources/SwiftUI/KFImage.swift; sourceTree = ""; }; - D810C9646E8A55330552D3614E8D58E3 /* ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist"; sourceTree = ""; }; - D825F64A76320E65FD8969C6C63148B1 /* IQKeyboardToolbarManager-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbarManager-umbrella.h"; sourceTree = ""; }; - D82B68410AFC0685799BD4FFEDAEDDEB /* IQKeyboardToolbar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardToolbar-prefix.pch"; sourceTree = ""; }; - D835F5767328148D3747835C4E0D09CD /* Defaults+StringToBool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+StringToBool.swift"; path = "Sources/Defaults+StringToBool.swift"; sourceTree = ""; }; - D841D091A56096AAE13A8CF138CE6130 /* IQKeyboardToolbar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardToolbar-Info.plist"; sourceTree = ""; }; - D862D8002783A98CA4298CD944721078 /* BehaviorRelay+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BehaviorRelay+Driver.swift"; path = "RxCocoa/Traits/Driver/BehaviorRelay+Driver.swift"; sourceTree = ""; }; - D867D1C31B709009EFE974B0553F9D9D /* Core+Bundle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+Bundle.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+Bundle.swift"; sourceTree = ""; }; - D86878EE3183A9473ECB5A2110815050 /* SDWebImageCacheKeyFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageCacheKeyFilter.h; path = SDWebImage/Core/SDWebImageCacheKeyFilter.h; sourceTree = ""; }; - D86F8CB933244DB4129321F3F634F3F6 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshGifHeader.h; path = MJRefresh/Custom/Header/MJRefreshGifHeader.h; sourceTree = ""; }; - D872B09828CDE9FED532089388FD1706 /* token_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = token_enc.c; path = src/enc/token_enc.c; sourceTree = ""; }; - D8D05105D891E4492E3064011BFFBC55 /* MJPropertyKey.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyKey.m; path = MJExtension/MJPropertyKey.m; sourceTree = ""; }; - D8D4E72FFA61743609A51FAE174F8833 /* URLNavigator.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = URLNavigator.debug.xcconfig; sourceTree = ""; }; - D8E122838BA266BA2FC542DB6D6CA7FC /* SerialDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SerialDisposable.swift; path = RxSwift/Disposables/SerialDisposable.swift; sourceTree = ""; }; - D9469079C705E0ACD65CE0D499E85ADB /* BezierPath.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BezierPath.swift; path = Sources/Private/Utility/Primitives/BezierPath.swift; sourceTree = ""; }; - D9AABB0BF024C76A2F4778A8BF77E9BE /* AnimationTextProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationTextProvider.swift; path = Sources/Public/TextProvider/AnimationTextProvider.swift; sourceTree = ""; }; - D9ACDC91BE3AD7423323355FF0F6AE52 /* AMapLocationCommonObj.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationCommonObj.h; path = AMapLocationKit.framework/Headers/AMapLocationCommonObj.h; sourceTree = ""; }; - DA153F1787B4626C642F61ECE6F84F95 /* TextAnimator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextAnimator.swift; path = Sources/Private/Model/Text/TextAnimator.swift; sourceTree = ""; }; - DA1B465FAF1DF8179501C93F8925EAA1 /* UIImage+ForceDecode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ForceDecode.h"; path = "SDWebImage/Core/UIImage+ForceDecode.h"; sourceTree = ""; }; - DA420F3649A7C98C2CEB39098100D80B /* ControlProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ControlProperty.swift; path = RxCocoa/Traits/ControlProperty.swift; sourceTree = ""; }; - DA49A84F2674310313ACC307E2624882 /* lottie-ios.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "lottie-ios.modulemap"; sourceTree = ""; }; - DA521EA6BA5447EBEE592BCF358F83F9 /* LayerFontProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerFontProvider.swift; path = Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift; sourceTree = ""; }; - DA665FB1BA93A17FF0554D6D7B30AD0B /* NSObject+MJCoding.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MJCoding.h"; path = "MJExtension/NSObject+MJCoding.h"; sourceTree = ""; }; - DA66C9C915DAFC02D59574A19D34C580 /* analysis_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = analysis_enc.c; path = src/enc/analysis_enc.c; sourceTree = ""; }; - DB018CCCA925531421DF2AABFAE43A25 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = ""; }; - DB08296A6F18F928A00EC7AFDB47E3C1 /* RxRelay-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxRelay-umbrella.h"; sourceTree = ""; }; - DB2F9EE6399F9C70D28AB93C2F3695D3 /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = ""; }; - DB4DCA05AF0C1A1C21B89A7468E041BE /* EpoxySwiftUIIntrinsicContentSizeInvalidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxySwiftUIIntrinsicContentSizeInvalidator.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxySwiftUIIntrinsicContentSizeInvalidator.swift; sourceTree = ""; }; - DB7856D2A89B795002794BEF5165A081 /* AssetLibrary.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AssetLibrary.swift; path = Sources/Private/Model/Assets/AssetLibrary.swift; sourceTree = ""; }; - DB7D268FBB10E0D836B97C3928B5321B /* Data+Compression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Data+Compression.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Data+Compression.swift"; sourceTree = ""; }; - DB8309D96FCEC99B33E677AF7698B74F /* String+Parser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+Parser.swift"; path = "Sources/SwiftDate/Foundation+Extras/String+Parser.swift"; sourceTree = ""; }; - DB9746CC3590A586C2503988C11BFE17 /* AnimationFontProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationFontProvider.swift; path = Sources/Public/FontProvider/AnimationFontProvider.swift; sourceTree = ""; }; - DBB07160DFB218EECCC7DBA7F12212BD /* TADotView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TADotView.h; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TADotView.h; sourceTree = ""; }; - DBBA01FA6E1F2ADE35EA179C7CFBF223 /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; - DBD1A131E0B3DB38642A84F2E5057152 /* URLTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLTransform.swift; path = Sources/URLTransform.swift; sourceTree = ""; }; - DBD2F1627A06A8B9964D885414ACF5C5 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackFooter.h; path = MJRefresh/Base/MJRefreshBackFooter.h; sourceTree = ""; }; - DBF62C0D3DDC64AEDEF9A5454DD073DF /* RxDataSources.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxDataSources.release.xcconfig; sourceTree = ""; }; - DC0ED2914A2752C49E36A33BF535265E /* PickerTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerTransition.swift; path = Sources/HXPHPicker/Picker/Transition/PickerTransition.swift; sourceTree = ""; }; - DC143A0F924BCC3BADED1EC0C737709E /* Date+Components.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Date+Components.swift"; path = "Sources/SwiftDate/Date/Date+Components.swift"; sourceTree = ""; }; - DC1657AFEF441E5B1C0C549DEC563130 /* SDImageCoderHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCoderHelper.h; path = SDWebImage/Core/SDImageCoderHelper.h; sourceTree = ""; }; - DC18C5356E15BE7E1C0CC9337F251372 /* GTCommonSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTCommonSDK.release.xcconfig; sourceTree = ""; }; - DC22F1149C5A3255693D354900D95EF3 /* YBIBLoadingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBLoadingView.h; path = YBImageBrowser/AuxiliaryView/YBIBLoadingView.h; sourceTree = ""; }; - DC26BBCF312733BE82EE83250C2C92A3 /* DDASLLogCapture.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDASLLogCapture.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDASLLogCapture.h; sourceTree = ""; }; - DC2CF79AC36312C82B7879494F47F301 /* Picker+PhotoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+PhotoManager.swift"; path = "Sources/HXPHPicker/Picker/Util/Picker+PhotoManager.swift"; sourceTree = ""; }; - DC56A5F60C8E478C362670C1A1CA774C /* IQKeyboardReturnManager-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardReturnManager-dummy.m"; sourceTree = ""; }; - DC59F0F7B131E5DEDB3606A093622755 /* Reduce.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reduce.swift; path = RxSwift/Observables/Reduce.swift; sourceTree = ""; }; - DC9DF62EF43848BE1C5F234D65BCBC98 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/RxSwift/PrivacyInfo.xcprivacy; sourceTree = ""; }; - DC9F85B076220EC545A9E0817FAA7561 /* MJPropertyKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJPropertyKey.h; path = MJExtension/MJPropertyKey.h; sourceTree = ""; }; - DD253B873F2B67521833408BB82D843B /* LottieLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieLogger.swift; path = Sources/Public/Logging/LottieLogger.swift; sourceTree = ""; }; - DD3998C13E9D092608AC6F455C49F819 /* lossless_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_sse2.c; path = src/dsp/lossless_sse2.c; sourceTree = ""; }; - DD4AA3C5C4BE5AF110BEF84C2B425AA0 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Sources/ConstraintAttributes.swift; sourceTree = ""; }; - DD52698FB0F645D5FEACA1C0F6F5C222 /* RequestModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestModifier.swift; path = Sources/Networking/RequestModifier.swift; sourceTree = ""; }; - DD55E3EE49E45A74B40D393DA730FB1F /* OIMGCDMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMGCDMulticastDelegate.h; path = OpenIMSDK/Callbacker/OIMGCDMulticastDelegate.h; sourceTree = ""; }; - DD64D1E7E04C06593281056370568625 /* OpenIMSDK-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "OpenIMSDK-prefix.pch"; sourceTree = ""; }; - DDA6A6DBB2D7B4E012AC552199A26FF0 /* MAPinAnnotationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPinAnnotationView.h; path = MAMapKit.framework/Headers/MAPinAnnotationView.h; sourceTree = ""; }; - DDA8392764223ED541726AFFDD11B807 /* KFAnimatedImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KFAnimatedImage.swift; path = Sources/SwiftUI/KFAnimatedImage.swift; sourceTree = ""; }; - DDAEE0D2FE71C52FD936AF6D2095F23E /* UIImage+ExtendedCacheData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+ExtendedCacheData.h"; path = "SDWebImage/Core/UIImage+ExtendedCacheData.h"; sourceTree = ""; }; - DDB45231F1F5EB920B95C347ADDA37E0 /* NSObject+YBImageBrowser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+YBImageBrowser.h"; path = "YBImageBrowser/Base/NSObject+YBImageBrowser.h"; sourceTree = ""; }; - DDDC822826BE0110F15C916A638B4E1E /* bit_writer_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bit_writer_utils.h; path = src/utils/bit_writer_utils.h; sourceTree = ""; }; - DE111CCED1194464F57087895D162857 /* Concat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concat.swift; path = RxSwift/Observables/Concat.swift; sourceTree = ""; }; - DE120EE326141F76E75CCE2132DEA784 /* ObjectMapper.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ObjectMapper.modulemap; sourceTree = ""; }; - DE123DE4EFA58528204D822F2B11982E /* SGQRCode.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SGQRCode.modulemap; sourceTree = ""; }; - DEE0EF0F26FC8E76181FFE777C562CBA /* yuv_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_sse41.c; path = src/dsp/yuv_sse41.c; sourceTree = ""; }; - DF15FC481CCD2B54A0EF2DC21F04F419 /* Interpolatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Interpolatable.swift; path = Sources/Public/Keyframes/Interpolatable.swift; sourceTree = ""; }; - DF48A0B567CF35580C11362739F02501 /* SDImageHEICCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageHEICCoder.m; path = SDWebImage/Core/SDImageHEICCoder.m; sourceTree = ""; }; - DF51400637F64015372A2214FB9C7DBC /* SDImageCachesManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCachesManager.m; path = SDWebImage/Core/SDImageCachesManager.m; sourceTree = ""; }; - DF6EA89B3D938E7704E068A325DCF64B /* PreviewLivePhotoViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewLivePhotoViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PreviewLivePhotoViewCell.swift; sourceTree = ""; }; - DF72176577676D86E77A44C57C98F44B /* MJExtension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.debug.xcconfig; sourceTree = ""; }; - DF9583AFB17055B420C08DE15E843EE4 /* NSObject+Rx+RawRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSObject+Rx+RawRepresentable.swift"; path = "RxCocoa/Foundation/NSObject+Rx+RawRepresentable.swift"; sourceTree = ""; }; - DFA30AF832CB05775709E542E804898A /* Shape.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Shape.swift; path = Sources/Private/Model/ShapeItems/Shape.swift; sourceTree = ""; }; - DFE14717EDAB4A6C917DC1DC5F037922 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RxSwift/Observables/Error.swift; sourceTree = ""; }; - DFFB232AA60913FE340369D4DA3F470F /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+MASShorthandAdditions.h"; path = "Masonry/NSArray+MASShorthandAdditions.h"; sourceTree = ""; }; - E003852F0C2ED5D3367CC3BCB111DE40 /* rescaler_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = rescaler_mips_dsp_r2.c; path = src/dsp/rescaler_mips_dsp_r2.c; sourceTree = ""; }; - E030B9BDBBA82F74D1F392D96C6B1A31 /* RxCollectionViewReactiveArrayDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewReactiveArrayDataSource.swift; path = RxCocoa/iOS/DataSources/RxCollectionViewReactiveArrayDataSource.swift; sourceTree = ""; }; - E04FBA11E10D9D33996D230B6C10B978 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; - E059300BBA1B1C6E282AABF76CB9A425 /* SDImageCodersManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCodersManager.h; path = SDWebImage/Core/SDImageCodersManager.h; sourceTree = ""; }; - E0611803A1D39F6DB0A37D8FC405B3AA /* ImageCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCache.swift; path = Sources/Cache/ImageCache.swift; sourceTree = ""; }; - E0718A024C52D04F10056B23069A34F1 /* PhotoEditorViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorViewController.swift; path = Sources/HXPHPicker/Editor/Controller/PhotoEditorViewController.swift; sourceTree = ""; }; - E0979D045CAFD37581816EC0C09D3F4F /* YBIBImageCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageCell.m; path = YBImageBrowser/Image/YBIBImageCell.m; sourceTree = ""; }; - E0CE0ECA12ED2394C3ED2CEEE96A2BA8 /* YBIBCellProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBCellProtocol.h; path = YBImageBrowser/Protocol/YBIBCellProtocol.h; sourceTree = ""; }; - E0DFBFFC4098538E3CF30773ABBD972C /* DDLegacyMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLegacyMacros.h; path = "Sources/CocoaLumberjack/Supporting Files/DDLegacyMacros.h"; sourceTree = ""; }; - E102058F9539D17E8EEB15112A058EEF /* Amb.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Amb.swift; path = RxSwift/Observables/Amb.swift; sourceTree = ""; }; - E1061F2B93315280A5B73A81ADDA30B9 /* MBProgressHUD.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MBProgressHUD.release.xcconfig; sourceTree = ""; }; - E1242A1113F84D2391549B66530C0607 /* SDCycleScrollView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDCycleScrollView.modulemap; sourceTree = ""; }; - E1455F488C0E919D87D16AC66AD04C9B /* PrimitiveSequence+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PrimitiveSequence+Concurrency.swift"; path = "RxSwift/Traits/PrimitiveSequence/PrimitiveSequence+Concurrency.swift"; sourceTree = ""; }; - E1470F23022327507435AC5D5E2E0048 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateHeader.m; path = MJRefresh/Custom/Header/MJRefreshStateHeader.m; sourceTree = ""; }; - E1490DB57DB8A1ECD1F3411B7761EAFD /* GraphicsContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GraphicsContext.swift; path = Sources/Image/GraphicsContext.swift; sourceTree = ""; }; - E16FC8EC2290249207E00023113CA596 /* KingfisherManager+LivePhoto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KingfisherManager+LivePhoto.swift"; path = "Sources/General/KingfisherManager+LivePhoto.swift"; sourceTree = ""; }; - E1729A5C0BDDB7D06AEBD8894DA5153F /* IdentifiableValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IdentifiableValue.swift; path = Sources/Differentiator/IdentifiableValue.swift; sourceTree = ""; }; - E1747F2179C0D6D74389870E47EF63C0 /* yuv_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_neon.c; path = src/dsp/yuv_neon.c; sourceTree = ""; }; - E18772AEBB906F18A2BFD0E99C107C5B /* OIMGroupMemberInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMGroupMemberInfo.h; path = OpenIMSDK/Model/OIMGroupMemberInfo.h; sourceTree = ""; }; - E1BCDBFBE4B6AE506F7500D541CCA4B8 /* YBIBVideoActionBar.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoActionBar.h; path = Video/YBIBVideoActionBar.h; sourceTree = ""; }; - E1C6598101489A7E7111805E5CF77949 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/Extensions/DispatchQueue+Alamofire.swift"; sourceTree = ""; }; - E1D1566EFC577C509F7BD737CAC55973 /* SDDiskCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDiskCache.m; path = SDWebImage/Core/SDDiskCache.m; sourceTree = ""; }; - E1DB25C161114385C7539D92C70848E7 /* First.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = First.swift; path = RxSwift/Observables/First.swift; sourceTree = ""; }; - E1DD7D29BF1FE1A9B3EA3877C3D2A929 /* SGGenerateQRCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGGenerateQRCode.h; path = SGQRCode/QRCode/SGGenerateQRCode.h; sourceTree = ""; }; - E20299373650F59323E2017B3AFF9EA4 /* PhotoPreviewViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPreviewViewCell.swift; sourceTree = ""; }; - E205C494CC0EE530BD0158105D0D2305 /* MAMultiColoredPolylineRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiColoredPolylineRenderer.h; path = MAMapKit.framework/Headers/MAMultiColoredPolylineRenderer.h; sourceTree = ""; }; + D5FE50E2C3759529F39015ADF4515455 /* UIRefreshControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIRefreshControl+Rx.swift"; path = "RxCocoa/iOS/UIRefreshControl+Rx.swift"; sourceTree = ""; }; + D5FE6488A1A339DC17ED5A3C860C6FE3 /* StringEncoding+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "StringEncoding+Alamofire.swift"; path = "Source/Extensions/StringEncoding+Alamofire.swift"; sourceTree = ""; }; + D6153CC74CC2C4EA27387FCAB1619F3C /* nwise.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = nwise.swift; path = Source/RxSwift/nwise.swift; sourceTree = ""; }; + D6153E9D8FB50D6577852480096F689B /* CocoaMQTT5.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTT5.swift; path = Source/CocoaMQTT5.swift; sourceTree = ""; }; + D62C830395ABE984B932E2867CE13845 /* SDWebImageTransition.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageTransition.m; path = SDWebImage/Core/SDWebImageTransition.m; sourceTree = ""; }; + D63FD645FB3FE4E761A51B32132ED16C /* OIMManager+Login.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Login.m"; path = "OpenIMSDK/Interface/OIMManager+Login.m"; sourceTree = ""; }; + D64FB7527955C366D9B03609179CA6CD /* Core+PHAssetCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+PHAssetCollection.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+PHAssetCollection.swift"; sourceTree = ""; }; + D6671E4DAF2E9CAB55C735355A9FEACF /* DefaultsObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsObserver.swift; path = Sources/DefaultsObserver.swift; sourceTree = ""; }; + D684D3C9D84C465A70ABF5B38AB813C7 /* lossless_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_msa.c; path = src/dsp/lossless_msa.c; sourceTree = ""; }; + D68DD308DBBCA95916FA607C00564308 /* UINavigationController+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UINavigationController+Rx.swift"; path = "RxCocoa/iOS/UINavigationController+Rx.swift"; sourceTree = ""; }; + D6A149B6BBD06C2232430F6ABB7B1407 /* IQKeyboardToolbarManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardToolbarManager+Internal.swift"; path = "IQKeyboardToolbarManager/Classes/IQKeyboardToolbarManager+Internal.swift"; sourceTree = ""; }; + D6ABB50E1DD67CD1F4172B92AB78FBC1 /* GTCommonSDK.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = GTCommonSDK.xcframework; sourceTree = ""; }; + D6C3E4424C9BB47614486B556FEF7AEA /* AssetManager+LivePhoto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+LivePhoto.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+LivePhoto.swift"; sourceTree = ""; }; + D6E9D7AF870E8D988924C6290B87CB66 /* color_cache_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = color_cache_utils.c; path = src/utils/color_cache_utils.c; sourceTree = ""; }; + D6ECB7242FE69E5D1474792D4B6FBD21 /* BundleImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BundleImageProvider.swift; path = Sources/Public/iOS/BundleImageProvider.swift; sourceTree = ""; }; + D6FCB776FDC1A9889154E2C982013701 /* PhotoError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoError.swift; path = Sources/HXPHPicker/Core/Model/PhotoError.swift; sourceTree = ""; }; + D705995FC6E23FD467B4D98A67815ACE /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; }; + D70C39F07A6519EF9AAB2BE1DF2272BA /* MATerrainOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATerrainOverlay.h; path = MAMapKit.framework/Headers/MATerrainOverlay.h; sourceTree = ""; }; + D76CFBF1AF771B8A842900B6363C910F /* Placeholder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Placeholder.swift; path = Sources/Image/Placeholder.swift; sourceTree = ""; }; + D77FDB1C0C58A70586287759D338EF34 /* IQKeyboardNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "IQKeyboardNotification-Info.plist"; sourceTree = ""; }; + D79DA9ED5F22B3153EAF6FB853B9ABCE /* OIMSearchParam.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSearchParam.h; path = OpenIMSDK/Model/OIMSearchParam.h; sourceTree = ""; }; + D7B97434434069C9B201866FE0542B05 /* OIMFriendApplication.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMFriendApplication.m; path = OpenIMSDK/Model/OIMFriendApplication.m; sourceTree = ""; }; + D7E778E7BD5CE4AAFAD2713C620AF5E0 /* Calendars.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Calendars.swift; path = Sources/SwiftDate/Supports/Calendars.swift; sourceTree = ""; }; + D7E9B43B55164D16B6F6795C9CB4ABD4 /* vp8i_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8i_enc.h; path = src/enc/vp8i_enc.h; sourceTree = ""; }; + D7F7D27217E891C5F29A685C844B453C /* RxNavigationControllerDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxNavigationControllerDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxNavigationControllerDelegateProxy.swift; sourceTree = ""; }; + D80F30B4976169EF9937B6A44FD12D40 /* MJPropertyType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJPropertyType.h; path = MJExtension/MJPropertyType.h; sourceTree = ""; }; + D813A5AF071FD0BD4182C8B22E365A01 /* UIDatePicker+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIDatePicker+Rx.swift"; path = "RxCocoa/iOS/UIDatePicker+Rx.swift"; sourceTree = ""; }; + D829C1EF7480121F20D5D88502020A07 /* RxTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTarget.swift; path = RxCocoa/Common/RxTarget.swift; sourceTree = ""; }; + D83A09F42FB0A0DEA3C2CE28C6C23CCF /* Diffable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Diffable.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/Diffable.swift; sourceTree = ""; }; + D8615B74C79F1A3751FE67C06080A6DC /* ZXSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = ZXSDK.framework; sourceTree = ""; }; + D862C584B59F742B093BA15B55C64CC9 /* IQKeyboardToolbarManager.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbarManager.debug.xcconfig; sourceTree = ""; }; + D88363A45076A8089140ABB4169C44BE /* RxPickerViewAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewAdapter.swift; path = Sources/RxDataSources/RxPickerViewAdapter.swift; sourceTree = ""; }; + D88DF71236E722809CDC054A7C195C5F /* enc_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_msa.c; path = src/dsp/enc_msa.c; sourceTree = ""; }; + D8C4C72BC795A5A37AB73555B0E71B23 /* VirtualTimeConverterType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VirtualTimeConverterType.swift; path = RxSwift/Schedulers/VirtualTimeConverterType.swift; sourceTree = ""; }; + D8CF20E73C6434D4119C8CA90DE8CE77 /* ObserverBase.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserverBase.swift; path = RxSwift/Observers/ObserverBase.swift; sourceTree = ""; }; + D8E1A6C1868911E09185610292922398 /* DisplayLink.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DisplayLink.swift; path = Sources/Utility/DisplayLink.swift; sourceTree = ""; }; + D8FE2431BB2C01D7B99718C4ED2D8475 /* OpenIMSDK.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = OpenIMSDK.modulemap; sourceTree = ""; }; + D9020DDE726D79775743E62A9859FF53 /* repeatWithBehavior.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = repeatWithBehavior.swift; path = Source/RxSwift/repeatWithBehavior.swift; sourceTree = ""; }; + D910123998FD43BE6AD2DDD3A3D45594 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Sources/ConstraintLayoutGuideDSL.swift; sourceTree = ""; }; + D936862DBFB3B7043312F4C3C681F879 /* IQKeyboardToolbar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardToolbar.modulemap; sourceTree = ""; }; + D94DD830C0433EF2212975E170A8EF05 /* SolidCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SolidCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/SolidCompositionLayer.swift; sourceTree = ""; }; + D9805B1AE674AAFF2B25D9BB35A39FCD /* sharpyuv_cpu.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_cpu.c; path = sharpyuv/sharpyuv_cpu.c; sourceTree = ""; }; + D9A16E733FC1E5FE0D380BACDD771918 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Features/Combine.swift; sourceTree = ""; }; + D9A80A81973DFC185D749BF15E3B9010 /* DropShadowNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropShadowNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/LayerEffectNodes/DropShadowNode.swift; sourceTree = ""; }; + D9AA6644C740DEBA4D2CFE120147749F /* MAOfflineMap.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineMap.h; path = MAMapKit.framework/Headers/MAOfflineMap.h; sourceTree = ""; }; + D9B0C75F024986060AABFDD7233FC611 /* DateRepresentable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateRepresentable.swift; path = Sources/SwiftDate/DateRepresentable.swift; sourceTree = ""; }; + D9C19B02A149A3CE437F509ED0B3F6D6 /* RxPickerViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxPickerViewDelegateProxy.swift; sourceTree = ""; }; + D9C6AC3FDFA670E0F4363A7F5CCA5E45 /* SwiftDate.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftDate.modulemap; sourceTree = ""; }; + D9DE6D779E74364FC3F954FDE24695C3 /* RequestModifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestModifier.swift; path = Sources/Networking/RequestModifier.swift; sourceTree = ""; }; + D9E1FF60C3DFA18D3698A5B0976068D9 /* GroupOutputNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupOutputNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift; sourceTree = ""; }; + D9E2E94F5A368A73CC30515962A10A16 /* EmptyView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EmptyView.swift; path = Sources/HXPHPicker/Picker/View/EmptyView.swift; sourceTree = ""; }; + D9E55D135AD87DB4E17C237AFECE26C7 /* Range.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Range.swift; path = RxSwift/Observables/Range.swift; sourceTree = ""; }; + DA0366DC09C0344E545847265A75E5AF /* SDWebImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImage.h; path = WebImage/SDWebImage.h; sourceTree = ""; }; + DA0D288497955329D2E2EEE0E11E4A4F /* NSButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSButton+WebCache.m"; path = "SDWebImage/Core/NSButton+WebCache.m"; sourceTree = ""; }; + DA18A9D0FE32D587402920F04251F766 /* LayerEffectNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerEffectNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/LayerEffectNodes/LayerEffectNode.swift; sourceTree = ""; }; + DA3E6508700E6F2FE2BF9BEBCE2BE979 /* dec_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_mips_dsp_r2.c; path = src/dsp/dec_mips_dsp_r2.c; sourceTree = ""; }; + DA4B9E352F29C90F44D0244433AF8504 /* CustomLanguage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomLanguage.swift; path = Sources/HXPHPicker/Core/Model/CustomLanguage.swift; sourceTree = ""; }; + DA8120E1B44E61CCB3091659BA9A096D /* IQKeyboardReturnManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardReturnManager.swift; path = IQKeyboardReturnManager/Classes/IQKeyboardReturnManager.swift; sourceTree = ""; }; + DAB300A21E292F64E0091E1CB70BE27E /* endian_inl_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = endian_inl_utils.h; path = src/utils/endian_inl_utils.h; sourceTree = ""; }; + DAC1E692C3BCF796EC57061986DABEAB /* sharpyuv_cpu.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sharpyuv_cpu.h; path = sharpyuv/sharpyuv_cpu.h; sourceTree = ""; }; + DADDA466B0F9556AA080958617E8F666 /* IQTextView.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextView.release.xcconfig; sourceTree = ""; }; + DAFFEE4F2543B08BDE4F5A2D9D9F9D6F /* Just.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Just.swift; path = RxSwift/Observables/Just.swift; sourceTree = ""; }; + DB1752A2DA09B80102258B1B4F99B43D /* OIMGroupInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMGroupInfo.m; path = OpenIMSDK/Model/OIMGroupInfo.m; sourceTree = ""; }; + DB20F139AA399040EFA01315E1AC09BE /* SDCycleScrollView.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SDCycleScrollView.modulemap; sourceTree = ""; }; + DB42CF3C2FE27263094321A19D8E34CD /* PathElement.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PathElement.swift; path = Sources/Private/Utility/Primitives/PathElement.swift; sourceTree = ""; }; + DB4E4ECB3B5E8C8B4E15FCD674B35148 /* ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; sourceTree = ""; }; + DB591B97E8E5DE9272DB70B726C9919E /* EpoxyModeled.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxyModeled.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModeled.swift; sourceTree = ""; }; + DBB464629EFF24FC46445D5425B39D7E /* CocoaMQTTTypes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTTypes.swift; path = Source/CocoaMQTTTypes.swift; sourceTree = ""; }; + DBC013570B52683EAAC1DC3751BAE86A /* DDLegacyMacros.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDLegacyMacros.h; path = "Sources/CocoaLumberjack/Supporting Files/DDLegacyMacros.h"; sourceTree = ""; }; + DBCBAB931CCEE194C1467906C7B7D94C /* IQKeyboardManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardManager.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager.swift; sourceTree = ""; }; + DBD5C92406FF93CF245F5E43F82BE580 /* UIImage+MultiFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+MultiFormat.m"; path = "SDWebImage/Core/UIImage+MultiFormat.m"; sourceTree = ""; }; + DC0328F98F4917C4905DA2AD95CC417A /* upsampling_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_sse41.c; path = src/dsp/upsampling_sse41.c; sourceTree = ""; }; + DC1E150CEE2FA713EF8E77E76B5F0E06 /* HXPHPicker-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "HXPHPicker-dummy.m"; sourceTree = ""; }; + DC32760A5BC1C280C10033E024BA7D38 /* ResourceBundle-RxSwift_Privacy-RxSwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-RxSwift_Privacy-RxSwift-Info.plist"; sourceTree = ""; }; + DC327E3E09A630F76C0A3C2C4014967D /* ClassReference.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ClassReference.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Internal/ClassReference.swift; sourceTree = ""; }; + DCACD2069A5D045848CDC2E5FCB44305 /* IntegerOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IntegerOperators.swift; path = Sources/IntegerOperators.swift; sourceTree = ""; }; + DCCCE1F7F46C22320520E6F805D4750A /* MAMVTTileOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMVTTileOverlayRenderer.h; path = MAMapKit.framework/Headers/MAMVTTileOverlayRenderer.h; sourceTree = ""; }; + DD1620B77332357059766C062C7334E3 /* First.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = First.swift; path = RxSwift/Observables/First.swift; sourceTree = ""; }; + DD18BE8DE0EF2EA417D20CE3978E8782 /* MAUserLocationRepresentation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAUserLocationRepresentation.h; path = MAMapKit.framework/Headers/MAUserLocationRepresentation.h; sourceTree = ""; }; + DD3A5896FE343343349FD8AFEDECA6F3 /* MJExtension-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-prefix.pch"; sourceTree = ""; }; + DDAB292AFEE428D9B577D74F07D5A0EF /* OIMManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMManager.h; path = OpenIMSDK/Interface/OIMManager.h; sourceTree = ""; }; + DDC69EBC09E79F4820A84FF0EE4B000E /* Concat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Concat.swift; path = RxSwift/Observables/Concat.swift; sourceTree = ""; }; + DDCC82CDB4622F4F83A99EB2D2AE120E /* ImageContentType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageContentType.swift; path = Sources/HXPHPicker/Core/Model/ImageContentType.swift; sourceTree = ""; }; + DE06532E7C05F4532ABBECA80B3BFBE3 /* DDASLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDASLLogger.m; path = Sources/CocoaLumberjack/DDASLLogger.m; sourceTree = ""; }; + DE1E6901934EE596740D842380286A4D /* MJPropertyType.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJPropertyType.m; path = MJExtension/MJPropertyType.m; sourceTree = ""; }; + DE2180C541DB14418AE24C9C09FB2399 /* MGCDAsyncUdpSocket.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MGCDAsyncUdpSocket.m; path = Source/GCD/MGCDAsyncUdpSocket.m; sourceTree = ""; }; + DE2ABF42C1496614D3DDD6544E992F73 /* LayerStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerStyle.swift; path = Sources/Private/Model/LayerStyles/LayerStyle.swift; sourceTree = ""; }; + DE508651E5E549F78249BDCAD16BFD32 /* ImageDownloaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloaderDelegate.swift; path = Sources/Networking/ImageDownloaderDelegate.swift; sourceTree = ""; }; + DE5BCC0BA69E61F204E9386CD87BBA20 /* MarqueeLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MarqueeLabel.modulemap; sourceTree = ""; }; + DE63E8D0A27679395591CD603D53B1EE /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshAutoStateFooter.m; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m; sourceTree = ""; }; + DE691F3994CC695878CAD1302104BA69 /* MAOfflineItemNationWide.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineItemNationWide.h; path = MAMapKit.framework/Headers/MAOfflineItemNationWide.h; sourceTree = ""; }; + DE742566AA0F5FFDE0409CF795E414D7 /* SDWebImageIndicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageIndicator.m; path = SDWebImage/Core/SDWebImageIndicator.m; sourceTree = ""; }; + DE77A4C4BB20BB9E98756314B59D7425 /* Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Signal.swift; path = RxCocoa/Traits/Signal/Signal.swift; sourceTree = ""; }; + DEDA766A20F0E865ABB8743367B99D4F /* YBImageBrowser.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = YBImageBrowser.debug.xcconfig; sourceTree = ""; }; + DF0D59AB65BAC48A5EE451E2781AF508 /* DDLoggerNames.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDLoggerNames.m; path = Sources/CocoaLumberjack/DDLoggerNames.m; sourceTree = ""; }; + DF151D352C3F940ACCE3650BDFC0D4D4 /* AnyValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyValueProvider.swift; path = Sources/Public/DynamicProperties/AnyValueProvider.swift; sourceTree = ""; }; + DF26523D4FE930F3F717C1C2811DC2D6 /* MATileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATileOverlay.h; path = MAMapKit.framework/Headers/MATileOverlay.h; sourceTree = ""; }; + DF3B0FB9898350076BE5086B8A648CA0 /* EventMonitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EventMonitor.swift; path = Source/Features/EventMonitor.swift; sourceTree = ""; }; + DF4F5D327A12E7ACE2DFF76883BD526E /* EpoxySwiftUIIntrinsicContentSizeInvalidator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxySwiftUIIntrinsicContentSizeInvalidator.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxySwiftUIIntrinsicContentSizeInvalidator.swift; sourceTree = ""; }; + DF4F8D8EEF753E757F917C580AE90AF6 /* Observable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Observable.swift; path = RxSwift/Observable.swift; sourceTree = ""; }; + DF7D16D0FE91DDE31FC402A033B81E21 /* MACustomBuildingOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MACustomBuildingOverlayRenderer.h; path = MAMapKit.framework/Headers/MACustomBuildingOverlayRenderer.h; sourceTree = ""; }; + DF8B4E43D6A80D3F3D3212D2C78AB121 /* filters.c */ = {isa = PBXFileReference; includeInIndex = 1; name = filters.c; path = src/dsp/filters.c; sourceTree = ""; }; + DF94A15ED1293E30E88A59E0F6D62484 /* MqttCocoaAsyncSocket.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MqttCocoaAsyncSocket.modulemap; sourceTree = ""; }; + DFA03B4AC805A46101403448BA891DEF /* Popover.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Popover.swift; path = Classes/Popover.swift; sourceTree = ""; }; + DFA273262C05031D86CC3431CFFA95B7 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + DFACA4AD88EF25B756AD0FDF375677F3 /* LayerTextProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerTextProvider.swift; path = Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift; sourceTree = ""; }; + DFB269DEB8628E1799B027D9BCE9841F /* EditorType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorType.swift; path = Sources/HXPHPicker/Editor/Model/EditorType.swift; sourceTree = ""; }; + DFB5011F8D337C897BA3D4066DAA8DAB /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoFooter.h; path = MJRefresh/Base/MJRefreshAutoFooter.h; sourceTree = ""; }; + DFD1D7F5AE312A4CF621602C119A807D /* MJPropertyKey.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJPropertyKey.h; path = MJExtension/MJPropertyKey.h; sourceTree = ""; }; + DFDA5F5E6DE9CF3C0BF1AFC98DA6D9ED /* Archive+Reading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Reading.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+Reading.swift"; sourceTree = ""; }; + DFF623CF9D4FF72AB1D21B2441FFEE76 /* TimePeriod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriod.swift; path = Sources/SwiftDate/TimePeriod/TimePeriod.swift; sourceTree = ""; }; + DFFFE5A3E20A221292DEDE2DFCC56A72 /* TrimPathNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TrimPathNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift; sourceTree = ""; }; + E0018F3662070E563761A8EF917D19F4 /* SDWebImageDownloaderResponseModifier.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloaderResponseModifier.h; path = SDWebImage/Core/SDWebImageDownloaderResponseModifier.h; sourceTree = ""; }; + E016D4B4D2A3A743CC8BD94D83B28D78 /* MJExtension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MJExtension.modulemap; sourceTree = ""; }; + E02070E552BE1AC1C311C83E723E8C37 /* PhotoPanGestureRecognizer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPanGestureRecognizer.swift; path = Sources/HXPHPicker/Core/Model/PhotoPanGestureRecognizer.swift; sourceTree = ""; }; + E02B5460C16F5447650288B96410B6BF /* MAPoiFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPoiFilter.h; path = MAMapKit.framework/Headers/MAPoiFilter.h; sourceTree = ""; }; + E078D2663D3DCEFA605A0BE7820890AE /* Masonry.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Masonry.debug.xcconfig; sourceTree = ""; }; + E078D46C2A601050DB01A977C864B192 /* AMap3DMap.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMap3DMap.release.xcconfig; sourceTree = ""; }; + E07E0B4611AA88852073CCA616A9032A /* GradientFill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GradientFill.swift; path = Sources/Private/Model/ShapeItems/GradientFill.swift; sourceTree = ""; }; + E08C9F4051C49DE50433663D3F76F9D6 /* MAOfflineProvince.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAOfflineProvince.h; path = MAMapKit.framework/Headers/MAOfflineProvince.h; sourceTree = ""; }; + E09E6912A84AAB34450313597D8759AE /* HexColorTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HexColorTransform.swift; path = Sources/HexColorTransform.swift; sourceTree = ""; }; + E0EA20F9C28C606A3D5D4FFEF8208E80 /* lossless_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_neon.c; path = src/dsp/lossless_neon.c; sourceTree = ""; }; + E103C1EB95D05A5113B2717FBA2379A3 /* Timeout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeout.swift; path = RxSwift/Observables/Timeout.swift; sourceTree = ""; }; + E10C79159E195F6C81ED9B2E89F90A37 /* AMapSearch.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapSearch.debug.xcconfig; sourceTree = ""; }; + E10CC87B0811F86105A32F88A4F75123 /* MJRefreshFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshFooter.m; path = MJRefresh/Base/MJRefreshFooter.m; sourceTree = ""; }; + E12432D22B9EE08D0AAFE1409868E544 /* MATouchPoi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MATouchPoi.h; path = MAMapKit.framework/Headers/MATouchPoi.h; sourceTree = ""; }; + E14EB83C1DB19335E77096319A0E2693 /* yuv_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_neon.c; path = src/dsp/yuv_neon.c; sourceTree = ""; }; + E16098AC15C72D87F44C638C00C7C494 /* Defaults+Subscripts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+Subscripts.swift"; path = "Sources/Defaults+Subscripts.swift"; sourceTree = ""; }; + E16FDF7DD49FB5D341120E3EC5AC1D5C /* PhotoEditorViewController+Export.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoEditorViewController+Export.swift"; path = "Sources/HXPHPicker/Editor/Controller/PhotoEditorViewController+Export.swift"; sourceTree = ""; }; + E1B0BBCA140DCBB401B2DB7E116FC93D /* MJExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-umbrella.h"; sourceTree = ""; }; + E1F62D4EADB9E5D416AF1F2EBB690434 /* quant_levels_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = quant_levels_utils.c; path = src/utils/quant_levels_utils.c; sourceTree = ""; }; + E1FB0CE6CC1C2683C361076E7AB82D61 /* OIMVideoElem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMVideoElem.h; path = OpenIMSDK/Model/OIMVideoElem.h; sourceTree = ""; }; + E23A82FD88F15BCED19B1985CF16548D /* picture_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_enc.c; path = src/enc/picture_enc.c; sourceTree = ""; }; E23C076BA70925415F490FEDB215DA92 /* SwiftyJSON */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = SwiftyJSON; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E24C7A21B6750630893FB2EA5D1EFFBA /* RoundedCorners.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RoundedCorners.swift; path = Sources/Private/Model/ShapeItems/RoundedCorners.swift; sourceTree = ""; }; - E24E20ED22C9155BB317012B54D36A84 /* YBImageBrowser-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "YBImageBrowser-Info.plist"; sourceTree = ""; }; - E25DE705587B10CE643D1DF86AA2C68B /* MBProgressHUD-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-prefix.pch"; sourceTree = ""; }; - E2664E5BCD9D8BA910C7D09EA6C2AFBA /* OIMAtElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMAtElem.m; path = OpenIMSDK/Model/OIMAtElem.m; sourceTree = ""; }; - E27470085DEB31191E56C66DFE1A64EF /* SectionedChangeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionedChangeset.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/SectionedChangeset.swift; sourceTree = ""; }; - E29063E89830E3D7872C21835ACA7C8E /* BundleImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BundleImageProvider.swift; path = Sources/Public/iOS/BundleImageProvider.swift; sourceTree = ""; }; - E2C71A38C131FFE9B3E38B8BD28A3039 /* MAPoiFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPoiFilter.h; path = MAMapKit.framework/Headers/MAPoiFilter.h; sourceTree = ""; }; - E2CFE83EA77120219C5AB316D4F80D4D /* Platform.Linux.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Linux.swift; path = Platform/Platform.Linux.swift; sourceTree = ""; }; - E2FB81BBD6BCBE9C6D6A155576A27671 /* AnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationLayer.swift; path = Sources/Private/CoreAnimation/Layers/AnimationLayer.swift; sourceTree = ""; }; - E31B8E2DE2928272DE12C9F3AA9BF334 /* Vectors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Vectors.swift; path = Sources/Public/Primitives/Vectors.swift; sourceTree = ""; }; - E3272B858A42201B36637AFF8EAF9B45 /* PhotoPickerController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerController.swift; path = Sources/HXPHPicker/Picker/Controller/PhotoPickerController.swift; sourceTree = ""; }; - E32BDB5F008E014DF2899A52778B0534 /* Merge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Merge.swift; path = RxSwift/Observables/Merge.swift; sourceTree = ""; }; - E335BCACA8215B4F832B6972CE0B45A4 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshNormalHeader.m; path = MJRefresh/Custom/Header/MJRefreshNormalHeader.m; sourceTree = ""; }; - E33CB738E9BEF4C5E064BEB48D7C52D1 /* RxCocoa.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RxCocoa.h; path = RxCocoa/RxCocoa.h; sourceTree = ""; }; - E37A739569DBBD3BECE189F4986936E1 /* TextInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextInput.swift; path = RxCocoa/Common/TextInput.swift; sourceTree = ""; }; - E3A95178FB209B1FAE668822F7A4DEFC /* AVAssetImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AVAssetImageDataProvider.swift; path = Sources/General/ImageSource/AVAssetImageDataProvider.swift; sourceTree = ""; }; - E3B2CD25D2368F0AD91857FAB79E8FB1 /* YYImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "YYImage-dummy.m"; sourceTree = ""; }; - E3D5CE2653C1E5851B93DB2D229DEAD5 /* SwiftKeychainWrapper-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftKeychainWrapper-Info.plist"; sourceTree = ""; }; - E3D6A062A7548B784F291EECB08E8550 /* IQTextView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQTextView-dummy.m"; sourceTree = ""; }; - E3EEB3D929F12DA17005E1F37882A2F8 /* LayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerModel.swift; path = Sources/Private/Model/Layers/LayerModel.swift; sourceTree = ""; }; - E3FC69F2F25AD2A73471B55D72EF3D88 /* RxCollectionViewSectionedAnimatedDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCollectionViewSectionedAnimatedDataSource.swift; path = Sources/RxDataSources/RxCollectionViewSectionedAnimatedDataSource.swift; sourceTree = ""; }; - E42FFE14BC42749A348DCFC03CFCB2BF /* AssetManager+AVAssetExportSession.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+AVAssetExportSession.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+AVAssetExportSession.swift"; sourceTree = ""; }; - E4510CDCA226DCE0E5A193FC8910CA58 /* YBImageBrowserDataSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBImageBrowserDataSource.h; path = YBImageBrowser/Protocol/YBImageBrowserDataSource.h; sourceTree = ""; }; - E48DCE42501B7013F70D4B72A64A9C20 /* MJProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJProperty.m; path = MJExtension/MJProperty.m; sourceTree = ""; }; + E2604177A3E85192F036556469BE54E5 /* cost_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_enc.c; path = src/enc/cost_enc.c; sourceTree = ""; }; + E283C787829B0255F3EA02250F65433D /* SDWebImage.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SDWebImage.debug.xcconfig; sourceTree = ""; }; + E2B7730E3EDC09E9C27731F9211A03E2 /* SDImageCacheDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCacheDefine.h; path = SDWebImage/Core/SDImageCacheDefine.h; sourceTree = ""; }; + E2DF4020FB18B7407F948B895C5A055E /* MqttAuthProperties.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttAuthProperties.swift; path = Source/MqttAuthProperties.swift; sourceTree = ""; }; + E3043900069A7BFFDBEFA4E3F38FBBC2 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = RxSwift/Errors.swift; sourceTree = ""; }; + E31ABC3FC220CB286BD36808983A58C9 /* SDCycleScrollView-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDCycleScrollView-umbrella.h"; sourceTree = ""; }; + E36023FA5050A88E423759EE0EFCD497 /* IQBarButtonItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQBarButtonItem.swift; path = IQKeyboardToolbar/Classes/IQBarButtonItem/IQBarButtonItem.swift; sourceTree = ""; }; + E3620E9742F07E1E2733403D44E6B104 /* MJExtensionConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJExtensionConst.h; path = MJExtension/MJExtensionConst.h; sourceTree = ""; }; + E36C51FA8863274AB0025855E64ACC3D /* ToJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToJSON.swift; path = Sources/ToJSON.swift; sourceTree = ""; }; + E3ADD0BE9D6A447D24B498B2BD362212 /* HXPHPicker-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "HXPHPicker-Info.plist"; sourceTree = ""; }; + E3AEA4903A4A524064387947E97A51C2 /* UploadFileCallbackProxy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = UploadFileCallbackProxy.m; path = OpenIMSDK/CallbackProxy/UploadFileCallbackProxy.m; sourceTree = ""; }; + E3C18EF459A92F67B78ABCB4D4C4B7DB /* YBImage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBImage.h; path = YBImageBrowser/Image/YBImage.h; sourceTree = ""; }; + E3CF53606678C5355554CEAF86E72A88 /* NetworkAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkAsset.swift; path = Sources/HXPHPicker/Picker/Model/NetworkAsset.swift; sourceTree = ""; }; + E4047E809A4658ECA83A30E6061F84DC /* KeyframeGroup+exactlyOneKeyframe.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "KeyframeGroup+exactlyOneKeyframe.swift"; path = "Sources/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift"; sourceTree = ""; }; + E41C167A42094403E6D01F0C012B89B5 /* IdentifiableValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IdentifiableValue.swift; path = Sources/Differentiator/IdentifiableValue.swift; sourceTree = ""; }; + E45E6AF7340B004DA48A8AE2F8B53F37 /* MqttCocoaAsyncSocket-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MqttCocoaAsyncSocket-dummy.m"; sourceTree = ""; }; + E4876B235EFC3F79E4FC7B2FAF3A32B1 /* ImageAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageAsset.swift; path = Sources/Private/Model/Assets/ImageAsset.swift; sourceTree = ""; }; E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MJRefresh; path = MJRefresh.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E4B119AE75A9A04C0FC424C31B4F171B /* OIMMessageInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMMessageInfo.h; path = OpenIMSDK/Model/OIMMessageInfo.h; sourceTree = ""; }; - E4B19EAC26B64E59FF162E36726E6092 /* CoreTextRenderLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CoreTextRenderLayer.swift; path = Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift; sourceTree = ""; }; - E4C25CF77476705A8727ED57006FDCA2 /* UICollectionView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+Rx.swift"; path = "RxCocoa/iOS/UICollectionView+Rx.swift"; sourceTree = ""; }; - E4D3017944C2D05C9DAE6514D3E169CD /* SDImageCoderHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageCoderHelper.m; path = SDWebImage/Core/SDImageCoderHelper.m; sourceTree = ""; }; - E4E622365146682D7E08A6242B2B73CB /* FromJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FromJSON.swift; path = Sources/FromJSON.swift; sourceTree = ""; }; - E4F5EC1C754116115B07C3500772FE8C /* Optional.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Optional.swift; path = RxSwift/Observables/Optional.swift; sourceTree = ""; }; - E5000C74964362967707C8378D889444 /* RxWKNavigationDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxWKNavigationDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxWKNavigationDelegateProxy.swift; sourceTree = ""; }; - E50D3CE2D0594CBF14EB8467CCA02548 /* AtomicInt.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AtomicInt.swift; path = Platform/AtomicInt.swift; sourceTree = ""; }; - E517A2C282848FD3AE6C7353C8CFAEEA /* SGWeakProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGWeakProxy.h; path = SGQRCode/WeakProxy/SGWeakProxy.h; sourceTree = ""; }; - E535975A1E831BDA5977960E97506533 /* ObservableConvertibleType+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Driver.swift"; path = "RxCocoa/Traits/Driver/ObservableConvertibleType+Driver.swift"; sourceTree = ""; }; - E5EE5A8E12E72187726895C340E99A1D /* ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist"; sourceTree = ""; }; - E5F3B932CFBC76ABF24A9176D190C4B5 /* PhotoAsset+URL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoAsset+URL.swift"; path = "Sources/HXPHPicker/Picker/Model/PhotoAsset+URL.swift"; sourceTree = ""; }; - E5F61B293B8A4C483CC96C8328E45C9D /* PreviewVideoControlViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreviewVideoControlViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PreviewVideoControlViewCell.swift; sourceTree = ""; }; - E60749802573F5E98F0C09AA9D2F3812 /* HexColorTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HexColorTransform.swift; path = Sources/HexColorTransform.swift; sourceTree = ""; }; - E614EC925D6A4CB0BB4E4E4562902436 /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = ""; }; - E620B11AE2F7F2E8AE1F8A1757329947 /* URLEncodedFormEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = URLEncodedFormEncoder.swift; path = Source/Features/URLEncodedFormEncoder.swift; sourceTree = ""; }; - E64CECF2B277E1740E8F08CA7B8F77A5 /* upsampling_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_mips_dsp_r2.c; path = src/dsp/upsampling_mips_dsp_r2.c; sourceTree = ""; }; - E653E3EC2CFFB240C0B26C63037A8603 /* AsyncSubject.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AsyncSubject.swift; path = RxSwift/Subjects/AsyncSubject.swift; sourceTree = ""; }; - E66C33D1549606616E2570F9CA08627C /* UIStepper+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIStepper+Rx.swift"; path = "RxCocoa/iOS/UIStepper+Rx.swift"; sourceTree = ""; }; - E66DA86ED33D4956EA0F327875149B12 /* Lock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Lock.swift; path = RxSwift/Concurrency/Lock.swift; sourceTree = ""; }; - E67302D9EB7537412F3092EFC7E74F0F /* IQTextInputViewNotification-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextInputViewNotification-umbrella.h"; sourceTree = ""; }; - E6C43FEBD18CE9598FA1A74938867514 /* KingfisherManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherManager.swift; path = Sources/General/KingfisherManager.swift; sourceTree = ""; }; - E6DD771B15976B2FCF55AF7141BF75B0 /* AMapLocationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapLocationManager.h; path = AMapLocationKit.framework/Headers/AMapLocationManager.h; sourceTree = ""; }; - E6E25AB29490F32DE655534A02FF32EA /* encode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = encode.h; path = src/webp/encode.h; sourceTree = ""; }; - E6E2849379444297D6642C171B517AA2 /* CocoaLumberjack.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CocoaLumberjack.release.xcconfig; sourceTree = ""; }; - E6FB79E861E4F3D89D4BDDCF33899DB8 /* PublishRelay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PublishRelay.swift; path = RxRelay/PublishRelay.swift; sourceTree = ""; }; - E70DEF2275BA1DE435D81CA32E5E7FB6 /* CocoaLumberjack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CocoaLumberjack.h; path = "Sources/CocoaLumberjack/Supporting Files/CocoaLumberjack.h"; sourceTree = ""; }; - E717BD781EB091185A79C355C520A67A /* RxTableViewDataSourceType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourceType.swift; path = RxCocoa/iOS/Protocols/RxTableViewDataSourceType.swift; sourceTree = ""; }; - E747366903F9ED5B7CBB1D60E84BB103 /* dec_neon.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec_neon.c; path = src/dsp/dec_neon.c; sourceTree = ""; }; - E76CF312E733637C8775BF05416542E0 /* alpha_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_enc.c; path = src/enc/alpha_enc.c; sourceTree = ""; }; - E7742E45657024F0DDFEBD97D410588B /* AnimationCacheProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnimationCacheProvider.swift; path = Sources/Public/AnimationCache/AnimationCacheProvider.swift; sourceTree = ""; }; - E79CAC9375ACAB81CC6DF05A6F6DC26F /* upsampling_sse41.c */ = {isa = PBXFileReference; includeInIndex = 1; name = upsampling_sse41.c; path = src/dsp/upsampling_sse41.c; sourceTree = ""; }; - E7F0E8464FD7AF4F138EB5EAA5FA48F4 /* InfiniteOpaqueAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteOpaqueAnimationLayer.swift; path = Sources/Private/CoreAnimation/Layers/InfiniteOpaqueAnimationLayer.swift; sourceTree = ""; }; - E8223C1F95FE293B35A7BBCB5B6B8125 /* PhotoManager+Language.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoManager+Language.swift"; path = "Sources/HXPHPicker/Core/Util/PhotoManager+Language.swift"; sourceTree = ""; }; - E82B6099394C2F5A543E192B85CC8691 /* ContentConfigurableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ContentConfigurableView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/ContentConfigurableView.swift; sourceTree = ""; }; - E834870E6150A5FFB1FCE3D10C8A1A67 /* CollectionViewSectionedDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CollectionViewSectionedDataSource.swift; path = Sources/RxDataSources/CollectionViewSectionedDataSource.swift; sourceTree = ""; }; - E867074B27E8FABABEB3A062C89F10C7 /* msa_macro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = msa_macro.h; path = src/dsp/msa_macro.h; sourceTree = ""; }; - E8D7DF632932C141A3A0BC1099B53183 /* Archive+Writing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+Writing.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+Writing.swift"; sourceTree = ""; }; - E8DA1971C85095100A5EE182440E27A2 /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; }; - E8E3080423B25BF6C6075F57320D28B6 /* YBIBCollectionView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBCollectionView.m; path = YBImageBrowser/Base/YBIBCollectionView.m; sourceTree = ""; }; - E90211449D1194D31D1BE906BFB6FEBB /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Source/SwiftyJSON/PrivacyInfo.xcprivacy; sourceTree = ""; }; - E906AAEBF4DCC02DEAD03D193A8E8CC1 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/PrivacyInfo.xcprivacy; sourceTree = ""; }; - E91916B07C37A209D25B7D910842E604 /* String+IdentifiableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+IdentifiableType.swift"; path = "Sources/RxDataSources/String+IdentifiableType.swift"; sourceTree = ""; }; - E926FA11E8BA74B1F4F9474810B87590 /* SwiftKeychainWrapper.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftKeychainWrapper.debug.xcconfig; sourceTree = ""; }; - E92A2F23BD154B929E5D231A46F3FCA1 /* SDImageIOAnimatedCoderInternal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageIOAnimatedCoderInternal.h; path = SDWebImage/Private/SDImageIOAnimatedCoderInternal.h; sourceTree = ""; }; - E9603A4E8FF5FF21DE3C230D19267661 /* SGScanCode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SGScanCode.h; path = SGQRCode/QRCode/SGScanCode.h; sourceTree = ""; }; - E97AC31A9AC2AFCB0774AC162D89D243 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoGifFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h; sourceTree = ""; }; - E98072F9E435CA10388C986C4EAA96F6 /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Sources/Image/Image.swift; sourceTree = ""; }; - E9A43AEB8060E50780CE46E8FFB7F94D /* YBIBVideoData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoData.m; path = Video/YBIBVideoData.m; sourceTree = ""; }; - E9C0E7881BEB03E2172FC9B3A9B1ABB3 /* RxSwiftExt-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "RxSwiftExt-Info.plist"; sourceTree = ""; }; - E9C22CBBE02969A90F816D150A20E9FF /* KingfisherError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KingfisherError.swift; path = Sources/General/KingfisherError.swift; sourceTree = ""; }; - E9DE577BCD3B1980C66068F5BBF9C1DA /* KeyframeExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyframeExtensions.swift; path = Sources/Private/Utility/Interpolatable/KeyframeExtensions.swift; sourceTree = ""; }; - E9EAC640CE6D964C3A01D2AD0D9CA661 /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ViewController+MASAdditions.m"; path = "Masonry/ViewController+MASAdditions.m"; sourceTree = ""; }; - E9FDA15702E93A36F94093E64FFCBDAA /* GTCommonSDK-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "GTCommonSDK-xcframeworks.sh"; sourceTree = ""; }; - EA293B714E3EFFF2B4E110D6741A5097 /* UIView+SDExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SDExtension.h"; path = "SDCycleScrollView/Lib/SDCycleScrollView/UIView+SDExtension.h"; sourceTree = ""; }; - EA50E8FECBEF17BCC8D53B8CD0D61CA1 /* huffman_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = huffman_utils.h; path = src/utils/huffman_utils.h; sourceTree = ""; }; - EA7E04CEEC7A79FB05E2DE3DAE634DF4 /* backward_references_cost_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = backward_references_cost_enc.c; path = src/enc/backward_references_cost_enc.c; sourceTree = ""; }; - EA7F7E45797654B45F07848151665690 /* UIButton+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+WebCache.h"; path = "SDWebImage/Core/UIButton+WebCache.h"; sourceTree = ""; }; - EA80AAE9A8F4745194A22138D50BAC46 /* PhotoPreviewSelectedViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewSelectedViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPreviewSelectedViewCell.swift; sourceTree = ""; }; - EA9838D5568CF08D46DA7E59F8CF6C0D /* DotLottieFileHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieFileHelpers.swift; path = Sources/Public/DotLottie/DotLottieFileHelpers.swift; sourceTree = ""; }; - EA9CEA59AF7E8F2341E1A92B8FB97E66 /* distinct+RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "distinct+RxCocoa.swift"; path = "Source/RxCocoa/distinct+RxCocoa.swift"; sourceTree = ""; }; - EAB7003BBB2F9EF9DA4E095D91280CC0 /* SDWebImageManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageManager.h; path = SDWebImage/Core/SDWebImageManager.h; sourceTree = ""; }; - EAEC149E660F72FBA6F717D362ECF1F5 /* TestHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestHelpers.swift; path = Sources/Private/Utility/Debugging/TestHelpers.swift; sourceTree = ""; }; - EAF1091660C6429B118149BE01714056 /* OIMManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMManager.m; path = OpenIMSDK/Interface/OIMManager.m; sourceTree = ""; }; - EB04F626FFD85B894E25E3C7C4001505 /* UIViewController+ParentContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+ParentContainer.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIViewController+ParentContainer.swift"; sourceTree = ""; }; - EB09968F5CF26869F7C209FA6BA9D6AB /* DataRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataRequest.swift; path = Source/Core/DataRequest.swift; sourceTree = ""; }; - EB19BE65B98A0E3ED0F4558833C481CC /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; }; - EB3C8E0FE0025F189650168E3AF6C6BE /* AnyObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyObserver.swift; path = RxSwift/AnyObserver.swift; sourceTree = ""; }; - EB451DC015F96BFF40FAA681B9B222BD /* IQKeyboardReturnManager.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardReturnManager.release.xcconfig; sourceTree = ""; }; - EB48C25BA36E7A3A90DF6A7ACCF696A7 /* Editor+UIImage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Editor+UIImage.swift"; path = "Sources/HXPHPicker/Editor/Extension/Editor+UIImage.swift"; sourceTree = ""; }; - EB7396B87B6C023F0EC483AD518CC57D /* UIView+WebCacheOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCacheOperation.h"; path = "SDWebImage/Core/UIView+WebCacheOperation.h"; sourceTree = ""; }; - EB7E2AEED7BA2AEFE99F0369B0A398E2 /* SDAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDAnimatedImageView.h; path = SDWebImage/Core/SDAnimatedImageView.h; sourceTree = ""; }; - EB8EED23F953B16F768563FC931049B9 /* DropShadowStyle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropShadowStyle.swift; path = Sources/Private/Model/LayerStyles/DropShadowStyle.swift; sourceTree = ""; }; - EB9F979185CFD56D1A727A76434687D2 /* UIScrollView+reachedBottom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIScrollView+reachedBottom.swift"; path = "Source/RxCocoa/UIScrollView+reachedBottom.swift"; sourceTree = ""; }; - EBC3EFE6841863A2FC0E1F280D5E0C18 /* WithLatestFrom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WithLatestFrom.swift; path = RxSwift/Observables/WithLatestFrom.swift; sourceTree = ""; }; - EBC7D79FCFE59C1D4E2B2EEC9415C53B /* bit_writer_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = bit_writer_utils.c; path = src/utils/bit_writer_utils.c; sourceTree = ""; }; - EC0B5B97AEDE09AD78D399CF70F6468F /* IQKeyboardToolbarPlaceholderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQKeyboardToolbarPlaceholderConfiguration.swift; path = IQKeyboardToolbar/Classes/Placeholder/IQKeyboardToolbarPlaceholderConfiguration.swift; sourceTree = ""; }; - EC5B534FF1A78D5C2AC189C51939C944 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshBackGifFooter.h; path = MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h; sourceTree = ""; }; - EC75BE3FA4A00604568829C9FF27AAAE /* OIMSimpleRequstInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSimpleRequstInfo.m; path = OpenIMSDK/Model/OIMSimpleRequstInfo.m; sourceTree = ""; }; - EC837C19FBB78BFC74ECCA16877EF7B6 /* InvertedMatteLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvertedMatteLayer.swift; path = Sources/Private/MainThread/LayerContainers/Utility/InvertedMatteLayer.swift; sourceTree = ""; }; - EC839CBDE62FBDF1FB0A9B6E583E159C /* RxTableViewDelegateProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDelegateProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDelegateProxy.swift; sourceTree = ""; }; - EC974D5440D46C2475A13210B5072DF5 /* ISOParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ISOParser.swift; path = Sources/SwiftDate/Formatters/ISOParser.swift; sourceTree = ""; }; - ECB898FD774D9886C3F4389AF60B275C /* EmptyViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EmptyViewConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/EmptyViewConfiguration.swift; sourceTree = ""; }; - ECDCA6BEAFD67BE73F5C9BDE8C1B4D50 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIScrollView+MJExtension.m"; path = "MJRefresh/UIScrollView+MJExtension.m"; sourceTree = ""; }; - ECE162FF4B96BD214DA70E69F32A4DC8 /* MarqueeLabel.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MarqueeLabel.modulemap; sourceTree = ""; }; - ED63C76DB0E4B5BC896EBC92A06916DC /* VideoEditorCropView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorCropView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorCropView.swift; sourceTree = ""; }; - ED84EE15E780A4989C1BA79801B0FCF2 /* IQKeyboardCore.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardCore.debug.xcconfig; sourceTree = ""; }; - EDB10F862D32D2EB8157A71B23F041C5 /* SDInternalMacros.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDInternalMacros.m; path = SDWebImage/Private/SDInternalMacros.m; sourceTree = ""; }; - EDB98AB321A5B30B05F0F320384699D3 /* StrokeRenderer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StrokeRenderer.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift; sourceTree = ""; }; - EDD4F7BA6A5912E04B2CD34EE7001335 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Sources/ConstraintInsets.swift; sourceTree = ""; }; - EDE1FC37AA6F040B0AF72E17C31A9E4D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = Sources/RxRelay/PrivacyInfo.xcprivacy; sourceTree = ""; }; - EE03A7DB31D2EA5D74E8AC6595DCD5DF /* MAAnnotationView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotationView.h; path = MAMapKit.framework/Headers/MAAnnotationView.h; sourceTree = ""; }; - EE250BA3582E9617496529A94B3D2AD0 /* YBIBIconManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBIconManager.m; path = YBImageBrowser/Helper/YBIBIconManager.m; sourceTree = ""; }; - EE3AF8CF71094C3214003559DB10B3CD /* SGPermissionPhoto.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SGPermissionPhoto.m; path = SGQRCode/Permission/SGPermissionPhoto.m; sourceTree = ""; }; - EE4A4FAAB99051ED36282D6DBBCEA552 /* OIMDefine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMDefine.h; path = OpenIMSDK/Utils/OIMDefine.h; sourceTree = ""; }; - EE530A41C456C8942C48BEE1BC4ACB0A /* DataTransform.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataTransform.swift; path = Sources/DataTransform.swift; sourceTree = ""; }; - EE69701659551D2EA95E581E43FAAE49 /* UIImage+GIF.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+GIF.h"; path = "SDWebImage/Core/UIImage+GIF.h"; sourceTree = ""; }; - EE6E8A9B790E4D34473307687D4B5F8D /* MAMVTTileOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMVTTileOverlay.h; path = MAMapKit.framework/Headers/MAMVTTileOverlay.h; sourceTree = ""; }; - EE764BBD21C61C43683701E3F5FE2FAE /* cost_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = cost_mips_dsp_r2.c; path = src/dsp/cost_mips_dsp_r2.c; sourceTree = ""; }; - EE79DEFA3AD3E0BFEA7198576E92711C /* ScheduledItemType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScheduledItemType.swift; path = RxSwift/Schedulers/Internal/ScheduledItemType.swift; sourceTree = ""; }; - EE8173DD24489D8BFB8A788C54567E2F /* Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Filter.swift; path = Sources/Image/Filter.swift; sourceTree = ""; }; - EE8AC2C8937DC5474F53AD860FC089B9 /* ColorEffectValue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorEffectValue.swift; path = Sources/Private/Model/LayerEffects/EffectValues/ColorEffectValue.swift; sourceTree = ""; }; - EE9E03A2577727310935A5A9E4A2B30B /* RxTableViewDataSourcePrefetchingProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewDataSourcePrefetchingProxy.swift; path = RxCocoa/iOS/Proxies/RxTableViewDataSourcePrefetchingProxy.swift; sourceTree = ""; }; - EEB276E3BB1A9C5CE3C8AA9EF7517032 /* IQKeyboardToolbarManager.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQKeyboardToolbarManager.modulemap; sourceTree = ""; }; - EEBAAA80E335D6590A9D194325FBA00F /* Archive+BackingConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+BackingConfiguration.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+BackingConfiguration.swift"; sourceTree = ""; }; - EF11D95E8530B336C22B28260B2E1056 /* IQTextInputViewNotification-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQTextInputViewNotification-prefix.pch"; sourceTree = ""; }; - EF1552FB2882AE6292A41E0FE732D03B /* SDDeviceHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDDeviceHelper.m; path = SDWebImage/Private/SDDeviceHelper.m; sourceTree = ""; }; - EF3C657C177D6F9668EE4037A7757222 /* ObserveOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ObserveOn.swift; path = RxSwift/Observables/ObserveOn.swift; sourceTree = ""; }; - EF44BFBC7F4569C26187AEBF6FB9202E /* IQKeyboardManager+Internal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Internal.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Internal.swift"; sourceTree = ""; }; - EF496A8009AFD9E84E8B500C581ECAC4 /* IQTextInputViewInfoModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQTextInputViewInfoModel.swift; path = IQKeyboardReturnManager/Classes/IQTextInputViewInfoModel.swift; sourceTree = ""; }; - EF6DF531579CE69496EA3326B6B5AB0C /* and.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = and.swift; path = Source/RxSwift/and.swift; sourceTree = ""; }; - EFAFFED0F09E8D30612FFC64F749D3BA /* IQKeyboardManager+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Position.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManager+Position.swift"; sourceTree = ""; }; - EFEF2502BCF487C0B50FAB112E1518D2 /* dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = dec.c; path = src/dsp/dec.c; sourceTree = ""; }; - EFFEA7E4A731859F2E8145F75A7FCBA0 /* BehaviorsConfigurableView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BehaviorsConfigurableView.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Views/BehaviorsConfigurableView.swift; sourceTree = ""; }; - F00857D4A1176AE49F933BBAE966C775 /* MASConstraint.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MASConstraint.h; path = Masonry/MASConstraint.h; sourceTree = ""; }; - F02E19AB613C5B9E4A3BC77C82DD4D93 /* Queue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Queue.swift; path = Platform/DataStructures/Queue.swift; sourceTree = ""; }; - F05C90425892DDCDF4B66655B97AA849 /* alpha_processing_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = alpha_processing_mips_dsp_r2.c; path = src/dsp/alpha_processing_mips_dsp_r2.c; sourceTree = ""; }; - F06017D8A40E2C269AD3723AAA849B8E /* MAAnnotationMoveAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAAnnotationMoveAnimation.h; path = MAMapKit.framework/Headers/MAAnnotationMoveAnimation.h; sourceTree = ""; }; - F06C8ABB058B9D2FEF1726930EB05BCE /* YBIBVideoData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBVideoData.h; path = Video/YBIBVideoData.h; sourceTree = ""; }; - F0C281DB20437F52417B71177BFAEE60 /* OIMSoundElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMSoundElem.m; path = OpenIMSDK/Model/OIMSoundElem.m; sourceTree = ""; }; - F1230DFA99D00D6DA8C2465727F22D30 /* SDAnimatedImagePlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDAnimatedImagePlayer.m; path = SDWebImage/Core/SDAnimatedImagePlayer.m; sourceTree = ""; }; - F12FF728132D421A61C2C6BF2D0F056D /* Array+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Array+Extensions.swift"; path = "Sources/RxDataSources/Array+Extensions.swift"; sourceTree = ""; }; - F176357BA383DB166EB1ED8951BA321C /* ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist"; sourceTree = ""; }; - F17F7847C169C42CD6A56A88675DE83D /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Sources/ConstraintMultiplierTarget.swift; sourceTree = ""; }; - F1A0B9A15DBD2D3F89FC7A2167A4AD3F /* SwiftyUserDefaults.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyUserDefaults.debug.xcconfig; sourceTree = ""; }; - F1B1B6D7D2E92F184F846249072A1E0F /* RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxCocoa.swift; path = RxCocoa/RxCocoa.swift; sourceTree = ""; }; - F1CBC6FE30779E662A20B0F6FB6BF989 /* IQRootControllerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IQRootControllerConfiguration.swift; path = IQKeyboardManagerSwift/IQKeyboardManager/Configuration/IQRootControllerConfiguration.swift; sourceTree = ""; }; - F1E36184832E3BA860B6D06AC2293606 /* Utils.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Utils.swift; path = RxRelay/Utils.swift; sourceTree = ""; }; - F210D2D653C03CF3DBACFBE1DAEBB5E6 /* Moya-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Moya-prefix.pch"; sourceTree = ""; }; - F214D9285BDD834DE0F15BEBB695D5E9 /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "View+MASShorthandAdditions.h"; path = "Masonry/View+MASShorthandAdditions.h"; sourceTree = ""; }; - F2208D0296FB7B05852D116F0936A6DE /* ImageDownloaderDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloaderDelegate.swift; path = Sources/Networking/ImageDownloaderDelegate.swift; sourceTree = ""; }; - F22AAF79A7B61FB53A870AA54CECA0A5 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; - F26CC0BC63B38EDBC22273E9C0D67DF2 /* Core+UIColor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+UIColor.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+UIColor.swift"; sourceTree = ""; }; - F26E5F82D1BEC8D2C97277B2D67D396E /* ConfigurationGlobals.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConfigurationGlobals.swift; path = Sources/CocoaLumberjackSwift/ConfigurationGlobals.swift; sourceTree = ""; }; - F2929AA63D82688BF8DA0D85380910E8 /* muxinternal.c */ = {isa = PBXFileReference; includeInIndex = 1; name = muxinternal.c; path = src/mux/muxinternal.c; sourceTree = ""; }; - F2FE218377A0EBA6929F45324DA24C6E /* SDCycleScrollView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDCycleScrollView-prefix.pch"; sourceTree = ""; }; - F302890B5B259BB8E004CBD0EEA581B8 /* MAMapCustomStyleOptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMapCustomStyleOptions.h; path = MAMapKit.framework/Headers/MAMapCustomStyleOptions.h; sourceTree = ""; }; - F31120DF2E5C142AB737BF64F301D994 /* NSControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSControl+Rx.swift"; path = "RxCocoa/macOS/NSControl+Rx.swift"; sourceTree = ""; }; - F3898027613E6C50E0078414D3DF1BE7 /* ObservableConvertibleType+Signal.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ObservableConvertibleType+Signal.swift"; path = "RxCocoa/Traits/Signal/ObservableConvertibleType+Signal.swift"; sourceTree = ""; }; - F3911F180E1B0182AC1A84D0FE3E4A4B /* UITableView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITableView+Rx.swift"; path = "RxCocoa/iOS/UITableView+Rx.swift"; sourceTree = ""; }; - F3B96086AC8BC0098AE6EDCDE92ED2BD /* enc_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_mips32.c; path = src/dsp/enc_mips32.c; sourceTree = ""; }; - F3D8BAD44D231ABE9E2CF363728BB827 /* Infallible+CombineLatest+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+CombineLatest+arity.swift"; path = "RxSwift/Traits/Infallible/Infallible+CombineLatest+arity.swift"; sourceTree = ""; }; - F40F3FE6E6E74FE180EC6601023DBA74 /* MJExtension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJExtension-umbrella.h"; sourceTree = ""; }; - F425869866B28E3E578068ABC712AA7D /* SubscriptionDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionDisposable.swift; path = RxSwift/Disposables/SubscriptionDisposable.swift; sourceTree = ""; }; - F43E549B88EA208A82D3DB6250CB8993 /* vp8li_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = vp8li_enc.h; path = src/enc/vp8li_enc.h; sourceTree = ""; }; - F45505C3143DE9F8A8125C9E96457415 /* MAMVTTileOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMVTTileOverlayRenderer.h; path = MAMapKit.framework/Headers/MAMVTTileOverlayRenderer.h; sourceTree = ""; }; - F458BC861920FABA639310941239FD72 /* UIView+Parent.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+Parent.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/UIKitExtensions/UIView+Parent.swift"; sourceTree = ""; }; - F45B5F359E982E067E2109249A8B0784 /* SelectBoxView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectBoxView.swift; path = Sources/HXPHPicker/Core/View/SelectBoxView.swift; sourceTree = ""; }; - F469E5185C17FD6B096DA1F3B7C3DC90 /* enc_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = enc_msa.c; path = src/dsp/enc_msa.c; sourceTree = ""; }; - F491CDC277C6297CED0F4DB7FDB3B7D1 /* partition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = partition.swift; path = Source/RxSwift/partition.swift; sourceTree = ""; }; - F49C1B5C54E03ED988C89B6FA16BDB5C /* Kingfisher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Kingfisher.swift; path = Sources/General/Kingfisher.swift; sourceTree = ""; }; - F49EBA828878A7FD53EFD3EC52DF8DB4 /* KingfisherWebP-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "KingfisherWebP-dummy.m"; sourceTree = ""; }; - F49EC34BA25445FFAFDB75752FD9EFFE /* YBIBVideoCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBVideoCell.m; path = Video/YBIBVideoCell.m; sourceTree = ""; }; - F4D184BC6A2082CDEBDF50A9810B022A /* huffman_utils.c */ = {isa = PBXFileReference; includeInIndex = 1; name = huffman_utils.c; path = src/utils/huffman_utils.c; sourceTree = ""; }; - F4DE10A108C2BBBDF4265A2B0E9396B5 /* partition+RxCocoa.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "partition+RxCocoa.swift"; path = "Source/RxCocoa/partition+RxCocoa.swift"; sourceTree = ""; }; - F4E7F97A8A4045F2AEA6EE56AD8C5E77 /* GTCommonSDK.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = GTCommonSDK.xcframework; sourceTree = ""; }; - F4F177FBFF8775FCFBEBEB5746A1F62D /* MathKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MathKit.swift; path = Sources/Private/Utility/Extensions/MathKit.swift; sourceTree = ""; }; - F4F73FE9E51AC36245FC54A1CFE8E872 /* UIControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIControl+Rx.swift"; path = "RxCocoa/iOS/UIControl+Rx.swift"; sourceTree = ""; }; - F531DEF9CEEFBD2F35BEBFBF41D073F4 /* Ellipse.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Ellipse.swift; path = Sources/Private/Model/ShapeItems/Ellipse.swift; sourceTree = ""; }; - F553CBDEE22BDB07390A5A1890961940 /* Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Create.swift; path = RxSwift/Observables/Create.swift; sourceTree = ""; }; - F559BB90CE3167F1DC71176358384C83 /* ViewEpoxyModeled.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ViewEpoxyModeled.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/ViewEpoxyModeled.swift; sourceTree = ""; }; - F565D5B158AF3BD7A2398E2AB52BB084 /* PickerInteractiveTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerInteractiveTransition.swift; path = Sources/HXPHPicker/Picker/Transition/PickerInteractiveTransition.swift; sourceTree = ""; }; - F579D560A7BAEC27AA799B2A5CD1BBD3 /* Kingfisher-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-umbrella.h"; sourceTree = ""; }; - F584805C537CD1CBA84D5491040BA7C1 /* Infallible+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Concurrency.swift"; path = "RxSwift/Traits/Infallible/Infallible+Concurrency.swift"; sourceTree = ""; }; - F5D7AA96F4C384FFC61ABBD9C65C7F0A /* BlendMode+Filter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "BlendMode+Filter.swift"; path = "Sources/Private/Utility/Extensions/BlendMode+Filter.swift"; sourceTree = ""; }; - F5F861507F91FE57B627EB903164472C /* RepeaterLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RepeaterLayer.swift; path = Sources/Private/CoreAnimation/Layers/RepeaterLayer.swift; sourceTree = ""; }; - F5F87C6B5FD4C86E35043453DB746469 /* SDWebImage-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-umbrella.h"; sourceTree = ""; }; - F6537FAA9BB9B73F701513A06F3F030E /* MAMapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MAMapKit.framework; sourceTree = ""; }; - F66066C78D6415B17CD2A32354EDC61D /* IQTextInputViewNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQTextInputViewNotification.modulemap; sourceTree = ""; }; - F6938529B4FFE728CE76E763A02DB60F /* UIView+IQKeyboardManagerExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIView+IQKeyboardManagerExtension.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/IQKeyboardManagerExtension/UIView+IQKeyboardManagerExtension.swift"; sourceTree = ""; }; - F6A1B9FE2A7F11E3B46CD429C4BA078D /* DropShadowEffect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DropShadowEffect.swift; path = Sources/Private/Model/LayerEffects/DropShadowEffect.swift; sourceTree = ""; }; - F6BC92DE073B96A0C6BE3673798472A0 /* IQKeyboardManagerSwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "IQKeyboardManagerSwift-prefix.pch"; sourceTree = ""; }; - F6C485474804F77A7EDCA1DE1FA325B8 /* EditorStickerTextViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorStickerTextViewController.swift; path = Sources/HXPHPicker/Editor/Controller/EditorStickerTextViewController.swift; sourceTree = ""; }; - F74E2AACBBD8C244A2E3D3E4A0EC3D58 /* ResourceBundle-Alamofire-Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-Alamofire-Alamofire-Info.plist"; sourceTree = ""; }; - F77154D97D4ACDB3794B86B36A4D2C2B /* ResourceBundle-MJExtension-MJExtension-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MJExtension-MJExtension-Info.plist"; sourceTree = ""; }; - F7738AB0B6EDCBBDDF07126A140BF145 /* MAGeodesicPolyline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAGeodesicPolyline.h; path = MAMapKit.framework/Headers/MAGeodesicPolyline.h; sourceTree = ""; }; - F77407D011F6375DA8974E897B3533C4 /* SDWebImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SDWebImage-prefix.pch"; sourceTree = ""; }; - F78512BDAE7DFEC4E0557ABA5FBC074A /* Observable+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Observable+Concurrency.swift"; path = "RxSwift/Observable+Concurrency.swift"; sourceTree = ""; }; - F7966531A0183DE2C6CC53DBCA688E00 /* Moya.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Moya.modulemap; sourceTree = ""; }; - F79EF22CDC01C744BFA86A491B88C628 /* LayerProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayerProperty.swift; path = Sources/Private/CoreAnimation/Animations/LayerProperty.swift; sourceTree = ""; }; + E4CF735786E6DCCDD3EC08F8BD99569E /* CustomPathAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomPathAnimation.swift; path = Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift; sourceTree = ""; }; + E4DA59576A1914BE355CDECE1AF3362D /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = ""; }; + E4F1801A3E01D1794CA3E91A36D21155 /* Archive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Archive.swift; path = Sources/Private/EmbeddedLibraries/ZipFoundation/Archive.swift; sourceTree = ""; }; + E5377BAA90C9F75A3EAA5CF2746999E7 /* ImagePrefetcher.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImagePrefetcher.swift; path = Sources/Networking/ImagePrefetcher.swift; sourceTree = ""; }; + E54B37EECAFD1ED4B59BA3EE791E7712 /* ResourceBundle-SDWebImage-SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-SDWebImage-SDWebImage-Info.plist"; sourceTree = ""; }; + E55922B6D21A9C0413F4DF52451235A1 /* AMapGeoFenceManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapGeoFenceManager.h; path = AMapLocationKit.framework/Headers/AMapGeoFenceManager.h; sourceTree = ""; }; + E57A882004E9DFAFD797700E1B5608FB /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + E589DCFDF4CA763286693D5151E8C2E7 /* ShapeItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeItem.swift; path = Sources/Private/Model/ShapeItems/ShapeItem.swift; sourceTree = ""; }; + E5B193016B16AF60E6FAC43E2C25F15B /* Signal+Subscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Signal+Subscription.swift"; path = "RxCocoa/Traits/Signal/Signal+Subscription.swift"; sourceTree = ""; }; + E5CAB98E979ECCA2A09B427375C957B5 /* PickerTransition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerTransition.swift; path = Sources/HXPHPicker/Picker/Transition/PickerTransition.swift; sourceTree = ""; }; + E62B072434546B62A0732B87388A9662 /* GYSDK-xcframeworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "GYSDK-xcframeworks.sh"; sourceTree = ""; }; + E62BB35812EB4C99463DE18C1B9EB0BD /* lossless_enc_sse2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_sse2.c; path = src/dsp/lossless_enc_sse2.c; sourceTree = ""; }; + E667E711991991D7861A26A9AAD09227 /* Decode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Decode.swift; path = RxSwift/Observables/Decode.swift; sourceTree = ""; }; + E66D165B0BE2563D5DADFEB252DF1608 /* _RXObjCRuntime.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _RXObjCRuntime.m; path = RxCocoa/Runtime/_RXObjCRuntime.m; sourceTree = ""; }; + E69CF3409B5E7DD09C934B8760D26B18 /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Sources/Utility/Result.swift; sourceTree = ""; }; + E6A4E1627379D6540B81A470C575D716 /* CocoaMQTT */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = CocoaMQTT; path = CocoaMQTT.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E6B17E7E86D3F8E7C697BD0F77163A15 /* SchedulerType+SharedSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "SchedulerType+SharedSequence.swift"; path = "RxCocoa/Traits/SharedSequence/SchedulerType+SharedSequence.swift"; sourceTree = ""; }; + E6D3BE472B6444F8EDCE6D9376908C0A /* RequestTypeWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestTypeWrapper.swift; path = Sources/Moya/RequestTypeWrapper.swift; sourceTree = ""; }; + E6D908919FE42CF57972EE6C0A340195 /* OIMUpdateFriendsReq.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMUpdateFriendsReq.h; path = OpenIMSDK/Model/OIMUpdateFriendsReq.h; sourceTree = ""; }; + E6DCBE3CADE53A7306B36C101337AAE8 /* RxCocoa-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxCocoa-prefix.pch"; sourceTree = ""; }; + E740FA3F162A1BCAED41C634DEE0BBB6 /* sharpyuv_dsp.c */ = {isa = PBXFileReference; includeInIndex = 1; name = sharpyuv_dsp.c; path = sharpyuv/sharpyuv_dsp.c; sourceTree = ""; }; + E796C4048C441AD02DC39D0BD3AC5217 /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Sources/ConstraintLayoutGuide.swift; sourceTree = ""; }; + E7B9D50DDFEECB6C6DE1EAEA0BC8ABE0 /* NSControl+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSControl+Rx.swift"; path = "RxCocoa/macOS/NSControl+Rx.swift"; sourceTree = ""; }; + E7C11B2A9E8F8B341AEA7B362E23E7E5 /* SubscribeOn.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscribeOn.swift; path = RxSwift/Observables/SubscribeOn.swift; sourceTree = ""; }; + E7C46C3987E417EC909753A8454CF13B /* DateComponents+Extras.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateComponents+Extras.swift"; path = "Sources/SwiftDate/Foundation+Extras/DateComponents+Extras.swift"; sourceTree = ""; }; + E7CDA2FFFAE2097689AF3F32BE7E21DE /* WillDisplayProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WillDisplayProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/WillDisplayProviding.swift; sourceTree = ""; }; + E80DB3359336F605C30FE7B728A01618 /* AlbumTitleArrowView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AlbumTitleArrowView.swift; path = Sources/HXPHPicker/Picker/View/AlbumTitleArrowView.swift; sourceTree = ""; }; + E8112BFCAD85A1901C75F5AECF9170CC /* Archive+ReadingDeprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Archive+ReadingDeprecated.swift"; path = "Sources/Private/EmbeddedLibraries/ZipFoundation/Archive+ReadingDeprecated.swift"; sourceTree = ""; }; + E85F341F52AD4EA9051370B4AB27A5BB /* GroupNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift; sourceTree = ""; }; + E861069B4AB76BA0BDB1C06C5147DCB7 /* TextInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TextInput.swift; path = RxCocoa/Common/TextInput.swift; sourceTree = ""; }; + E8B35159705EBE2193CC79CA9B894E50 /* VideoEditorMusicAnimationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorMusicAnimationView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorMusicAnimationView.swift; sourceTree = ""; }; + E8B80E9AC9A0222E9274AA651470F3F4 /* MJRefreshFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshFooter.h; path = MJRefresh/Base/MJRefreshFooter.h; sourceTree = ""; }; + E8B97DC75EF7EDB859A6C3C461EDDE5B /* OIMManager+Connection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Connection.h"; path = "OpenIMSDK/Interface/OIMManager+Connection.h"; sourceTree = ""; }; + E8F15BFECC7481FF1ADA3A897CCD4172 /* PhotoPickerBaseViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerBaseViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPickerBaseViewCell.swift; sourceTree = ""; }; + E91F66139CDDA437F057F79B815A732D /* ofType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ofType.swift; path = Source/RxSwift/ofType.swift; sourceTree = ""; }; + E924404F18EF5B2BFCF943AB82366720 /* AssetsLibrary.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AssetsLibrary.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/AssetsLibrary.framework; sourceTree = DEVELOPER_DIR; }; + E9267C55D20111C7DA6661FF692F1FCA /* common_sse41.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = common_sse41.h; path = src/dsp/common_sse41.h; sourceTree = ""; }; + E939347E78A0391184298A74581E8A4B /* CocoaLumberjack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CocoaLumberjack.h; path = "Sources/CocoaLumberjack/Supporting Files/CocoaLumberjack.h"; sourceTree = ""; }; + E95702201E937BD3B02E440468773440 /* UICollectionView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UICollectionView+Rx.swift"; path = "RxCocoa/iOS/UICollectionView+Rx.swift"; sourceTree = ""; }; + E964CE79E7B4729FBA8FB44F8D76D8C0 /* DDLogFlag+DDLogLevel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DDLogFlag+DDLogLevel.swift"; path = "Sources/CocoaLumberjackSwift/DDLogFlag+DDLogLevel.swift"; sourceTree = ""; }; + E9B8203079561D85B5850B843642810B /* SwiftyUserDefaults-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyUserDefaults-prefix.pch"; sourceTree = ""; }; + E9EFABA771877ADF9180E7DC0B95C72D /* NSImage+Compatibility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSImage+Compatibility.m"; path = "SDWebImage/Core/NSImage+Compatibility.m"; sourceTree = ""; }; + E9FBF3319C645F6D97915F2E5794574E /* Buffer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Buffer.swift; path = RxSwift/Observables/Buffer.swift; sourceTree = ""; }; + EA0077E342A252E846F4FF0AC2A7752E /* IQTextInputViewNotification.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQTextInputViewNotification.release.xcconfig; sourceTree = ""; }; + EA123271654EAC1C72B1A246499543F9 /* MakeViewProviding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MakeViewProviding.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/MakeViewProviding.swift; sourceTree = ""; }; + EA130CD648B85D56FD604CD251FFD940 /* TAPageControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TAPageControl.m; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAPageControl.m; sourceTree = ""; }; + EA52E2692A0A64130E93FC68F11C4F8E /* UIView+WebCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+WebCache.h"; path = "SDWebImage/Core/UIView+WebCache.h"; sourceTree = ""; }; + EA78CE4C4E183B922A11439BE9465823 /* CocoaMQTT-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CocoaMQTT-prefix.pch"; sourceTree = ""; }; + EA7C9A78827F0C1A7A33C41BAAE00C77 /* YBIBVideoData+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBIBVideoData+Internal.h"; path = "Video/YBIBVideoData+Internal.h"; sourceTree = ""; }; + EA8D9B8D105015C6EEF5E5C35E31DF2A /* CLIColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLIColor.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/CLIColor.h; sourceTree = ""; }; + EAD0ABC3813E3B5F2EC92BB34F2DF105 /* KingfisherWebP-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "KingfisherWebP-prefix.pch"; sourceTree = ""; }; + EB4B6E74F07CE1CFA6740CC7367A9A59 /* YYImageCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YYImageCoder.m; path = YYImage/YYImageCoder.m; sourceTree = ""; }; + EB5CE15E8B1EC758E154A3D6D0DBB372 /* DDTTYLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDTTYLogger.m; path = Sources/CocoaLumberjack/DDTTYLogger.m; sourceTree = ""; }; + EBAC8E57DF4784F9DECD58863EA59EE5 /* UIView+MJExtension.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MJExtension.m"; path = "MJRefresh/UIView+MJExtension.m"; sourceTree = ""; }; + EBB442D86F1DE12D3FD514D2FA20776B /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = ""; }; + EBBC4A106EB08D48922BFA7B703838F9 /* LottieLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieLogger.swift; path = Sources/Public/Logging/LottieLogger.swift; sourceTree = ""; }; + EBC245604F36AD9FEC3CD87AA04F7C2F /* RootAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RootAnimationLayer.swift; path = Sources/Private/RootAnimationLayer.swift; sourceTree = ""; }; + EBDD2EBD07F29616D00D6743544912F3 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = IQKeyboardCore/Assets/PrivacyInfo.xcprivacy; sourceTree = ""; }; + EBF872BB8015B50B7C30FC72B5542972 /* LocalAsset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LocalAsset.swift; path = Sources/HXPHPicker/Picker/Model/LocalAsset.swift; sourceTree = ""; }; + EC17AC8224AF86055ABF638581E03865 /* MJRefresh-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MJRefresh-prefix.pch"; sourceTree = ""; }; + EC3074255B9B2BC12ABE3CC218759254 /* IQKeyboardManager+Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "IQKeyboardManager+Deprecated.swift"; path = "IQKeyboardManagerSwift/IQKeyboardManager/Deprecated/IQKeyboardManager+Deprecated.swift"; sourceTree = ""; }; + EC770E47AC11ACA4E82F3988F665DAE0 /* ssim.c */ = {isa = PBXFileReference; includeInIndex = 1; name = ssim.c; path = src/dsp/ssim.c; sourceTree = ""; }; + ECC43983EFD3D5D2F45DD8A897943511 /* random_utils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = random_utils.h; path = src/utils/random_utils.h; sourceTree = ""; }; + ED167E45D7D1D195B797F19B14612D2F /* MBProgressHUD.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = MBProgressHUD.modulemap; sourceTree = ""; }; + ED2169A587A329F11F373D2C50FD832F /* IQKeyboardManagerSwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "IQKeyboardManagerSwift-dummy.m"; sourceTree = ""; }; + ED2816CD352689684AAEE79226E49047 /* OIMAttachedInfoElem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = OIMAttachedInfoElem.m; path = OpenIMSDK/Model/OIMAttachedInfoElem.m; sourceTree = ""; }; + ED3122A7683DD455BE085F8C321705DE /* CombineLatest+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CombineLatest+arity.swift"; path = "RxSwift/Observables/CombineLatest+arity.swift"; sourceTree = ""; }; + ED390F269F79FD6E16BA0CEEC761596E /* Infallible+Concurrency.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Concurrency.swift"; path = "RxSwift/Traits/Infallible/Infallible+Concurrency.swift"; sourceTree = ""; }; + ED9291ABC29121BC7F4C0411D3DFCBDF /* DefaultsAdapter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsAdapter.swift; path = Sources/DefaultsAdapter.swift; sourceTree = ""; }; + ED970E0B932A9A86C6B9B60E4F4A43DE /* SectionedChangeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionedChangeset.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/SectionedChangeset.swift; sourceTree = ""; }; + EDA3D12EB0F19B293CD12CD014400BFB /* OpenIMSDK-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "OpenIMSDK-dummy.m"; sourceTree = ""; }; + EDB059CE88379E4FEA3A790FFBAB04A8 /* YBIBToastView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBToastView.h; path = YBImageBrowser/AuxiliaryView/YBIBToastView.h; sourceTree = ""; }; + EDFC757F93436D274F31BEDE5022C7AD /* DefaultsBridges.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsBridges.swift; path = Sources/DefaultsBridges.swift; sourceTree = ""; }; + EE0AA3E0FC0B76C7509CA620EE4FC698 /* DotLottieFileHelpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieFileHelpers.swift; path = Sources/Public/DotLottie/DotLottieFileHelpers.swift; sourceTree = ""; }; + EE6E36EA8058AD2A1D0CFBC154558690 /* MASConstraint+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MASConstraint+Private.h"; path = "Masonry/MASConstraint+Private.h"; sourceTree = ""; }; + EE979B9EDF3477B9352133C921EA1855 /* LottieAnimationSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationSource.swift; path = Sources/Private/Utility/LottieAnimationSource.swift; sourceTree = ""; }; + EEBEE290B7F33E3A002E037EFADB8B2F /* MJRefreshConst.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshConst.h; path = MJRefresh/MJRefreshConst.h; sourceTree = ""; }; + EEE5C71E2AA2ED3E55F45F94737D8BF6 /* LottieButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieButton.swift; path = Sources/Public/Controls/LottieButton.swift; sourceTree = ""; }; + EEEC9F1860BDB5691ECDE33AB473E52E /* RxPickerViewDataSourceProxy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxPickerViewDataSourceProxy.swift; path = RxCocoa/iOS/Proxies/RxPickerViewDataSourceProxy.swift; sourceTree = ""; }; + EF009A9EF803941B4308E2E0875AA35C /* PointValueProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PointValueProvider.swift; path = Sources/Public/DynamicProperties/ValueProviders/PointValueProvider.swift; sourceTree = ""; }; + EF35938B724A76703B2E4A3A763CF031 /* PhotoEditorMosaicView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorMosaicView.swift; path = Sources/HXPHPicker/Editor/View/Photo/PhotoEditorMosaicView.swift; sourceTree = ""; }; + EF3AAC0045F4635A4281CCE672E15EB1 /* OIMManager+Message.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "OIMManager+Message.m"; path = "OpenIMSDK/Interface/OIMManager+Message.m"; sourceTree = ""; }; + EFDC09EB16E3515D1F2F66533C832822 /* WKWebView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "WKWebView+Rx.swift"; path = "RxCocoa/iOS/WKWebView+Rx.swift"; sourceTree = ""; }; + EFE15059268A18A5A2987D96995CCA9F /* EditorController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorController.swift; path = Sources/HXPHPicker/Editor/Controller/EditorController.swift; sourceTree = ""; }; + F01DB60052787E78B38F3A1AF5263644 /* RxSwiftExt-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxSwiftExt-prefix.pch"; sourceTree = ""; }; + F02800A4D7E74C83AF754FB80D50552A /* DDFileLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DDFileLogger.h; path = Sources/CocoaLumberjack/include/CocoaLumberjack/DDFileLogger.h; sourceTree = ""; }; + F060B4B84D52BF88E54DC7C9B28D410D /* PreCompLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreCompLayer.swift; path = Sources/Private/CoreAnimation/Layers/PreCompLayer.swift; sourceTree = ""; }; + F078664F20916DBD98CD43B1695DBAD0 /* CocoaMQTTMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTMessage.swift; path = Source/CocoaMQTTMessage.swift; sourceTree = ""; }; + F0B37D9643E310BBA7496A4FE4A9FC48 /* AnyValueContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyValueContainer.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift; sourceTree = ""; }; + F0E50899C0C21D11C1827375725D6F78 /* FramePubAck.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FramePubAck.swift; path = Source/FramePubAck.swift; sourceTree = ""; }; + F0F19C6B885147A312B578A3DAAC871C /* MAMapKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MAMapKit.framework; sourceTree = ""; }; + F0F4E13F07A961A441A6054F294E1167 /* neon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = neon.h; path = src/dsp/neon.h; sourceTree = ""; }; + F1114FFC890A3B15EDE446EAEE06B9F2 /* InfiniteOpaqueAnimationLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InfiniteOpaqueAnimationLayer.swift; path = Sources/Private/CoreAnimation/Layers/InfiniteOpaqueAnimationLayer.swift; sourceTree = ""; }; + F1275B92920129B3ABF887C6F40F3504 /* MJRefreshComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshComponent.m; path = MJRefresh/Base/MJRefreshComponent.m; sourceTree = ""; }; + F13144DC6F4AB1AB855A41E59B26EB68 /* ParameterEncoder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoder.swift; path = Source/Core/ParameterEncoder.swift; sourceTree = ""; }; + F13ADE691A62AB1DF886EA4F7FD67E96 /* Core+DispatchQueue.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Core+DispatchQueue.swift"; path = "Sources/HXPHPicker/Core/Extension/Core+DispatchQueue.swift"; sourceTree = ""; }; + F140B22CB4AB5F7F5608248DFE474EB8 /* Driver+Subscription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Driver+Subscription.swift"; path = "RxCocoa/Traits/Driver/Driver+Subscription.swift"; sourceTree = ""; }; + F146679E95977A174286ABF268952FF7 /* YBIBGetBaseInfoProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBGetBaseInfoProtocol.h; path = YBImageBrowser/Protocol/YBIBGetBaseInfoProtocol.h; sourceTree = ""; }; + F17AA9FF2A03983AFAF7969998113A73 /* IQKeyboardCore.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardCore.release.xcconfig; sourceTree = ""; }; + F1A9770100809405AD02EE9CCCD7C2DF /* SectionModelType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SectionModelType.swift; path = Sources/Differentiator/SectionModelType.swift; sourceTree = ""; }; + F1ABC498902A7C5F1A16E46F26227B68 /* YBImageBrowser+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "YBImageBrowser+Internal.h"; path = "YBImageBrowser/Base/YBImageBrowser+Internal.h"; sourceTree = ""; }; + F1F80ED426C3EB59947DD048D46A342F /* OpenIMSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OpenIMSDK.release.xcconfig; sourceTree = ""; }; + F21FFCD8871B063FF323D4E6DEEBC240 /* OIMGCDMulticastDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMGCDMulticastDelegate.h; path = OpenIMSDK/Callbacker/OIMGCDMulticastDelegate.h; sourceTree = ""; }; + F27BBCA6BA4C196D7AE3AFB1E1710DD0 /* SDWebImageDownloaderRequestModifier.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDownloaderRequestModifier.m; path = SDWebImage/Core/SDWebImageDownloaderRequestModifier.m; sourceTree = ""; }; + F28E43923328EF261C416EB2E681B924 /* MqttDecodePubRel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MqttDecodePubRel.swift; path = Source/MqttDecodePubRel.swift; sourceTree = ""; }; + F2953C440B57675D5159D5D8B8AA7E00 /* Never.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Never.swift; path = RxSwift/Observables/Never.swift; sourceTree = ""; }; + F2C997ED187FDEF21DB00D42F13F8ECC /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS18.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + F2D30AFD0DABC502445D62AAE24594DC /* SubscriptionDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SubscriptionDisposable.swift; path = RxSwift/Disposables/SubscriptionDisposable.swift; sourceTree = ""; }; + F2DA3850B293BF553D6E776C8DE0A579 /* RequestCompression.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestCompression.swift; path = Source/Features/RequestCompression.swift; sourceTree = ""; }; + F2F48E9C3DD021AFAAF173158C2BC249 /* OIMMessageInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMMessageInfo.h; path = OpenIMSDK/Model/OIMMessageInfo.h; sourceTree = ""; }; + F2F5D4485890B56FE9E54491AF71F8DC /* ConnectableObservableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConnectableObservableType.swift; path = RxSwift/ConnectableObservableType.swift; sourceTree = ""; }; + F307E5CD7860C4F016E1F43A2267C932 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MJRefreshAutoNormalFooter.h; path = MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h; sourceTree = ""; }; + F34ED0A941A2F51373D6C1C05B1339D7 /* YBIBIconManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YBIBIconManager.h; path = YBImageBrowser/Helper/YBIBIconManager.h; sourceTree = ""; }; + F35C928F53F26BC77F3325C5C0D4FAB7 /* DateInRegion+Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DateInRegion+Create.swift"; path = "Sources/SwiftDate/DateInRegion/DateInRegion+Create.swift"; sourceTree = ""; }; + F38473A0318DD5468977B8B5695A90DD /* DDAbstractDatabaseLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DDAbstractDatabaseLogger.m; path = Sources/CocoaLumberjack/DDAbstractDatabaseLogger.m; sourceTree = ""; }; + F3AB2F5FE36493E753EEAAF3B8E6B30D /* AssetManager+AssetCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "AssetManager+AssetCollection.swift"; path = "Sources/HXPHPicker/Core/Util/AssetManager+AssetCollection.swift"; sourceTree = ""; }; + F3BAA05F975BDBFD9DB5397876D7BA25 /* ServerTrustEvaluation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustEvaluation.swift; path = Source/Features/ServerTrustEvaluation.swift; sourceTree = ""; }; + F3E14299379EB091FFF0667442E61240 /* OIMSearchResultInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = OIMSearchResultInfo.h; path = OpenIMSDK/Model/OIMSearchResultInfo.h; sourceTree = ""; }; + F4A0F3112C8A93C1B0BD8FB9E959BDA6 /* SDImageCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCache.h; path = SDWebImage/Core/SDImageCache.h; sourceTree = ""; }; + F4C9870F922E4407BE5CF841338FA99E /* SDWebImageDefine.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageDefine.m; path = SDWebImage/Core/SDWebImageDefine.m; sourceTree = ""; }; + F4EB46D249CB60D0D7A24DFBCDEC31B7 /* InvertedMatteLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvertedMatteLayer.swift; path = Sources/Private/MainThread/LayerContainers/Utility/InvertedMatteLayer.swift; sourceTree = ""; }; + F51E7DE30BC2B5251F76EC0B770D2D23 /* yuv_mips_dsp_r2.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_mips_dsp_r2.c; path = src/dsp/yuv_mips_dsp_r2.c; sourceTree = ""; }; + F51ECB02B19F5FE5864C701321C147C5 /* PickerBottomViewConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PickerBottomViewConfiguration.swift; path = Sources/HXPHPicker/Picker/Config/PickerBottomViewConfiguration.swift; sourceTree = ""; }; + F537EF39FAE967FAFFB3C95ADE5A3B62 /* buffer_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = buffer_dec.c; path = src/dec/buffer_dec.c; sourceTree = ""; }; + F5552552C87459C15E13CB07C4C4B689 /* OpenIMSDK.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = OpenIMSDK.debug.xcconfig; sourceTree = ""; }; + F55A04BD28A92256172FFBE62A100A7B /* TAAbstractDotView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TAAbstractDotView.m; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAAbstractDotView.m; sourceTree = ""; }; + F57B91C4DA1E7A118360091C50ACB4D6 /* DotLottieManifest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieManifest.swift; path = Sources/Private/Model/DotLottie/DotLottieManifest.swift; sourceTree = ""; }; + F58B1158B39BF41DE17B2D193BD0E0F5 /* SwiftUIMeasurementContainer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftUIMeasurementContainer.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/LayoutUtilities/SwiftUIMeasurementContainer.swift; sourceTree = ""; }; + F5929496387F8B541C21CC51C6AAF115 /* MJExtension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MJExtension.release.xcconfig; sourceTree = ""; }; + F5A050AD03631811ECB18C196A9D21CC /* Infallible+CombineLatest+arity.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+CombineLatest+arity.swift"; path = "RxSwift/Traits/Infallible/Infallible+CombineLatest+arity.swift"; sourceTree = ""; }; + F5AFA1348A84302F6F2CBA39EB6F5AB7 /* CALayer+setupLayerHierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CALayer+setupLayerHierarchy.swift"; path = "Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift"; sourceTree = ""; }; + F5D8900915140D4712BA5E20E7EAA3D4 /* PhotoEditorConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoEditorConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/PhotoEditorConfiguration.swift; sourceTree = ""; }; + F5DA1CF8DC7F54C5F4F0B7DAC3650369 /* PhotoPickerViewController+SwipeSelect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoPickerViewController+SwipeSelect.swift"; path = "Sources/HXPHPicker/Picker/Controller/PhotoPickerViewController+SwipeSelect.swift"; sourceTree = ""; }; + F5EC0B76BF335CF429B6B623B5DEF288 /* PathNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PathNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Protocols/PathNode.swift; sourceTree = ""; }; + F5F108D6C13B18E7F0E70A6661D58574 /* VideoEditorConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorConfiguration.swift; path = Sources/HXPHPicker/Editor/Config/VideoEditorConfiguration.swift; sourceTree = ""; }; + F5FD142CF1042BDEAD5F794A402A036B /* RxSwiftExt.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RxSwiftExt.debug.xcconfig; sourceTree = ""; }; + F642CE189FBD1A03236E003623E87E58 /* MAMultiPointOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAMultiPointOverlayRenderer.h; path = MAMapKit.framework/Headers/MAMultiPointOverlayRenderer.h; sourceTree = ""; }; + F671C802188EF41EED437EF1BD461D86 /* analysis_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = analysis_enc.c; path = src/enc/analysis_enc.c; sourceTree = ""; }; + F6870CA7016A7BB8E2033FD030B292EC /* ImageDownloader+LivePhoto.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ImageDownloader+LivePhoto.swift"; path = "Sources/Networking/ImageDownloader+LivePhoto.swift"; sourceTree = ""; }; + F69A46DACB8CF34C53C60CC2D027E792 /* String+IdentifiableType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+IdentifiableType.swift"; path = "Sources/RxDataSources/String+IdentifiableType.swift"; sourceTree = ""; }; + F6A8BD0B26710BD33082F2BBF5BB724A /* ImageCompositionLayer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageCompositionLayer.swift; path = Sources/Private/MainThread/LayerContainers/CompLayers/ImageCompositionLayer.swift; sourceTree = ""; }; + F6F7F87E9741597E5B0B6B3E10027344 /* GeYanSdk.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = GeYanSdk.xcframework; sourceTree = ""; }; + F6FB256EA07E33D5F394A9EA0450C896 /* SDWebImageCacheSerializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageCacheSerializer.m; path = SDWebImage/Core/SDWebImageCacheSerializer.m; sourceTree = ""; }; + F716D3D553C2B2B467ACFEB6493D9F37 /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Sources/ConstraintMaker.swift; sourceTree = ""; }; + F71C401A793A925B16B2794B641577F0 /* LRUAnimationCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LRUAnimationCache.swift; path = Sources/Public/AnimationCache/LRUAnimationCache.swift; sourceTree = ""; }; + F71D0D26D45B5542A0A8F39277E64753 /* MALineDrawType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MALineDrawType.h; path = MAMapKit.framework/Headers/MALineDrawType.h; sourceTree = ""; }; + F723E0730199FB22CB10297CB86034E7 /* ToArray.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ToArray.swift; path = RxSwift/Observables/ToArray.swift; sourceTree = ""; }; + F74E51E407C4A9311284CCF23D154B71 /* PassThroughOutputNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PassThroughOutputNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift; sourceTree = ""; }; + F75F21B2AAF7305696C0A8091C93874D /* RetryWhen.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryWhen.swift; path = RxSwift/Observables/RetryWhen.swift; sourceTree = ""; }; + F78CF62F0674BF90E70B2ECA05043B8B /* URLNavigator.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = URLNavigator.debug.xcconfig; sourceTree = ""; }; F7AE81981774B92C356A26FF843451C9 /* Pods-QuickLocation.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-QuickLocation.modulemap"; sourceTree = ""; }; - F7B20090C59B33E3BAD85392BE2A2BF9 /* LockOwnerType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LockOwnerType.swift; path = RxSwift/Concurrency/LockOwnerType.swift; sourceTree = ""; }; - F7C52778E00909D17F1C1A78E2BFF331 /* MAParticleOverlayRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAParticleOverlayRenderer.h; path = MAMapKit.framework/Headers/MAParticleOverlayRenderer.h; sourceTree = ""; }; - F7C68D1AD25BE9E3B11FE53E50D39163 /* Infallible+Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Create.swift"; path = "RxSwift/Traits/Infallible/Infallible+Create.swift"; sourceTree = ""; }; - F7FA543E892B922765067621A07C87FE /* AlipaySDK-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "AlipaySDK-iOS.release.xcconfig"; sourceTree = ""; }; - F84C87D3D449237C53594AAF0191B383 /* EditorController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EditorController.swift; path = Sources/HXPHPicker/Editor/Controller/EditorController.swift; sourceTree = ""; }; - F8806095ACB64222B262665284764BEA /* SelectBoxConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SelectBoxConfiguration.swift; path = Sources/HXPHPicker/Core/Config/SelectBoxConfiguration.swift; sourceTree = ""; }; - F89D901F96E665E5495CE0A5C598E200 /* UIViewController+TopMostViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+TopMostViewController.swift"; path = "Sources/URLNavigator/UIViewController+TopMostViewController.swift"; sourceTree = ""; }; - F8D6A5FE25A3244C84E4059F96B41735 /* DDLogFlag+DDLogLevel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DDLogFlag+DDLogLevel.swift"; path = "Sources/CocoaLumberjackSwift/DDLogFlag+DDLogLevel.swift"; sourceTree = ""; }; - F8DAD8511E44DA440DA3B2E026B7BB11 /* Take.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Take.swift; path = RxSwift/Observables/Take.swift; sourceTree = ""; }; - F8DEBF09645160014D2988AC5BC499ED /* Keyframes+timeRemapping.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Keyframes+timeRemapping.swift"; path = "Sources/Private/CoreAnimation/Extensions/Keyframes+timeRemapping.swift"; sourceTree = ""; }; - F8E0F9310F8F3E8573FC448EDC98B78C /* TAAnimatedDotView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TAAnimatedDotView.m; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAAnimatedDotView.m; sourceTree = ""; }; - F91BB611743387130526B221F2AD7EC3 /* histogram_enc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = histogram_enc.h; path = src/enc/histogram_enc.h; sourceTree = ""; }; - F9211F2F8ED853FD416D5AE344C4B2BA /* Throttle.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Throttle.swift; path = RxSwift/Observables/Throttle.swift; sourceTree = ""; }; - F92FC47C21AB70D50DE321EF7CDC1FEF /* YYAnimatedImageView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = YYAnimatedImageView.h; path = YYImage/YYAnimatedImageView.h; sourceTree = ""; }; - F956AF2B26CA388284D8AC5398D2DE02 /* URLNavigator-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "URLNavigator-Info.plist"; sourceTree = ""; }; + F7CE0D06257484EC85831F397106980B /* BinaryDisposable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BinaryDisposable.swift; path = RxSwift/Disposables/BinaryDisposable.swift; sourceTree = ""; }; + F7D2C52DC8C30B74D4C622E1D2D88BAE /* SDWebImage-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SDWebImage-dummy.m"; sourceTree = ""; }; + F7FAE59124813F9278DCFBAD69B7244C /* CompatibleAnimationView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompatibleAnimationView.swift; path = Sources/Public/iOS/Compatibility/CompatibleAnimationView.swift; sourceTree = ""; }; + F808015688D43C9E0031FC140F6849BB /* KingfisherWebP.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = KingfisherWebP.h; path = Sources/KingfisherWebP.h; sourceTree = ""; }; + F84E727F70A15E83B7D25FD1B1473F30 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIScrollView+MJRefresh.h"; path = "MJRefresh/UIScrollView+MJRefresh.h"; sourceTree = ""; }; + F88405DE450E285D5F5B8F3AA9747866 /* KeyedDecodingContainerExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeyedDecodingContainerExtensions.swift; path = Sources/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift; sourceTree = ""; }; + F894448A1A6571D3135218466860C95F /* Producer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Producer.swift; path = RxSwift/Observables/Producer.swift; sourceTree = ""; }; + F899F189DB3B7D9DF35DDEA3110CF17B /* DataExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DataExtension.swift; path = Sources/Private/Utility/Extensions/DataExtension.swift; sourceTree = ""; }; + F8D1527E921FE86AA6FFED26C884C85C /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+MASAdditions.m"; path = "Masonry/NSArray+MASAdditions.m"; sourceTree = ""; }; + F91B42E3A00BA1BA0E898C80945E1CC3 /* fromAsync.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = fromAsync.swift; path = Source/RxSwift/fromAsync.swift; sourceTree = ""; }; + F91C2C9B1E3C54C520A2D6DBE17AFB1B /* IQTextInputViewNotification.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = IQTextInputViewNotification.modulemap; sourceTree = ""; }; + F9552D22A9233631F84C168E3F12CBFA /* IndexChangeset.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = IndexChangeset.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Diffing/IndexChangeset.swift; sourceTree = ""; }; F956E149F5B195BB7833F97FC6211AE8 /* IQTextInputViewNotification-IQTextInputViewNotification */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "IQTextInputViewNotification-IQTextInputViewNotification"; path = IQTextInputViewNotification.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - F9604381FEF2D16AD7ED3B5538527210 /* Deprecated.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Deprecated.swift; path = Sources/RxDataSources/Deprecated.swift; sourceTree = ""; }; - F98D9C1BCC770B8E7D5CE310E26D0F4D /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = ""; }; - F9BD6A12132160649FD35B828E639EED /* SDWebImage-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SDWebImage-Info.plist"; sourceTree = ""; }; - FA38134483F784E7A4AA180ABE16C06E /* lossless_enc_msa.c */ = {isa = PBXFileReference; includeInIndex = 1; name = lossless_enc_msa.c; path = src/dsp/lossless_enc_msa.c; sourceTree = ""; }; - FA40714E188DAF7577D23D2408907AA0 /* Kingfisher-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Kingfisher-prefix.pch"; sourceTree = ""; }; - FA40745829B66EE3DC8E5C60D9CC9BEE /* YYImage-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "YYImage-prefix.pch"; sourceTree = ""; }; + F966211AE623F7F0393C7F5139C6CF61 /* partition.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = partition.swift; path = Source/RxSwift/partition.swift; sourceTree = ""; }; + F976405F401C7E3AC0CEE5C7C2595458 /* PhotoPickerSelectableViewCell.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerSelectableViewCell.swift; path = Sources/HXPHPicker/Picker/View/Cell/PhotoPickerSelectableViewCell.swift; sourceTree = ""; }; + F97E68DD72913DDFFA66907E6F040F8C /* SDWebImageOptionsProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageOptionsProcessor.h; path = SDWebImage/Core/SDWebImageOptionsProcessor.h; sourceTree = ""; }; + F995FF505792148D15A05FD9BEEBD27C /* SDImageCachesManagerOperation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageCachesManagerOperation.h; path = SDWebImage/Private/SDImageCachesManagerOperation.h; sourceTree = ""; }; + F9A39A1F349D79A7CA652C614515AFCB /* AMapLocation.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapLocation.release.xcconfig; sourceTree = ""; }; + F9C185543B30AD5DE41DCA09C4929D61 /* Moya.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Moya.debug.xcconfig; sourceTree = ""; }; + F9C28583AE34DED7B6FCD1ACDB354EDC /* BaseConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseConfiguration.swift; path = Sources/HXPHPicker/Core/Config/BaseConfiguration.swift; sourceTree = ""; }; + F9D77B762A0231CE5705251F42F55AC3 /* ImageDownloader.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDownloader.swift; path = Sources/Networking/ImageDownloader.swift; sourceTree = ""; }; + F9F8C9DA82FCCA7DED58B4421BDDA21F /* CompactMap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CompactMap.swift; path = RxSwift/Observables/CompactMap.swift; sourceTree = ""; }; + FA032BABA117E2462E78153FD9CBD9F0 /* Frame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Frame.swift; path = Source/Frame.swift; sourceTree = ""; }; + FA082DF76C288109730ABA3263B7E26D /* DateInRegion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DateInRegion.swift; path = Sources/SwiftDate/DateInRegion/DateInRegion.swift; sourceTree = ""; }; + FA1B3D33E1E2CC485CB770904F585605 /* MABaseEngineOverlay.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MABaseEngineOverlay.h; path = MAMapKit.framework/Headers/MABaseEngineOverlay.h; sourceTree = ""; }; + FA212ECF33B3A933473221784ED69166 /* NSObject+MJClass.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MJClass.m"; path = "MJExtension/NSObject+MJClass.m"; sourceTree = ""; }; + FA3223D73145E787B1981391FD710DAA /* UIViewController+TopMostViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIViewController+TopMostViewController.swift"; path = "Sources/URLNavigator/UIViewController+TopMostViewController.swift"; sourceTree = ""; }; + FA3C2D4D0F600143BF84D12E30EC764B /* AMapNearbySearchManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapNearbySearchManager.h; path = AMapSearchKit.framework/Headers/AMapNearbySearchManager.h; sourceTree = ""; }; + FA45A4A7B7866A3D8115C051623E3CF7 /* TADotView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = TADotView.h; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TADotView.h; sourceTree = ""; }; FA727BF5D9541C98C22C9ECC911576E2 /* IQKeyboardToolbarManager */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardToolbarManager; path = IQKeyboardToolbarManager.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FAB4CD456F6B33E249E6EA4B26455EBE /* DistinctUntilChanged.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DistinctUntilChanged.swift; path = RxSwift/Observables/DistinctUntilChanged.swift; sourceTree = ""; }; - FAC27B316D383024F0A59D8133F0685B /* LottieAnimationViewInitializers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieAnimationViewInitializers.swift; path = Sources/Public/Animation/LottieAnimationViewInitializers.swift; sourceTree = ""; }; - FACD7E533AA338FFEC18D2833425475F /* WebSocketRequest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WebSocketRequest.swift; path = Source/Core/WebSocketRequest.swift; sourceTree = ""; }; - FAE83CBDB804481CBE1626600EB92085 /* Infallible+Driver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Driver.swift"; path = "RxCocoa/Traits/Driver/Infallible+Driver.swift"; sourceTree = ""; }; - FAEA6E5F8BC0A7CAF9400093BB333FED /* YBIBContainerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBContainerView.m; path = YBImageBrowser/Base/YBIBContainerView.m; sourceTree = ""; }; - FB1A866C2F8021DBDD12F2DE5D772DF4 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = MJExtension/PrivacyInfo.xcprivacy; sourceTree = ""; }; - FB37AE0B23DBB1F9D609993CCEB82AC1 /* Combine.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Combine.swift; path = Source/Features/Combine.swift; sourceTree = ""; }; - FB4ADEBB4D4F0969EDB1E98FD06BD24A /* OIMManager+Connection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "OIMManager+Connection.h"; path = "OpenIMSDK/Interface/OIMManager+Connection.h"; sourceTree = ""; }; - FB5201BBE183A50F11FA42CA44512700 /* AMapFoundationVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = AMapFoundationVersion.h; path = AMapFoundationKit.framework/Headers/AMapFoundationVersion.h; sourceTree = ""; }; - FB7A47E1684EE076EE4D20C87EA82A15 /* ImageDataProcessor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ImageDataProcessor.swift; path = Sources/Networking/ImageDataProcessor.swift; sourceTree = ""; }; - FB887A9561D276DB34EA50EEE4EC12AC /* VideoEditorMusicView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoEditorMusicView.swift; path = Sources/HXPHPicker/Editor/View/Video/VideoEditorMusicView.swift; sourceTree = ""; }; - FB8BDEA4C7A77BAA0355626608295FB3 /* Popover.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Popover.swift; path = Classes/Popover.swift; sourceTree = ""; }; - FBC49F1BCFB02AB1359A624A65AB5824 /* StringExtensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = StringExtensions.swift; path = Sources/Private/Utility/Extensions/StringExtensions.swift; sourceTree = ""; }; - FBE3F550FE18AA6D139CD1B842365721 /* OpenIMSDK.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = OpenIMSDK.modulemap; sourceTree = ""; }; - FC4E893F753ADB394FE8F1C9F855C83D /* TAPageControl.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = TAPageControl.m; path = SDCycleScrollView/Lib/SDCycleScrollView/PageControl/TAPageControl.m; sourceTree = ""; }; + FA95392BD8532D881A2B0ADE65F10F5F /* Infallible+Create.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+Create.swift"; path = "RxSwift/Traits/Infallible/Infallible+Create.swift"; sourceTree = ""; }; + FA9EC52758D4E3583A39B592710F605A /* VideoPlayerView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = VideoPlayerView.swift; path = Sources/HXPHPicker/Core/View/VideoPlayerView.swift; sourceTree = ""; }; + FAD5FA39926E92F28F3AB831E3E144F6 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Sources/ConstraintPriority.swift; sourceTree = ""; }; + FAE9D676F02A2A0DAB13CF1AB99B5A4D /* Infallible+CombineLatest+Collection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Infallible+CombineLatest+Collection.swift"; path = "RxSwift/Traits/Infallible/Infallible+CombineLatest+Collection.swift"; sourceTree = ""; }; + FAF290DAFBACC9C13199D9CE5174EDA4 /* MJProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJProperty.m; path = MJExtension/MJProperty.m; sourceTree = ""; }; + FAFFC72036DE0CBF86EEAC95FEBA863A /* AnyEpoxyModelProperty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AnyEpoxyModelProperty.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/Model/Internal/AnyEpoxyModelProperty.swift; sourceTree = ""; }; + FB1D9DAF235C3360A49CB31CD5D21E03 /* GTCommonSDK.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = GTCommonSDK.release.xcconfig; sourceTree = ""; }; + FB775925FBA9D3D17B378BF4CF8672D7 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = ""; }; + FB7E0915414C93967B126EDE0A3EAE9C /* Marker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Marker.swift; path = Sources/Private/Model/Objects/Marker.swift; sourceTree = ""; }; + FBBBC8E8624440C8A9F3BC5407C904DD /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Sources/LayoutConstraint.swift; sourceTree = ""; }; + FBDE0A3AD89058345ADDE79961120897 /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSTextStorage+Rx.swift"; path = "RxCocoa/iOS/NSTextStorage+Rx.swift"; sourceTree = ""; }; + FBFCD3C2F41A889618134EB337C10CFE /* SDWebImageDownloader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDWebImageDownloader.h; path = SDWebImage/Core/SDWebImageDownloader.h; sourceTree = ""; }; + FC4CC40B8B0D567BE5F577D1576BDBDC /* RxTableViewReactiveArrayDataSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RxTableViewReactiveArrayDataSource.swift; path = RxCocoa/iOS/DataSources/RxTableViewReactiveArrayDataSource.swift; sourceTree = ""; }; + FC5AE789DAF559A15696D20E295016D5 /* YBIBImageCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = YBIBImageCache.m; path = YBImageBrowser/Image/YBIBImageCache.m; sourceTree = ""; }; FC7F0CF2EA5DF59C59D9995890DA5C47 /* IQKeyboardCore */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardCore; path = IQKeyboardCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FCD3A21323E36012C189C0952F31DAE8 /* NSButton+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSButton+Rx.swift"; path = "RxCocoa/macOS/NSButton+Rx.swift"; sourceTree = ""; }; - FCF8F600071E7B3102920CAB6FF48BAF /* PhotoPickerViewController+SwipeSelect.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "PhotoPickerViewController+SwipeSelect.swift"; path = "Sources/HXPHPicker/Picker/Controller/PhotoPickerViewController+SwipeSelect.swift"; sourceTree = ""; }; - FD07A6AA3A8ACBCE80E15C6F1BEF8D8B /* LottieButton.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LottieButton.swift; path = Sources/Public/Controls/LottieButton.swift; sourceTree = ""; }; - FD486E62809B39EA2FAE17E7977B3C8B /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshBackStateFooter.m; path = MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m; sourceTree = ""; }; - FD55ED66E31AAE52903F4144A4A5B144 /* KingfisherWebP-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "KingfisherWebP-Info.plist"; sourceTree = ""; }; - FD5E810B692FBB786B2032A23F252AFE /* ReducedMotionOption.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ReducedMotionOption.swift; path = Sources/Public/Configuration/ReducedMotionOption.swift; sourceTree = ""; }; + FC8CC7E34BF7AAB97DB81ECFAE7D3BA4 /* Bag.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Bag.swift; path = Platform/DataStructures/Bag.swift; sourceTree = ""; }; + FC9D6D0932358CB76A02655D6417A65C /* Picker+PhotoManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Picker+PhotoManager.swift"; path = "Sources/HXPHPicker/Picker/Util/Picker+PhotoManager.swift"; sourceTree = ""; }; + FCE67E867E7D87D4BB2761D5775A1CB2 /* AuthenticationChallengeResponsable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AuthenticationChallengeResponsable.swift; path = Sources/Networking/AuthenticationChallengeResponsable.swift; sourceTree = ""; }; + FCF8B7BABFCFD728C47BD91B529B0830 /* Platform.Darwin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Platform.Darwin.swift; path = Platform/Platform.Darwin.swift; sourceTree = ""; }; + FD018790C71DECF6D9B77734AEDDC8E1 /* SDImageGraphics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SDImageGraphics.h; path = SDWebImage/Core/SDImageGraphics.h; sourceTree = ""; }; + FD075C270BA262E2E0C9C7E705229ABB /* GroupInterpolator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = GroupInterpolator.swift; path = Sources/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift; sourceTree = ""; }; + FD30BE25D5B77C034CA2040AC6EF80E6 /* UIView+SDExtension.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+SDExtension.h"; path = "SDCycleScrollView/Lib/SDCycleScrollView/UIView+SDExtension.h"; sourceTree = ""; }; + FD3856AE45707685922FEF462D919D7B /* picture_rescale_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = picture_rescale_enc.c; path = src/enc/picture_rescale_enc.c; sourceTree = ""; }; + FD45EF31979AA82A13DD5D21DD34ADD5 /* Bag+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Bag+Rx.swift"; path = "RxSwift/Extensions/Bag+Rx.swift"; sourceTree = ""; }; FD694DB3E09A81036691F823E3211D44 /* MarqueeLabel-MarqueeLabel */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "MarqueeLabel-MarqueeLabel"; path = MarqueeLabel.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - FDE553DBFD8986CB772D81F3EA41D6F1 /* MemoryStorage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MemoryStorage.swift; path = Sources/Cache/MemoryStorage.swift; sourceTree = ""; }; - FDF694330205FA2699A346C81F89D14B /* IQKeyboardToolbar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbar.debug.xcconfig; sourceTree = ""; }; - FE0F2F0A1C318B0FFFF4DFE36D1A69C5 /* PhotoTools.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoTools.swift; path = Sources/HXPHPicker/Core/Util/PhotoTools.swift; sourceTree = ""; }; - FE27247B0F48B326AF1DDFF5E52E4127 /* Zones.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zones.swift; path = Sources/SwiftDate/Supports/Zones.swift; sourceTree = ""; }; - FE42C469235FE439145DB1ED23358021 /* TimePeriodChain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TimePeriodChain.swift; path = Sources/SwiftDate/TimePeriod/Groups/TimePeriodChain.swift; sourceTree = ""; }; - FE4D3EFFD11310558DF46FD1F4BC3E8C /* UIButton+WebCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+WebCache.m"; path = "SDWebImage/Core/UIButton+WebCache.m"; sourceTree = ""; }; - FE4FB396B3AD5E4CCCF7D904075E382A /* predictor_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; name = predictor_enc.c; path = src/enc/predictor_enc.c; sourceTree = ""; }; + FD8F7F80F12F551B6BDDBBD6981BC3E1 /* PhotoPreviewVideoView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPreviewVideoView.swift; path = Sources/HXPHPicker/Picker/View/PhotoPreviewVideoView.swift; sourceTree = ""; }; + FDA2360D1A6E94ECABACD3E1106335EF /* FillNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FillNode.swift; path = Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift; sourceTree = ""; }; + FDA3B029D6EB1945FC6FE325674E10FF /* SDWebImageOptionsProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDWebImageOptionsProcessor.m; path = SDWebImage/Core/SDWebImageOptionsProcessor.m; sourceTree = ""; }; + FDAE672DFD3D8A61B0D211BD81FAAE76 /* IQKeyboardToolbar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = IQKeyboardToolbar.debug.xcconfig; sourceTree = ""; }; + FDECDECD34ADFC847CCA706F55AFC610 /* yuv_mips32.c */ = {isa = PBXFileReference; includeInIndex = 1; name = yuv_mips32.c; path = src/dsp/yuv_mips32.c; sourceTree = ""; }; + FDF437331E3175752D0F2C1F3736BACA /* PhotoPickerViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PhotoPickerViewController.swift; path = Sources/HXPHPicker/Picker/Controller/PhotoPickerViewController.swift; sourceTree = ""; }; + FE18999B476D598F337EE1381FA8246C /* CocoaMQTTReasonCode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CocoaMQTTReasonCode.swift; path = Source/CocoaMQTTReasonCode.swift; sourceTree = ""; }; + FE2D768229B35C3FE454C2B95DEEC7BE /* ShapeAnimation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ShapeAnimation.swift; path = Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift; sourceTree = ""; }; + FE537AA8E8B46BAB0B6477FFC2C8F915 /* UITextView+Rx.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UITextView+Rx.swift"; path = "RxCocoa/iOS/UITextView+Rx.swift"; sourceTree = ""; }; + FE548559FF88988E65F345D73AA762B0 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = RxSwift/Observables/Error.swift; sourceTree = ""; }; FE6B8ABE5D0AD8A55BCFA48D21915C07 /* ObjectMapper-Privacy */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; name = "ObjectMapper-Privacy"; path = Privacy.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; - FEBCF31BB53A7A17C21471A5D93034A1 /* OperationQueueScheduler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OperationQueueScheduler.swift; path = RxSwift/Schedulers/OperationQueueScheduler.swift; sourceTree = ""; }; - FEC5AA73C23F8210E1D7C888097942B0 /* EpoxySwiftUILayoutMargins.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = EpoxySwiftUILayoutMargins.swift; path = Sources/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxySwiftUILayoutMargins.swift; sourceTree = ""; }; + FE6FE100A253357F7FFFAAF9AB9378C4 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Core/Notifications.swift; sourceTree = ""; }; + FE7774FEDAEA41B1AA9734250483E1FE /* AMapSearch.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AMapSearch.release.xcconfig; sourceTree = ""; }; + FEB39954F2E0BFA206C3D194C20D02C2 /* ItemsExtension.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ItemsExtension.swift; path = Sources/Private/MainThread/NodeRenderSystem/Extensions/ItemsExtension.swift; sourceTree = ""; }; + FEED446863E4D0E5C67019C24F146920 /* DefaultIfEmpty.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultIfEmpty.swift; path = RxSwift/Observables/DefaultIfEmpty.swift; sourceTree = ""; }; FEF9AC89E9C4BD37AC0AB78B535D1CFC /* IQKeyboardNotification */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = IQKeyboardNotification; path = IQKeyboardNotification.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF0025CF7C17D6A5F84D9489FE650FBA /* KeychainWrapper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainWrapper.swift; path = SwiftKeychainWrapper/KeychainWrapper.swift; sourceTree = ""; }; - FF07CBD86423A03E1F891EF47BBD0D56 /* tree_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; name = tree_dec.c; path = src/dec/tree_dec.c; sourceTree = ""; }; + FF0216C421365AD84F77ED22BEA23707 /* InvocableScheduledItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = InvocableScheduledItem.swift; path = RxSwift/Schedulers/Internal/InvocableScheduledItem.swift; sourceTree = ""; }; + FF2C24B67E5E17219B18B1D700847444 /* PHPickerResultImageDataProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PHPickerResultImageDataProvider.swift; path = Sources/General/ImageSource/PHPickerResultImageDataProvider.swift; sourceTree = ""; }; + FF39E4326B5C2C88D65E04B5814284C9 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshStateHeader.m; path = MJRefresh/Custom/Header/MJRefreshStateHeader.m; sourceTree = ""; }; + FF3DDD4A011290EF797564EFFFF0D7A5 /* ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist"; sourceTree = ""; }; + FF7E14938F3989FCF9A133CE332AC1B2 /* AlipaySDK.xcframework */ = {isa = PBXFileReference; includeInIndex = 1; path = AlipaySDK.xcframework; sourceTree = ""; }; FF8B264DFE802855D5D67E7CDDABFC3C /* RxRelay */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RxRelay; path = RxRelay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FF9D3F780F9307B2A4956B12C94603D9 /* FilepathImageProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilepathImageProvider.swift; path = Sources/Public/iOS/FilepathImageProvider.swift; sourceTree = ""; }; - FFC1B522A7D474FA4DAA6C62A6BEFB3D /* MJRefreshComponent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MJRefreshComponent.m; path = MJRefresh/Base/MJRefreshComponent.m; sourceTree = ""; }; - FFCED4E784FD6B990CD666FDBBA0A426 /* DotLottieCache.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DotLottieCache.swift; path = Sources/Public/DotLottie/Cache/DotLottieCache.swift; sourceTree = ""; }; - FFD2FEBE902487EB11E1F3B27258FDE6 /* PreCompLayerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PreCompLayerModel.swift; path = Sources/Private/Model/Layers/PreCompLayerModel.swift; sourceTree = ""; }; - FFD32F8F371F0FF3AB2E0204D4001137 /* KingfisherWebP.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = KingfisherWebP.debug.xcconfig; sourceTree = ""; }; - FFDFDE1F81FF2DFCF0881704A4F39FAB /* MAPolygonRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MAPolygonRenderer.h; path = MAMapKit.framework/Headers/MAPolygonRenderer.h; sourceTree = ""; }; + FFA5203579DE0199D1EEBA334E365319 /* RxRelay-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RxRelay-umbrella.h"; sourceTree = ""; }; + FFD9EB2C14D6F3DD35809C4C91193549 /* SDImageAssetManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SDImageAssetManager.m; path = SDWebImage/Private/SDImageAssetManager.m; sourceTree = ""; }; + FFEF543AD54697BFC217DAF8CAB97D91 /* UploadFileCallbackProxy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = UploadFileCallbackProxy.h; path = OpenIMSDK/CallbackProxy/UploadFileCallbackProxy.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 01975CBDD3B70D1E18BB91B8301AE617 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 01AE4BFCC836B4A0E0D7BFBDA19C9A6C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 01DFC48E1F53F491E4BA276CB013D8FB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 04C139C841E5A69C3B73E4E7788DB3C3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5234,6 +5395,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 06328DAD038631B177DE7D4FD4AA9DD9 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 09ACE5949EBCC5684672B2F1201524B9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5242,6 +5410,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 09DC200874950881346CB5CF3030DCDE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 893AE39673116061407A043A4E4DEA45 /* Foundation.framework in Frameworks */, + ED83D98E4E3641FBF4262E1B02B459E7 /* ImageIO.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0DFEBF6D5E3C7C73145E1449BA46D43A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5275,6 +5452,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 12B469B686D5B69A29FDCCD4BFD6C715 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 136888DB274708E87E58453C5DA09BEF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5283,43 +5467,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 14B3CCFC54C48FF903C4430B0CB61D11 /* Frameworks */ = { + 1E2B6A394F883A79D7671E5A135C602E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BA9ECBC5C994B303E135BCAE0A5A5047 /* Combine.framework in Frameworks */, - ECE1AFD4546BB60DCDB4FC88549B68C5 /* Foundation.framework in Frameworks */, - 0E7F7BDD99F835B83F946ED6E6C5E69E /* UIKit.framework in Frameworks */, + 83BE1DD5CA7DD2FBB5AE7012A78E405E /* Foundation.framework in Frameworks */, + 2943E6BAA581FB96B5D98F32706C231D /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 16AB0459A23AC69B658C7E57E2D4A6F2 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7048639AD3CDF1D671A76A1AC765417D /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 24D572644A965DFE839190D36A91A35A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 27D85D2DE824EC39A220D5DF3A1B3700 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 9E3A87603BC1BD80CDECEB3B52D3C592 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 28953E19C2005E9193DC91008D1DE7BB /* Frameworks */ = { + 277FF12C2651061512FB3A26F0AD2308 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 7B845572152301170E2CDF0BE542D870 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5331,33 +5492,43 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2B6239E683B57810A0877D78BE796C47 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4213F90CA64B4BCAD1CFFB1466A6C2B0 /* Foundation.framework in Frameworks */, - 43585D0A88187F24335F2F72137C28A0 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2B63BE43F73E8B74C6CCC14ED87B1CA6 /* Frameworks */ = { + 2C20BFE194DD149BC347E329960B93DA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 2DBE7820B8A8EC06685821AFE0665F89 /* Frameworks */ = { + 2C871119D45F7AA4DA2DF9BF90E0CB7D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1171C66C417E998F0BDC4449B7938B82 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2DA6307D2FA15E8E4881319ADDCC6DE0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 30CBDF3C2C6AD00BB734B3714F0F8794 /* Frameworks */ = { + 2DE5D894FF69B5E9F0E4EFF2354C0653 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 10CE029BDCCADE7B3EEDBA341638EC90 /* Combine.framework in Frameworks */, + A890CF713389EE9AE188A5B8CBD28DA7 /* Foundation.framework in Frameworks */, + D63D5497A20087AF148E0E16581A8572 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2FD6D6D3C27D1F0E3E43C4A839524669 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 4D45AF0998CCF0F5840FC0D3A4E40BC8 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5369,7 +5540,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 3A85F096B63B0C12EE15D40EDFCE39F7 /* Frameworks */ = { + 3C03A0F1C3858E353A966927052F1609 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 66AAA871D0FEB3988852B5D7952ADE68 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 40D2C207639D2CA6A4F3F69BD60D6C88 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -5385,13 +5564,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4B344E39C34BAC4E674B21008D14E588 /* Frameworks */ = { + 482C5B1970165B23261707783962CC96 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D93C80F910C873F803391661A10336F /* Combine.framework in Frameworks */, + 12FA9B81BDD131CCF1C8796918207858 /* Foundation.framework in Frameworks */, + 72F7783C7C45D4D19CE96B5060EB75AB /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4C91894590E9C4C8EFBADF42B0003F66 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A203342FF8908BCE627B0AD03D4C6516 /* Combine.framework in Frameworks */, - 04AC99F44BE90EF4C3AA1C4E650524A2 /* Foundation.framework in Frameworks */, - A0ECDE88D35F5D0348C2A533B07EBFA3 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5403,6 +5589,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 53C0E00DF3D2426FEA276C429C101E9B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5818C83C454E520A2E7D3B3EDBD093EE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5419,6 +5612,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 5A1052A1D08809487D5D3AEF8E2C85A6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C73BBC138DDA380D3E412D48E86E24C9 /* CFNetwork.framework in Frameworks */, + B5BE51A4B56D53A453BF0090448E8CE2 /* Foundation.framework in Frameworks */, + 4203437AC6CEDF0C0455C95FCA7CEC31 /* Security.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5A771016DD37C120FBAB27FB6D003C31 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5429,6 +5632,32 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 5AA94748A595AC7488968B9CBB02CD39 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8256A78362EA6D8BCD88DBF2722A1EA0 /* Combine.framework in Frameworks */, + C801C2CF68F147169189E69F641D7F76 /* Foundation.framework in Frameworks */, + 93C3B1F0BE88C1985707ECEAE55E15A3 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5AD337ADA1AEF4CA3BF4F85311013FD8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C87EEEAF062456D346356447B16867FF /* Foundation.framework in Frameworks */, + AD39CF4A2A15D137EE8908099B9FB9E6 /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5B6537CFC952FC20C4EEDE8D0C5409FC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 5B8C51C6BFA979E81A28179CCC2C0936 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5438,21 +5667,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5E44D54AD5CEEC2711966638831C7F79 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7E64667C414AB0AA1AB5A09DA40A443A /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5FC385F019F30F8056E28B6D1E8B86B9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 699D447FBD731295C49F2CFE5CEA1E77 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5464,57 +5678,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6AC1271961B00B1E2C927BD726508CF5 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6C6E81B9C8466DCF26580F0595755D0B /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7019CB1612D089CFE4E3335DDD7699EA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 71AA829AB846AF235426263C08793A12 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 675B77428EFD5FED7CE72863A1FE8962 /* Foundation.framework in Frameworks */, - B50CAB2E13D6CA8AA00F024343B9129D /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 72DC59A6CF54BE63D611BEA35D572B2A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7936B8B37C6C2E82AEC25493A2EAB735 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7E3F89ED6BDF72DF1BBFF1EBFA833D09 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 81093B8E8148F160F3801A65A3BE7BC6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5560,31 +5723,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 8E714EDDA0F6731D47EF41DFD8F372CD /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9044335B6F58888C40BF8DAB731BD484 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 76A8EFC057455679D223E762AECCCF3D /* Combine.framework in Frameworks */, - EA4EB4A44D9B8DC03032A43AB3CF7EFC /* Foundation.framework in Frameworks */, - 1B6904F021949ED4F17DE3BFFE7C55E2 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9070E29A77AEF224DAD68D5CE02D9E9D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9825A28BFE907B062A94929F53216E87 /* Frameworks */ = { + 967D01C15ADC84B0D6F6465C3150ACF1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -5599,6 +5738,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9F142B267B422862220164D4351D1977 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A10D2F79E7AE84861E35970014FF750E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; AAF3397F858476B2322944A6873F8D53 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5607,36 +5760,49 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - ADDFCDC2EA09AB785B0D83C34C20DE39 /* Frameworks */ = { + AFC8FAED3CBB80D1E3253859DF9AF754 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - DD169E134718B3EBAB25987CE95481AE /* Foundation.framework in Frameworks */, - FA923FB0492E22E87E728F69AA94188F /* ImageIO.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - AFD31CE975B174D16F411C4BAF7804F7 /* Frameworks */ = { + B23C743B74BC309410049E6A67B6727B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 913A7FD6C80BA64EA81C7CA2B420D588 /* Foundation.framework in Frameworks */, - 128276DC4BA59E2853877B13A2F4AEC1 /* UIKit.framework in Frameworks */, + C98EE67EF74B92C9AC9E23B9A1E74E74 /* Foundation.framework in Frameworks */, + FE410F461D895A1284A9BBB6A13A65AF /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BD2E7A934A2FF328A64E6344985665A6 /* Frameworks */ = { + B55C9F1352AC4E1A79DEF57943336A49 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 88105040BB0E3998C89E898BF3362A36 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C2C83C8CA83F939FDC972D46AD672DFA /* Frameworks */ = { + BDAA83BE9DECB0452B6AB5A57C3A2237 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + A34060A696287851E155DBF22FA07A8C /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEB9B0D56F4008740021BAADA40238A3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B177B54D22587EACF66B2AC074C5D053 /* Accelerate.framework in Frameworks */, + 76C49441ACBD4BB270E50BCFA217F7BF /* AssetsLibrary.framework in Frameworks */, + C8BE034A357A252B055FA0C4A9E4C978 /* CoreFoundation.framework in Frameworks */, + 6982C676E5EA5D0EFDF7E13FE8747A9C /* Foundation.framework in Frameworks */, + 8DD1C035F8672F10066660417B5BAF12 /* ImageIO.framework in Frameworks */, + 50669B24372B93D32B3A617D0058F215 /* MobileCoreServices.framework in Frameworks */, + 78BD0F8D256532CA562E15911B11F746 /* QuartzCore.framework in Frameworks */, + 52D60BAAE980A153100A4881975E8CF6 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5648,28 +5814,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CA9CE68CE719691AA3A4ADACC21F0AF9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D04E0124F8432BD77BD51B9C2D21EF3E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C4005FC583ECAC0694F5042A24F8B663 /* Accelerate.framework in Frameworks */, - CA5FA2BC7F938675BEE80B531422ACDA /* AssetsLibrary.framework in Frameworks */, - 146D792687FCC9B4459731BFB80EF030 /* CoreFoundation.framework in Frameworks */, - 5E8A0E4593834354FFFDBC129F5F6081 /* Foundation.framework in Frameworks */, - 12EACF1F31743BA54D16E93D18AA3922 /* ImageIO.framework in Frameworks */, - C50703A0335F75D79E28A40A1A533D8B /* MobileCoreServices.framework in Frameworks */, - CA1FC14C840300F053C820C135E43161 /* QuartzCore.framework in Frameworks */, - 82A5D07DC330993BB604113DC0635FE3 /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; D07B79E83A18E3018EFA8CE654EF97CB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5695,13 +5839,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DC5E36FEFA1FBB27AEBDCF22AA3C06EB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; DE564298200439AEF79C87DD67D812F0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -5718,14 +5855,35 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E3B5144A411ABAD0C7783D05BEEE9BFC /* Frameworks */ = { + E33664E8D18621F813D4AEBF9D1CA702 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - E6292162CEFD75B0B4A16072BC9C5ED4 /* Frameworks */ = { + E386FCD9D8F479EEDED94B4214191574 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E3AF7819D3384DD52FC3A8D2752EFAE8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EA57FD53CD6CF350CFD35FC143E54D17 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB3A6F364D9092D07EE373210EB67CEA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -5742,7 +5900,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F57A48E3CEA6A2A74CD89B2D260FAD89 /* Frameworks */ = { + EDF83DFA2B9A14CD4ED7411626774CF6 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -5757,7 +5915,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FA994E5F3F5CBAFCD1C9D3AB03A4C48D /* Frameworks */ = { + FCF72B5CA4B711A9EF957FF9913B2161 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -5767,1121 +5925,813 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 010A71F4BB02A46FC706439881A18810 /* SwiftyUserDefaults */ = { + 01003CED91A500DC951FDE1309E8688F /* Resources */ = { isa = PBXGroup; children = ( - A66DF04928172288AAF39431F1258403 /* BuiltIns.swift */, - 3959E727B7E6D436C58E8154A7EBB3E0 /* Defaults.swift */, - 0E521769293502BCC89258E2797104EC /* Defaults+Observing.swift */, - D835F5767328148D3747835C4E0D09CD /* Defaults+StringToBool.swift */, - 3FEC6077DC3237CA46D42ABFDC14A37E /* Defaults+Subscripts.swift */, - CBAAAB6F1E8977B72F66A0CD9B335B76 /* DefaultsAdapter.swift */, - 850578387A0EBC9B04FB5459FE3B3212 /* DefaultsBridges.swift */, - 64A97DF1ECAA601838BDE6A51B36E743 /* DefaultsKey.swift */, - 71FD6427BA94D4884EC2B62E60E9E7A3 /* DefaultsKeys.swift */, - 196C119B4B99656411031B27E64A2D95 /* DefaultsObserver.swift */, - 41ABD5255F5B3887A1E6C0B3CD1A9071 /* DefaultsSerializable.swift */, - 3BE0270AFD495A209831013F68A46EAA /* OptionalType.swift */, - B26E10D04B2569140F59199A5C55C891 /* PropertyWrappers.swift */, - DA82333E2C26E6CDAC71C128CC3E9276 /* Support Files */, - ); - name = SwiftyUserDefaults; - path = SwiftyUserDefaults; - sourceTree = ""; - }; - 02143E9AFEAEC702FE2D8A4CE262415A /* Resources */ = { - isa = PBXGroup; - children = ( - 8839B71D73943CF891974FAA99B0A1FC /* PrivacyInfo.xcprivacy */, + 0E1989088B503751B4F0FDA7441A4656 /* PrivacyInfo.xcprivacy */, ); name = Resources; sourceTree = ""; }; - 03FAA533C0E49FB41631ABB12321A6A2 /* Support Files */ = { + 033B8765E42B8234A55FA3C94BF730F6 /* Resources */ = { isa = PBXGroup; children = ( - 0D09C384F5AC385694E5E067051A5F38 /* YBImageBrowser.modulemap */, - 1C537FE6F5932E4CC8555D24BCEFB66D /* YBImageBrowser-dummy.m */, - E24E20ED22C9155BB317012B54D36A84 /* YBImageBrowser-Info.plist */, - C0F9D43170F9BCCB6D568800C5992073 /* YBImageBrowser-prefix.pch */, - 91C413DA11BA0A2F7D5DE3F394B6B61F /* YBImageBrowser-umbrella.h */, - BF62A78FF66483CF7EB197B4BC26ADDF /* YBImageBrowser.debug.xcconfig */, - B56ACCB20DA9D768C32CE92ADE5257AB /* YBImageBrowser.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/YBImageBrowser"; - sourceTree = ""; - }; - 0458EA2C95930A3C12D6D36B3393A7B6 /* webp */ = { - isa = PBXGroup; - children = ( - 645B6195BA2EF0CC400908DC32A609F8 /* alpha_dec.c */, - E76CF312E733637C8775BF05416542E0 /* alpha_enc.c */, - 777510880AE0C0FEC2BF99AC49794494 /* alpha_processing.c */, - F05C90425892DDCDF4B66655B97AA849 /* alpha_processing_mips_dsp_r2.c */, - 20042495A7F0AEBBC01B9CB26314CDD2 /* alpha_processing_neon.c */, - 27F811FC60FE7171767A66AB5F507804 /* alpha_processing_sse2.c */, - 82E339D953808BCD8DE3A8DE42F2039B /* alpha_processing_sse41.c */, - 74D831646F1721D18E9CB61D78B92424 /* alphai_dec.h */, - DA66C9C915DAFC02D59574A19D34C580 /* analysis_enc.c */, - EA7E04CEEC7A79FB05E2DE3DAE634DF4 /* backward_references_cost_enc.c */, - 43409DB5BB90B590069DBF410D50DD04 /* backward_references_enc.c */, - D3FAE393EA0CB065CF13EBD52B25C74E /* backward_references_enc.h */, - 9F09F941B55860CCB56708CB4F1FDA5F /* bit_reader_inl_utils.h */, - 45AD7FAD1E5345477CDADB368908F59E /* bit_reader_utils.c */, - 7943889E640D6E0573612C76BC2D55C7 /* bit_reader_utils.h */, - EBC7D79FCFE59C1D4E2B2EEC9415C53B /* bit_writer_utils.c */, - DDDC822826BE0110F15C916A638B4E1E /* bit_writer_utils.h */, - B84ED04EF6E738BEDF956904DC7E150E /* buffer_dec.c */, - 6FA64DC127F889004374FBFEC2973DD1 /* color_cache_utils.c */, - BB26D67793EF0FF90678F9F98CE61847 /* color_cache_utils.h */, - 5AABA4A903D3B1748D2F7ABD73C518B1 /* common_dec.h */, - 88A1873E1B4111D07E4764F077BE2840 /* common_sse2.h */, - 489954733A3E65665BFD9C14B718677E /* common_sse41.h */, - A9EB2433B6E7A927FB90C619CB9BAF2F /* config_enc.c */, - 8587D011AA0593CFF7A1B84EEE2FB3F1 /* cost.c */, - 02446533D9FB702A89B3DEA51B1A3BFE /* cost_enc.c */, - 41C0F4847E0F170E3F59D0BC7F2811ED /* cost_enc.h */, - CEBFF121DDC08559C71E1B1D903EBD52 /* cost_mips32.c */, - EE764BBD21C61C43683701E3F5FE2FAE /* cost_mips_dsp_r2.c */, - 1C1376FC7BB4470F53E0603A9A7FC1AC /* cost_neon.c */, - 1C65529B177CF37DE07312C17C19A0D6 /* cost_sse2.c */, - 16CB11B23A5ACD2B188960D308AFB6DF /* cpu.c */, - 52826A20DDBD116B62604609F4896887 /* cpu.h */, - EFEF2502BCF487C0B50FAB112E1518D2 /* dec.c */, - 72679461AA0F6BDFD187D5631DB82AEB /* dec_clip_tables.c */, - 99DADE9DE147112FECFE409CD724C123 /* dec_mips32.c */, - A7CAC3DB04F7ADB64B8499A90B77C74B /* dec_mips_dsp_r2.c */, - 39DCD7EF97C0B500D13C50F86E116058 /* dec_msa.c */, - E747366903F9ED5B7CBB1D60E84BB103 /* dec_neon.c */, - 00E1EE863C3A3C3630E7BBB6E807087B /* dec_sse2.c */, - B379B52189FCFD6923CABBB988EE366F /* dec_sse41.c */, - D313154C522FDF13B1B8BB1616A141BA /* decode.h */, - CEB0F03F7DE9B75763FEE50F19F9CFE7 /* dsp.h */, - C02CFAD272BDBFF03F29BA64096B6F3F /* enc.c */, - F3B96086AC8BC0098AE6EDCDE92ED2BD /* enc_mips32.c */, - 7A08D4E2AC3083940E2DD5AB50F42519 /* enc_mips_dsp_r2.c */, - F469E5185C17FD6B096DA1F3B7C3DC90 /* enc_msa.c */, - BDE3C415D49D9DBEE2D6B0B692F711A8 /* enc_neon.c */, - 8CBC7A052D892803E76D2FFEAC1C3E83 /* enc_sse2.c */, - AE3A29EAE2AD084E9A58744CA01CC32E /* enc_sse41.c */, - E6E25AB29490F32DE655534A02FF32EA /* encode.h */, - 7410C1DF2145BEBE0C7CD5DAAE9F1ADB /* endian_inl_utils.h */, - C18AEDBF31CB2572AB07F8722E0870F3 /* filter_enc.c */, - 9F376FE855AF22F30019CB36BAA7A1E8 /* filters.c */, - 7E33D64E680019C177618308CB75EF6A /* filters_mips_dsp_r2.c */, - 06C9041561AE6E617D216D91DE531015 /* filters_msa.c */, - B2CFD3CFB14AFD520EDB9E11593AF849 /* filters_neon.c */, - 45A6C83A799C0C051A71B753EBF2E0C4 /* filters_sse2.c */, - B68EA6BB85F8C760488A50BDCC241910 /* filters_utils.c */, - 0C32AEB37F418F32DD29DCF4F8431825 /* filters_utils.h */, - 0DE933906B9742E508D8D788A1D9460B /* format_constants.h */, - CC24CDDC3C41D4E90FB7A47FD047D37A /* frame_dec.c */, - AC2AD7BD30CB7339F736B669B8A956DF /* frame_enc.c */, - BE68E3C8423A0C2B3B2F147C351569BD /* histogram_enc.c */, - F91BB611743387130526B221F2AD7EC3 /* histogram_enc.h */, - 6C64131280A69B51A01F471E184A6303 /* huffman_encode_utils.c */, - 50B830DCD4FD06C452454EBFFF301A61 /* huffman_encode_utils.h */, - F4D184BC6A2082CDEBDF50A9810B022A /* huffman_utils.c */, - EA50E8FECBEF17BCC8D53B8CD0D61CA1 /* huffman_utils.h */, - 8D2F58F6D75CD6EAC8B4645270447959 /* idec_dec.c */, - 1C8B492C658E83648F36B13B1502DD29 /* io_dec.c */, - 0E9018049D3891D6B8326E4C1A96B726 /* iterator_enc.c */, - 924741FD99920A8D329E493A5868847A /* lossless.c */, - BB3FD8C20C18627E7DFACF967A196E8D /* lossless.h */, - 65CC9309308C3EFA965298882EABE106 /* lossless_common.h */, - AB53487CE53F8FB4D70D0221212EC78E /* lossless_enc.c */, - B4EE7A0CB2B38A64ACC0428F57AEC7E8 /* lossless_enc_mips32.c */, - C13189BB9C5B978BC239E0FC3A946821 /* lossless_enc_mips_dsp_r2.c */, - FA38134483F784E7A4AA180ABE16C06E /* lossless_enc_msa.c */, - 8E22F8ED0B0260D140F7BE3E0E75344A /* lossless_enc_neon.c */, - D6710808298E8357BEF9DEDA21E199CF /* lossless_enc_sse2.c */, - 774303A6EF1A2EAA26EEB43E1E3F8342 /* lossless_enc_sse41.c */, - A1A4FD150E8969054E33120D391A51C8 /* lossless_mips_dsp_r2.c */, - 109ACDAA5C60690C3C29F4D995BFF459 /* lossless_msa.c */, - 2721B15D69AAC9EDC592D8D91DE15A30 /* lossless_neon.c */, - DD3998C13E9D092608AC6F455C49F819 /* lossless_sse2.c */, - 2F1EE42D6061CE2501B5E1A22B55D08D /* lossless_sse41.c */, - BA0C32A8612AFBDAB31E407FBDC7FC06 /* mips_macro.h */, - E867074B27E8FABABEB3A062C89F10C7 /* msa_macro.h */, - 45A82B7D82427BF1446499386E18E4FB /* mux_types.h */, - AB13A26BC6750B3E62BC905FFE398E3C /* near_lossless_enc.c */, - 60468C1CDF1862AB603DFA2962774120 /* neon.h */, - B977BF3D227A0AC28B05CD102057BCC1 /* palette.c */, - 04296A362C3407E0A85FD5DB9C3E1EDF /* palette.h */, - D00CD7B0453036235F53A50214D4ED2D /* picture_csp_enc.c */, - 991D1386E3E848056EA3B4E051FE493E /* picture_enc.c */, - 081D3FFF22883789F72BD87362697E6E /* picture_psnr_enc.c */, - 8F2242BE854DD9C19EF4B71CA79AE6F2 /* picture_rescale_enc.c */, - 8CA871A837C87D6CD87F1EF2EC8ED612 /* picture_tools_enc.c */, - FE4FB396B3AD5E4CCCF7D904075E382A /* predictor_enc.c */, - 9F63ADBEB6601A1586154D53C923B5D4 /* quant.h */, - A23F8B3C6F7CCF478BCF4BAE56BD4DF9 /* quant_dec.c */, - BC30D019482F4221FF633E550DAC417D /* quant_enc.c */, - 35940441E1F35674BCA1B41D098A3ED3 /* quant_levels_dec_utils.c */, - 2DD95C19D05E5141AD09F08757FE2699 /* quant_levels_dec_utils.h */, - 7B77DEB6A390666DF68E81ADE12F1BED /* quant_levels_utils.c */, - 087EB3E92C3CE9AEF4989DC32217260E /* quant_levels_utils.h */, - B4181173D600C81E639DF5A03E52AEA2 /* random_utils.c */, - A5BFBD150FA1FFD5F8206A024E6D8015 /* random_utils.h */, - 8C0A1312B50C17A4C611BA04975FA59D /* rescaler.c */, - A9EAC8FC1287A9C24DA5BC7D31F39F91 /* rescaler_mips32.c */, - E003852F0C2ED5D3367CC3BCB111DE40 /* rescaler_mips_dsp_r2.c */, - D712C754D0B3BEFA8D9854077BC94893 /* rescaler_msa.c */, - BBBC010B85BCBA9FA6908DE4D9348839 /* rescaler_neon.c */, - AF7AAD023CD959C7D04EDAEF495E42D4 /* rescaler_sse2.c */, - 63D7A5446C347A4B7702583B88BBD745 /* rescaler_utils.c */, - 7D2B336DD1382EE765ACAE769343CFE2 /* rescaler_utils.h */, - 2FB634BBC441E1A91C3B4D8D27BFF7BD /* ssim.c */, - 1B63629946BAA0F141F5000D45DF5B53 /* ssim_sse2.c */, - 3C47797CF83C8275EB25B782A05E26C0 /* syntax_enc.c */, - 56C83FF28405BC4C60D1E897F48C954F /* thread_utils.c */, - 9A226DD5B5DE35D44F9321FEA69D7502 /* thread_utils.h */, - D872B09828CDE9FED532089388FD1706 /* token_enc.c */, - FF07CBD86423A03E1F891EF47BBD0D56 /* tree_dec.c */, - 583EBFC93BECC151571D0013BD13AE47 /* tree_enc.c */, - 7D5D3CD64711395EDE1E0558AA48CB7F /* types.h */, - 2696085F8CF53F46F0711050C0A10E07 /* upsampling.c */, - E64CECF2B277E1740E8F08CA7B8F77A5 /* upsampling_mips_dsp_r2.c */, - 1F7005538E0ADBFEE28935345444E9BE /* upsampling_msa.c */, - 1AD3C64E24C009607CBD92AC885EF423 /* upsampling_neon.c */, - 9D0884D8E461C506BA1299415A08D8E6 /* upsampling_sse2.c */, - E79CAC9375ACAB81CC6DF05A6F6DC26F /* upsampling_sse41.c */, - 21951539AF1191589E265213E6B8D31C /* utils.c */, - CDB3370B2D9A7B4B4FEE5BBFAC62D485 /* utils.h */, - 4DC53E0ABF02CD9BBAB8D62559EA0E36 /* vp8_dec.c */, - 247A39E873C37C701BDF648B2D50C5EC /* vp8_dec.h */, - 6F733D4160D39073D45BC056455B855F /* vp8i_dec.h */, - 7ACD8B678F457F12617E8F02C445A9F0 /* vp8i_enc.h */, - B0785BC93A1F0C4CDC04A31E0BCA48C6 /* vp8l_dec.c */, - 4123C8FEAA4B2A821DFD684756000B82 /* vp8l_enc.c */, - 6BE2132552A633B5B0604562F34FC8D0 /* vp8li_dec.h */, - F43E549B88EA208A82D3DB6250CB8993 /* vp8li_enc.h */, - 0D22A34E6D8A78B03A3878CC8F4A141A /* webp_dec.c */, - 466A603F12FA5BB31841F6365BACD39E /* webp_enc.c */, - 5F817082B9C5EE4458A59A5A7804DEFC /* webpi_dec.h */, - A95AA6726D0817E43DE36A9CDFFAF8DB /* yuv.c */, - 04BB4A806B019AC1CFA3C776444FE07E /* yuv.h */, - 82DC469C28323FCEAC87DA19052CFFE9 /* yuv_mips32.c */, - 55A2692DAD3BED620DA0EB83FC8A09FE /* yuv_mips_dsp_r2.c */, - E1747F2179C0D6D74389870E47EF63C0 /* yuv_neon.c */, - 7E75BE039ECDC5C98B1B3366AB223FFE /* yuv_sse2.c */, - DEE0EF0F26FC8E76181FFE777C562CBA /* yuv_sse41.c */, - ); - name = webp; - sourceTree = ""; - }; - 04B06F8FFFF140427FD2BA930A50ADDA /* Support Files */ = { - isa = PBXGroup; - children = ( - DE120EE326141F76E75CCE2132DEA784 /* ObjectMapper.modulemap */, - 49CE288F45AE14A8ACBCB47C4E6EF706 /* ObjectMapper-dummy.m */, - 87E096F7DF0D7E8ACA28A30A1DEBB9EC /* ObjectMapper-Info.plist */, - 9E4F572F034A1B90543745C038E95B6A /* ObjectMapper-prefix.pch */, - 8F420C010C7336A4B964E0E4223E96D7 /* ObjectMapper-umbrella.h */, - 0F5B82BDBCAA41F24AD4A6F7D6617A30 /* ObjectMapper.debug.xcconfig */, - BFA6FD03C778C0B691600FE0A831EB76 /* ObjectMapper.release.xcconfig */, - C09B6CDED61FA0453ED2ADB6EA524148 /* ResourceBundle-Privacy-ObjectMapper-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/ObjectMapper"; - sourceTree = ""; - }; - 04E77BF5D241431A7669B65C63C292B8 /* Swift */ = { - isa = PBXGroup; - children = ( - 0DBD93D288BF1971680AC0CBFA87CEC7 /* CocoaLumberjack.swift */, - F26E5F82D1BEC8D2C97277B2D67D396E /* ConfigurationGlobals.swift */, - 27759D268EA3293ACE7824423B8230A2 /* CurrentFileNameHelper.swift */, - 57F981F58E1DB9D729CF4481BFD2287F /* DDAssert.swift */, - ACFDC59C4D51BAC7D448516B4133A38B /* DDLog+Combine.swift */, - F8D6A5FE25A3244C84E4059F96B41735 /* DDLogFlag+DDLogLevel.swift */, - 38F94877CEF3C20AB5A2BC7EECB7F447 /* DDLogMessageFormat.swift */, - B053BB799704A9F6F6384BBAF294DA09 /* SwiftLogLevel.h */, - ); - name = Swift; - sourceTree = ""; - }; - 051971D7584710BD37FD4D9C3A5D4B2A /* Resources */ = { - isa = PBXGroup; - children = ( - 3C0C914066C13DD1C227163AE269AE08 /* PrivacyInfo.xcprivacy */, + 34D94319150FBBDA5DBC6B33CE2A3F42 /* PrivacyInfo.xcprivacy */, ); name = Resources; sourceTree = ""; }; - 0519FD4567FEF5F75311774168A5E6D3 /* OpenIMSDK */ = { + 0374D4B5D7630697BFFAF476F53A93E2 /* Support Files */ = { isa = PBXGroup; children = ( - 92848CB8CEF981C9B3BC395EEC10733C /* OpenIMSDK.h */, - FA73FB89FFC6C041D2C971504BC4F6B0 /* Callbacker */, - 5A8F097FB03106C24F8891D77A6761F6 /* CallbackProxy */, - 32F0F48DED71A27F831DE40F4142C263 /* Interface */, - 13234F058AC42FE4586F0BC017BCB32C /* Model */, - 4E52EC198AFBBF2895A04ABEF28131C8 /* Support Files */, - 48D9D43C4F7A7EF73D3AC8DA613BAA8E /* Utils */, - ); - name = OpenIMSDK; - path = OpenIMSDK; - sourceTree = ""; - }; - 060C0D7D58AF11D88F155E40DD4165B6 /* Resources */ = { - isa = PBXGroup; - children = ( - FB1A866C2F8021DBDD12F2DE5D772DF4 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 06E4BE89938F40F906CC60D72240FD70 /* Appearance */ = { - isa = PBXGroup; - children = ( - B48EB763FE80E2BD8D9862A3C005F9FC /* IQKeyboardAppearanceConfiguration.swift */, - 6DC4BD17942F389D44EB543440F08338 /* IQKeyboardAppearanceManager.swift */, - A23D984530015E18E2F4B38BB459C1FD /* IQKeyboardAppearanceManager+Internal.swift */, - D5A54FE569BE26DE8F8FABCE0B34BC75 /* IQKeyboardManager+Appearance.swift */, - CFE98B38843AE0C4E89B36CF77B5387B /* IQKeyboardManager+Appearance_Deprecated.swift */, - ); - name = Appearance; - sourceTree = ""; - }; - 08E09B5ABD3FCE71D53961FFCF94B214 /* IQKeyboardNotification */ = { - isa = PBXGroup; - children = ( - 5AD9B8FCF4FD89F4D5143063C5E7A0D0 /* IQKeyboardInfo.swift */, - 9A610F8E5A523D74EB02337C66D2442C /* IQKeyboardNotification.swift */, - F7C7D0A1E1783A005ECB525ED5C4FBD2 /* Resources */, - 83B29528EBBC1B3DADDA36F2BF191859 /* Support Files */, - ); - name = IQKeyboardNotification; - path = IQKeyboardNotification; - sourceTree = ""; - }; - 08E83B3B3F52373C170DB026024CE462 /* Support Files */ = { - isa = PBXGroup; - children = ( - 744818E8CAF84E619740349AA8310B49 /* Differentiator.modulemap */, - 7E6C39A78E34CAF91FE894770A29339E /* Differentiator-dummy.m */, - 04B7C5A25940963070651E91AD48A5B7 /* Differentiator-Info.plist */, - CC3D8146FC10F0640612BFBDF8B23019 /* Differentiator-prefix.pch */, - B5A37D6C6DD50F2C36D62037BC7142EC /* Differentiator-umbrella.h */, - 74CF6920D0B4CFAC98C5DBF9737EA29D /* Differentiator.debug.xcconfig */, - 3D0DB1CEB05AC969288DEAFEB20F65F0 /* Differentiator.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Differentiator"; - sourceTree = ""; - }; - 09B81D7CE8836E15B560B259E1F4AEB3 /* Differentiator */ = { - isa = PBXGroup; - children = ( - 9B47B0F33ADB52865D45F738C9337602 /* AnimatableSectionModel.swift */, - B13474C01D1C0B90896134215E5A5CEF /* AnimatableSectionModelType.swift */, - 7CE41C5B80EA05791BE83C7126E9D35C /* AnimatableSectionModelType+ItemPath.swift */, - 825A9E0CAE8058BD30562436EABB04A3 /* Changeset.swift */, - 61F309BD5CF7919F2B29498052D9B98C /* Diff.swift */, - 989D623AF0CB634DB11052E3FC4DC617 /* IdentifiableType.swift */, - E1729A5C0BDDB7D06AEBD8894DA5153F /* IdentifiableValue.swift */, - 8BDA68A4AB4B1C7ACD7A370540F816C1 /* ItemPath.swift */, - 345CFF4C2DE56AFB5B6B340E3433F8F5 /* Optional+Extensions.swift */, - 4218E7AB0F97FEEDD00E4E037614FB34 /* SectionModel.swift */, - 5C08C88751394A41AA41DF435BE9B690 /* SectionModelType.swift */, - C42E84DD790B283F0D5185499E7E6716 /* Utilities.swift */, - 08E83B3B3F52373C170DB026024CE462 /* Support Files */, - ); - name = Differentiator; - path = Differentiator; - sourceTree = ""; - }; - 0B9B2957C01E56FACDD895263C81308B /* Support Files */ = { - isa = PBXGroup; - children = ( - EEB276E3BB1A9C5CE3C8AA9EF7517032 /* IQKeyboardToolbarManager.modulemap */, - B00B2714CE63029E316A682E308DACC9 /* IQKeyboardToolbarManager-dummy.m */, - 8C686BCF3D7F28862D9F8F441539A7BA /* IQKeyboardToolbarManager-Info.plist */, - 854DC1FA592D76A8399A8D23776140FD /* IQKeyboardToolbarManager-prefix.pch */, - D825F64A76320E65FD8969C6C63148B1 /* IQKeyboardToolbarManager-umbrella.h */, - B02664CA4AF3A20B2AD925D0A1FED67D /* IQKeyboardToolbarManager.debug.xcconfig */, - C96FCAF290E620B33506E5F6F3F26719 /* IQKeyboardToolbarManager.release.xcconfig */, - E5EE5A8E12E72187726895C340E99A1D /* ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist */, + 70CF7B526B329D2F7D16A737DF3E72CA /* IQKeyboardToolbarManager.modulemap */, + A0E60F83DE43BBBF924BEF72B94D7D88 /* IQKeyboardToolbarManager-dummy.m */, + 584FC894D422101627A0823336B995E1 /* IQKeyboardToolbarManager-Info.plist */, + C7E8128FA3C4DC6DC87343890BB0751E /* IQKeyboardToolbarManager-prefix.pch */, + 1D8B96BC951501B73B984B3E5E73D45D /* IQKeyboardToolbarManager-umbrella.h */, + D862C584B59F742B093BA15B55C64CC9 /* IQKeyboardToolbarManager.debug.xcconfig */, + 284AC5B340F1DF3743C872CE02EE8A20 /* IQKeyboardToolbarManager.release.xcconfig */, + 63AF11E68FBA31DEE361A30452C2B610 /* ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist */, ); name = "Support Files"; path = "../Target Support Files/IQKeyboardToolbarManager"; sourceTree = ""; }; - 0C0F35F6B3D37E54F23853FDD1CA32B0 /* Resources */ = { + 06FF378D27EB5DD240AA74B759E4AB73 /* Popover */ = { isa = PBXGroup; children = ( - 705E66B46D3FB6C3860039695FEE7E45 /* PrivacyInfo.xcprivacy */, + DFA03B4AC805A46101403448BA891DEF /* Popover.swift */, + B954CC88C5CA7A509267924263C45070 /* Support Files */, + ); + name = Popover; + path = Popover; + sourceTree = ""; + }; + 073B86CEF0DACD846819D02D4531E844 /* Kingfisher */ = { + isa = PBXGroup; + children = ( + 6563437DD714E4651A54D5D9827E41BB /* AnimatedImageView.swift */, + FCE67E867E7D87D4BB2761D5775A1CB2 /* AuthenticationChallengeResponsable.swift */, + 5262A8466C222B81F01152B34DA64A09 /* AVAssetImageDataProvider.swift */, + 185DAF49A8E1175A987F04CE022957BE /* Box.swift */, + 310A752EAADFC795CC0A69824946DC22 /* CacheSerializer.swift */, + 3C45BD99F26D6E924687C0DEF6BD9871 /* CallbackQueue.swift */, + 0EE8AEF48758E3AF539B73FD6DD3891E /* CPListItem+Kingfisher.swift */, + 953DA43EB13E30AF8D9D972941D5826F /* Delegate.swift */, + 477AB1A71336EC844111AF30835E2B70 /* DiskStorage.swift */, + D8E1A6C1868911E09185610292922398 /* DisplayLink.swift */, + 2FFC90957F5D67E24F21D774D7AA39C2 /* Documentation.docc */, + CDB5DC8D1CA553235FAB3A2185D3646E /* ExtensionHelpers.swift */, + 50B69BB9C494FCADD9F52F68B4745C13 /* Filter.swift */, + 4D21C7C434B3F4BDFF04AA060D589C0E /* FormatIndicatedCacheSerializer.swift */, + 0E3E10F0E4E1EEB483B960CB8AB44788 /* GIFAnimatedImage.swift */, + 3959D145FD2E8F762316E0F5B249252D /* GraphicsContext.swift */, + 99A5D487DE1C7561340E93F71231A048 /* HasImageComponent+Kingfisher.swift */, + 82C0724C0421CBE94F5889AF088B58AD /* Image.swift */, + 6198D280669473ACBA6A084A650DF4D8 /* ImageBinder.swift */, + 75E672D2E3F85192FCB6AA5DB98E8607 /* ImageCache.swift */, + 58257C6D930B04CA0CE4B0BC5E9FBA44 /* ImageContext.swift */, + D5B5E409A3CB6709D1C0EC5240773D49 /* ImageDataProcessor.swift */, + 914D1DC48410EEA11DC4146D823176F8 /* ImageDataProvider.swift */, + F9D77B762A0231CE5705251F42F55AC3 /* ImageDownloader.swift */, + F6870CA7016A7BB8E2033FD030B292EC /* ImageDownloader+LivePhoto.swift */, + DE508651E5E549F78249BDCAD16BFD32 /* ImageDownloaderDelegate.swift */, + 818F80EEBE82BB7416E478C26E7995D2 /* ImageDrawing.swift */, + A84F997BE9F6903E8E03618EBBA3FB65 /* ImageFormat.swift */, + 74CA6CFA6A9272E68BB7A7285B05F588 /* ImageModifier.swift */, + E5377BAA90C9F75A3EAA5CF2746999E7 /* ImagePrefetcher.swift */, + 4076244D29A019001FE69F99345FC805 /* ImageProcessor.swift */, + A2CD2E3BBF844A6612B4784DF5C04CFA /* ImageProgressive.swift */, + 56C4621AA9773E450944A7A00C7F17A1 /* ImageTransition.swift */, + 8E228DE53A7843A9B62E323CFFB04240 /* ImageView+Kingfisher.swift */, + 7C427136B27DC559447F9182284C8042 /* Indicator.swift */, + C8277B036CADFDB18A9032F3676C20D1 /* KF.swift */, + D5E0BA4C08C42E4F935DB00E62F37EA2 /* KFAnimatedImage.swift */, + 80B2C73E9BDABA3F11BF3DB85DAD250A /* KFImage.swift */, + 98AD5468026B6327AC1AC789C55E2B66 /* KFImageOptions.swift */, + 97404EDD54B128EB9F21CCA4CC58A92B /* KFImageProtocol.swift */, + BCC5AC3823AF1F18738C22FBEA8154BF /* KFImageRenderer.swift */, + 64C07CCD1BCB6C218B9CBFD402FD0BF6 /* KFOptionsSetter.swift */, + 9ED7FC1A30A3ECB192352380A7A874A3 /* Kingfisher.swift */, + 8461B294FCAEA798CE2751EEA8891991 /* KingfisherError.swift */, + 83E92D4FF772347A353FB627EFF684DD /* KingfisherManager.swift */, + 503405F11788ADB88FD0ED81209159EE /* KingfisherManager+LivePhoto.swift */, + 1059A598BA4F9CA60155BA8373D9F178 /* KingfisherOptionsInfo.swift */, + 6C1764349B4C733F6B7A6B68D67BC042 /* LivePhotoSource.swift */, + 10E286D9023E96E911902F5ADE064F52 /* MemoryStorage.swift */, + A96139C1CDAA829E1C5C99CC966F3CB0 /* NSButton+Kingfisher.swift */, + 4E2E8E4E7D7E410B6C94E5C4C0C3DC04 /* NSTextAttachment+Kingfisher.swift */, + 5E6697D38397D54AD0F4753556ED8EEF /* PHLivePhotoView+Kingfisher.swift */, + FF2C24B67E5E17219B18B1D700847444 /* PHPickerResultImageDataProvider.swift */, + D76CFBF1AF771B8A842900B6363C910F /* Placeholder.swift */, + D5DB288CA1735838DAB9C361892E54EA /* RedirectHandler.swift */, + D9DE6D779E74364FC3F954FDE24695C3 /* RequestModifier.swift */, + B4A6881CF86D0AD130F065B392BA79E6 /* Resource.swift */, + E69CF3409B5E7DD09C934B8760D26B18 /* Result.swift */, + C0F45767D09215F572F8D80F01EB8628 /* RetryStrategy.swift */, + B39A92039C1C6E5A539881A3C30A3EFB /* Runtime.swift */, + 227239C8727C62367AF6079F3FDB9577 /* SessionDataTask.swift */, + 725BEA8CF189D4B0B923DC15BD501A1C /* SessionDelegate.swift */, + 9108431DE0EE65E182C641811F6F644A /* SizeExtensions.swift */, + 2AD1A0DA62E38A2270776CBC8949C349 /* Source.swift */, + 6FC8E717DED2B35BD1F66E0A8B62D552 /* Storage.swift */, + A0BC8E970B9984DFA602426BCBC66226 /* String+SHA256.swift */, + 8E7634E51DE590157C8F535EA1D247B4 /* UIButton+Kingfisher.swift */, + 5BA1141B7B50BD6B6A92B96743BC3AF7 /* Resources */, + B960B988B8C0E50177465B9A80766883 /* Support Files */, + ); + name = Kingfisher; + path = Kingfisher; + sourceTree = ""; + }; + 07E7846FD9B79697A2F954F23D754BD5 /* SwiftyUserDefaults */ = { + isa = PBXGroup; + children = ( + 1ACCAE49580830784049EDF24569F21B /* BuiltIns.swift */, + 12936157E06A9BD2BBAC1822B010AE60 /* Defaults.swift */, + CFABBFE3E23539AC8A25CB8DF205E4E2 /* Defaults+Observing.swift */, + 504C9200A2BCDBCE5D1038BE5C36DC92 /* Defaults+StringToBool.swift */, + E16098AC15C72D87F44C638C00C7C494 /* Defaults+Subscripts.swift */, + ED9291ABC29121BC7F4C0411D3DFCBDF /* DefaultsAdapter.swift */, + EDFC757F93436D274F31BEDE5022C7AD /* DefaultsBridges.swift */, + 9DAD00461B83C200FA915645CDB0E2C6 /* DefaultsKey.swift */, + B95B13BB8C7EC7678CC95F016E6DB9D2 /* DefaultsKeys.swift */, + D6671E4DAF2E9CAB55C735355A9FEACF /* DefaultsObserver.swift */, + 1C7BAAB90591C5F80AC0B54E492DC5FE /* DefaultsSerializable.swift */, + 1900F12C0F59A2EE38FF64396E3A02DF /* OptionalType.swift */, + 836002A544C87F9B72FD7E93C2F30BB1 /* PropertyWrappers.swift */, + ABEA16F59809309D79522523BDCC8988 /* Support Files */, + ); + name = SwiftyUserDefaults; + path = SwiftyUserDefaults; + sourceTree = ""; + }; + 086EDB8299EBF599D255CC597927C881 /* IQKeyboardNotification */ = { + isa = PBXGroup; + children = ( + 4BB38AD055FDA8B028F1CFCB6AC51C95 /* IQKeyboardInfo.swift */, + 0ACE6098C6600F130B1FBE95DA09FCB5 /* IQKeyboardNotification.swift */, + FC8142659FBF40BE9B6BF0EA9829EF8A /* Resources */, + 14CBF5E833AC8FA8395F48625F0CF0CE /* Support Files */, + ); + name = IQKeyboardNotification; + path = IQKeyboardNotification; + sourceTree = ""; + }; + 0B974A581577490CD7D5FF221AC92B6B /* libwebp */ = { + isa = PBXGroup; + children = ( + 2AF6B1633CB179859BFB0690965321B9 /* demux */, + 615DE90D9A6B679C368696030DBDE803 /* mux */, + 68E97B5CC8B872CEC377656733AA9CE6 /* sharpyuv */, + 6B8C3BD30F79877E090464B0E3CF84ED /* Support Files */, + DFC6A93A11DD820E89FE7DB4B3E90B6D /* webp */, + ); + name = libwebp; + path = libwebp; + sourceTree = ""; + }; + 0C4138CB12761CFFE96C2922C4516791 /* Support Files */ = { + isa = PBXGroup; + children = ( + B2872DE8B11CC0C62C7F1B425BCBB585 /* AMapFoundation.debug.xcconfig */, + 49B586C2492DB8E3B98452DAA26E3559 /* AMapFoundation.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/AMapFoundation"; + sourceTree = ""; + }; + 0CBF922902065FFC071B662004D5E28E /* Resources */ = { + isa = PBXGroup; + children = ( + 59A8A113B244267F39733411FDBFD59D /* HXPHPicker.bundle */, ); name = Resources; sourceTree = ""; }; - 0CCE8BF40D7BE148BB02E87A8F5C70D2 /* Resources */ = { + 0E2471BB06D552AB52355B46FDC74EC8 /* Support Files */ = { isa = PBXGroup; children = ( - BF160B94684907A47F9B8E3E019F60FF /* PrivacyInfo.xcprivacy */, + CD3136D404630159D6B3A92001E39C0D /* RxSwiftExt.modulemap */, + 6D85D65A785DD11618ACCAF108CFE339 /* RxSwiftExt-dummy.m */, + 5EB365DD01B0CF9CC6DD2C3FBAD696AB /* RxSwiftExt-Info.plist */, + F01DB60052787E78B38F3A1AF5263644 /* RxSwiftExt-prefix.pch */, + 8DE841174DFB947091CC9730CC27A4D7 /* RxSwiftExt-umbrella.h */, + F5FD142CF1042BDEAD5F794A402A036B /* RxSwiftExt.debug.xcconfig */, + 6C658557DD91AA8F899ABACC31226433 /* RxSwiftExt.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/RxSwiftExt"; + sourceTree = ""; + }; + 0F307B95D8704D258200CAB8E7EE23B3 /* Core */ = { + isa = PBXGroup; + children = ( + 77108217CD9670D65A815C85CAD4BC74 /* NSBezierPath+SDRoundedCorners.h */, + 729C335AC4480787A0D8A171C363F055 /* NSBezierPath+SDRoundedCorners.m */, + 365D92843D9B2C992588045959368206 /* NSButton+WebCache.h */, + DA0D288497955329D2E2EEE0E11E4A4F /* NSButton+WebCache.m */, + A0219DE9E829EB25509BB1E2C6F67F4C /* NSData+ImageContentType.h */, + C0E35192C63708E12595F0EDB4626CC1 /* NSData+ImageContentType.m */, + 6DC8C41B7AB96DC700B00AEB39525F5C /* NSImage+Compatibility.h */, + E9EFABA771877ADF9180E7DC0B95C72D /* NSImage+Compatibility.m */, + 2EF18E46D35DFA8EA15926BDEF825725 /* SDAnimatedImage.h */, + D3D05FEE8ADDAB27B74995F22E6B4A65 /* SDAnimatedImage.m */, + 467D1F0F2F8DC4407D4DE1A116DA6822 /* SDAnimatedImagePlayer.h */, + A01FFB1189079876A3BE427E2D58D934 /* SDAnimatedImagePlayer.m */, + 67B45AD70807BBDF6B47FDAA4390A5C5 /* SDAnimatedImageRep.h */, + A0754BE3F77591C44FFAB586747F773C /* SDAnimatedImageRep.m */, + 02B1232ED02FD0082124D9CDF6969512 /* SDAnimatedImageView.h */, + D151E0C0C8749B59E1D6C1C422EE6C7F /* SDAnimatedImageView.m */, + 8C9E8A9D320DDF6866142EBCF0AB17D3 /* SDAnimatedImageView+WebCache.h */, + 87CF4E5FA9EF74820C9D72AF08A6E3DF /* SDAnimatedImageView+WebCache.m */, + 2393D8EC822992E154A2A546A2FA3CE3 /* SDAssociatedObject.h */, + 09AB62F03517BF3D5AE88B4968C6DF90 /* SDAssociatedObject.m */, + 6C0F1E0571EE5F74112DC26DEE1DB61D /* SDAsyncBlockOperation.h */, + C613E0A1F41A822EED765247AC1F954D /* SDAsyncBlockOperation.m */, + 9E8B5C0110F4223411274CE6A011F364 /* SDCallbackQueue.h */, + 17F4024785CE7E20270CB82E7E759217 /* SDCallbackQueue.m */, + 4EF66DE3B3203486D7F366B2E5AAD62A /* SDDeviceHelper.h */, + 5E0843B42A030B55090DA9565D93667E /* SDDeviceHelper.m */, + 45676A1039F53B7B44E96257EFC0755B /* SDDiskCache.h */, + 3B1A2F0EC904214E6975457AE08127B3 /* SDDiskCache.m */, + A7C8BB5332F80E96E8D6A4B4D6AA10A0 /* SDDisplayLink.h */, + 53A4EFF13E5D8770804115A05B68B1C5 /* SDDisplayLink.m */, + 6DE422219528B0F8C044E9C23AC7E206 /* SDFileAttributeHelper.h */, + 42A180547A0748580216D31947FCF91D /* SDFileAttributeHelper.m */, + 19AB346F664AF3BB68015BA96F15CA47 /* SDGraphicsImageRenderer.h */, + 5BE93567AA85914227E92BDFE9669A63 /* SDGraphicsImageRenderer.m */, + 68D7AF3B74828F8C2BAC6CC02A1E9A83 /* SDImageAPNGCoder.h */, + 0592B4FDA541D739DA37618ECD3F548A /* SDImageAPNGCoder.m */, + 3E734FF2DDA8DAB55B08800FDD08E017 /* SDImageAssetManager.h */, + FFD9EB2C14D6F3DD35809C4C91193549 /* SDImageAssetManager.m */, + 0AD55A47F1AAA88609AC883AD677F608 /* SDImageAWebPCoder.h */, + 37248EC9C1A753806439CCF5D8B1413C /* SDImageAWebPCoder.m */, + F4A0F3112C8A93C1B0BD8FB9E959BDA6 /* SDImageCache.h */, + 3419BDD44F6743C4AC46FA04B2350FAF /* SDImageCache.m */, + 72DF4AA01E687D7B5FA55FD57819D458 /* SDImageCacheConfig.h */, + 103BCD5D91A86629DA7A02BC546D632F /* SDImageCacheConfig.m */, + E2B7730E3EDC09E9C27731F9211A03E2 /* SDImageCacheDefine.h */, + A3BC31B6E58488D20D1E01F30A6E36A5 /* SDImageCacheDefine.m */, + 1BD6854C4461EA80B767FF2182ED6EF2 /* SDImageCachesManager.h */, + 40AD8D7E0434ABAC40ADD7301AF66559 /* SDImageCachesManager.m */, + F995FF505792148D15A05FD9BEEBD27C /* SDImageCachesManagerOperation.h */, + 4A932087ABB9A35400DD7C526A39F7CA /* SDImageCachesManagerOperation.m */, + 1D623539744C92AC2DF81C3ABEF834DA /* SDImageCoder.h */, + 21EB64BE1424FD67CBFD60640E5AC630 /* SDImageCoder.m */, + BE2B71D301E15E6410F723894618F8B2 /* SDImageCoderHelper.h */, + B212767BD106E5330DDC1032B129ABEC /* SDImageCoderHelper.m */, + 3393DA8B4838F6ACE600A7599089C08E /* SDImageCodersManager.h */, + BAC4832233C2EAA5A0A324B4FECE605C /* SDImageCodersManager.m */, + A49A6F4E09E1DE49F95B7C7B5F769716 /* SDImageFrame.h */, + 30BD85190BA6619C60F905C8C99773A9 /* SDImageFrame.m */, + 2A9598965144DCAD57DA3C09E9D9DF65 /* SDImageFramePool.h */, + 35095A89B3C9A2BF1B30A1C61D469BA6 /* SDImageFramePool.m */, + 78C694E50921AD52B782E980CAE66D3D /* SDImageGIFCoder.h */, + 7DDD2C1AD91FF951A9A5F3D2E8D0913F /* SDImageGIFCoder.m */, + FD018790C71DECF6D9B77734AEDDC8E1 /* SDImageGraphics.h */, + D5E5340CF5421A590D1A25C045077BA8 /* SDImageGraphics.m */, + CCDE73E0140C3BC9F72E28078BAB4C4E /* SDImageHEICCoder.h */, + 442AB6262AFA4173559DD94C6274239F /* SDImageHEICCoder.m */, + 5F121A1AF57280A390FE624572D35BAA /* SDImageIOAnimatedCoder.h */, + A830E1FCCBFF0E3E0CB9AC490BA68B14 /* SDImageIOAnimatedCoder.m */, + 98026ABD4730AD0D7DE536A7F513DDB3 /* SDImageIOAnimatedCoderInternal.h */, + 08261D3B2E86FA4702201DA370E21959 /* SDImageIOCoder.h */, + 91AED5A00B8A2452332D3796039AFA18 /* SDImageIOCoder.m */, + 930A966769BFBCE4E38BBE706B3106C9 /* SDImageLoader.h */, + 86A7C1E882BC355EE233177C35BD2FE3 /* SDImageLoader.m */, + 0E006EB6628D9D7013460BEDD4583E8D /* SDImageLoadersManager.h */, + 03FE134A3FD2889614B4CC40FFEF3581 /* SDImageLoadersManager.m */, + B710990BD7BFF0A6D6E01A535C8AA8D1 /* SDImageTransformer.h */, + 4DF8F1CDC802D0250733D25924A17835 /* SDImageTransformer.m */, + 8157ECA13835DD29BFB8AE4885DE404D /* SDInternalMacros.h */, + 32898454CB13100812704D30105A0D45 /* SDInternalMacros.m */, + 85A7CF7AFC03C91AFB98EF5022FB97AC /* SDMemoryCache.h */, + BDE8C8E66FA082F46F1643FAC6D3F43D /* SDMemoryCache.m */, + 3A5972F6E217179DC514AFBE7916229A /* SDmetamacros.h */, + A9770EBDF903A431CE5AB241FCFFA29B /* SDWeakProxy.h */, + 687C03C1A0D5934231452CF86A151B5E /* SDWeakProxy.m */, + DA0366DC09C0344E545847265A75E5AF /* SDWebImage.h */, + 2B0CEDCECE8F6A5932A40B0EE599F5F8 /* SDWebImageCacheKeyFilter.h */, + 8DEF1FCE593F12623DE48F3406DF7003 /* SDWebImageCacheKeyFilter.m */, + 75AA059908618543FD7A7E7DD4C6BEAA /* SDWebImageCacheSerializer.h */, + F6FB256EA07E33D5F394A9EA0450C896 /* SDWebImageCacheSerializer.m */, + 188EA8631594375F44FE972823A25FAC /* SDWebImageCompat.h */, + A2FB51B9742FF46DD5E6F6CC65B93B6B /* SDWebImageCompat.m */, + 17067DED77C9D2CFC9CF625FA24F832B /* SDWebImageDefine.h */, + F4C9870F922E4407BE5CF841338FA99E /* SDWebImageDefine.m */, + FBFCD3C2F41A889618134EB337C10CFE /* SDWebImageDownloader.h */, + 14A7D6A86A2083A77AE74C11D9E5B400 /* SDWebImageDownloader.m */, + 65C53CB62B4F7435CB3C693234CE5505 /* SDWebImageDownloaderConfig.h */, + C25E233CFC387CA4A006D4D00CDBB57A /* SDWebImageDownloaderConfig.m */, + 0D35826F34C3A15406C7BCA0C286C17A /* SDWebImageDownloaderDecryptor.h */, + 937527F6AC0ACCCA2F3FE296E1CEAA54 /* SDWebImageDownloaderDecryptor.m */, + CC704F85E6DECFEFBA3A0F282033AE27 /* SDWebImageDownloaderOperation.h */, + CD66401597E7952E4DE53DEC58AC4941 /* SDWebImageDownloaderOperation.m */, + BC58BA55D7533F2245DB9FE3327E7353 /* SDWebImageDownloaderRequestModifier.h */, + F27BBCA6BA4C196D7AE3AFB1E1710DD0 /* SDWebImageDownloaderRequestModifier.m */, + E0018F3662070E563761A8EF917D19F4 /* SDWebImageDownloaderResponseModifier.h */, + 773F9B01882667DE86F6CA4CE8008AF1 /* SDWebImageDownloaderResponseModifier.m */, + 93D1007188695E58DB2F07BDFDF18D71 /* SDWebImageError.h */, + 1410AE1CD716A6B76D8C34B2C0718A1E /* SDWebImageError.m */, + 80F422D9CF7F73BDD80C55E658E8103F /* SDWebImageIndicator.h */, + DE742566AA0F5FFDE0409CF795E414D7 /* SDWebImageIndicator.m */, + D705995FC6E23FD467B4D98A67815ACE /* SDWebImageManager.h */, + A1DACC2DC8AD21EC30FE9C39863EC883 /* SDWebImageManager.m */, + AC25F5250554656AB117D165FA972CC9 /* SDWebImageOperation.h */, + B89A1A86F8CF99FF82A13D16543577F3 /* SDWebImageOperation.m */, + F97E68DD72913DDFFA66907E6F040F8C /* SDWebImageOptionsProcessor.h */, + FDA3B029D6EB1945FC6FE325674E10FF /* SDWebImageOptionsProcessor.m */, + 651C41DEE47E984B8359AB6405881E02 /* SDWebImagePrefetcher.h */, + 8168F54744B4E03AC915F62D17CB4288 /* SDWebImagePrefetcher.m */, + 15C41B1F75E0AE177414264D43A54B7D /* SDWebImageTransition.h */, + D62C830395ABE984B932E2867CE13845 /* SDWebImageTransition.m */, + C9FE80D4284F880557EC33949896271E /* SDWebImageTransitionInternal.h */, + C044C8F399ACA5B2EE61EF53158B478D /* UIButton+WebCache.h */, + 9BA3D3A4D6E0BDD3AE5425664D8746EE /* UIButton+WebCache.m */, + 1E644A02D107EFCE505936D2C494F0D2 /* UIColor+SDHexString.h */, + 632FFDAC6AD7D412F1BF8F1A913A0EF1 /* UIColor+SDHexString.m */, + 0905AA9AF1C83106FBB5946C32226A04 /* UIImage+ExtendedCacheData.h */, + A57A3781B2D11ED00B067F77C51CD911 /* UIImage+ExtendedCacheData.m */, + 783FC12BAED041F378F97768D2B28B8C /* UIImage+ForceDecode.h */, + 14F04172F80298AFE5BE335BF76D4501 /* UIImage+ForceDecode.m */, + 3A044FDCB634FCC2E2D4514A1D478D6E /* UIImage+GIF.h */, + 3DE36367B42A69FD745A52FC145EF3CE /* UIImage+GIF.m */, + 76D165A54C30392DFC0BBA605E58B93F /* UIImage+MemoryCacheCost.h */, + D483DE2B67FB68CEE562CE2EA924D7A9 /* UIImage+MemoryCacheCost.m */, + 79B7929EC24027379B0B163DA94A6AFA /* UIImage+Metadata.h */, + D5252618732B4F33066C92F6903EA17B /* UIImage+Metadata.m */, + 88467EFBA0FCF30687E23912DE9B7DD0 /* UIImage+MultiFormat.h */, + DBD5C92406FF93CF245F5E43F82BE580 /* UIImage+MultiFormat.m */, + CC59B2281AD964D6B8FED7B26F17BEC0 /* UIImage+Transform.h */, + 1322DF1CDD5A25B867ADD9873A4AC966 /* UIImage+Transform.m */, + 07AEA36BD7A79BEA1F5BD73E718BEE2E /* UIImageView+HighlightedWebCache.h */, + 12D2895B84AB9CF7B83ED11129E9C360 /* UIImageView+HighlightedWebCache.m */, + 98E65BD4ED51C14C9AEED0810840CC1C /* UIImageView+WebCache.h */, + 78A70A14941070D7C9E513ECE7ECCF02 /* UIImageView+WebCache.m */, + EA52E2692A0A64130E93FC68F11C4F8E /* UIView+WebCache.h */, + CEFAFB0750B061594184687C298B8099 /* UIView+WebCache.m */, + D094492C3C9C70F3767ABB9EF6D63919 /* UIView+WebCacheOperation.h */, + 0592F073094483AED9C6687373CD3E98 /* UIView+WebCacheOperation.m */, + 1493C734914B1D5213D92AB9DC211BA6 /* UIView+WebCacheState.h */, + D3963C0BEB66BA33C14419B6AB8E504C /* UIView+WebCacheState.m */, + E5201F3866F50193E15BB3B6B62DB64E /* Resources */, + ); + name = Core; + sourceTree = ""; + }; + 0FE790F74D50D08C4BB7FCA949573505 /* Resources */ = { + isa = PBXGroup; + children = ( + B3E7BD37B3CED58C99075C4CAF81FBAA /* PrivacyInfo.xcprivacy */, ); name = Resources; sourceTree = ""; }; - 0E3D99BD332A3DB3266D1DBF60DFD2CC /* Resources */ = { + 12297B13B49E08710F5950E4859DDB8F /* ObjectMapper */ = { isa = PBXGroup; children = ( - 7C2E339CA969D2C5ED74BA6ECD6F69EE /* PrivacyInfo.xcprivacy */, + 1159483893C79D787E89D45D687672E6 /* CodableTransform.swift */, + 6B8DD93F892EB3A76FC4B0CC65600DED /* CustomDateFormatTransform.swift */, + CAFECD5FCBEEF8FDD448C9D99E7875DB /* DataTransform.swift */, + 88A88BE7352DE9732931C54A38F9936B /* DateFormatterTransform.swift */, + 9A58F10CA935A050138ADEC85D511540 /* DateTransform.swift */, + 4E36CFCF21F8FB81BAA8FBA2F261E949 /* DictionaryTransform.swift */, + 12C03BC1B83CC86160BD1E3A61E1D046 /* EnumOperators.swift */, + 85BEE30BD1FC651C5184A49AFD512A6C /* EnumTransform.swift */, + AE4001EA3C74696CD653D4D456B33090 /* FromJSON.swift */, + E09E6912A84AAB34450313597D8759AE /* HexColorTransform.swift */, + 0DE1E8395E47D386B6490E17E8F67252 /* ImmutableMappable.swift */, + DCACD2069A5D045848CDC2E5FCB44305 /* IntegerOperators.swift */, + CE2D6B492452344FA1B760EFFD9DC1E5 /* ISO8601DateTransform.swift */, + 1C88283412781FE32730568EB4E8A4BF /* Map.swift */, + D59B8B70311C2BD0CBADA376182EF9B8 /* MapError.swift */, + 95E8FA08C357760274FBE094F7121F08 /* Mappable.swift */, + 8D35101D07B11F5698DC173C735AC6B7 /* Mapper.swift */, + 967D6286ECF8DBBE843AB35C9E2CF2B4 /* NSDecimalNumberTransform.swift */, + AE26DEC3493C62F248963D1C42788E9A /* Operators.swift */, + E36C51FA8863274AB0025855E64ACC3D /* ToJSON.swift */, + D105F796848D507AEBB1461B0F8A6D7C /* TransformOf.swift */, + 33019DB9E82E9B11DA3C4C5B100E7390 /* TransformOperators.swift */, + 087AC616BCEA82E356A02B7EFD0EF5EF /* TransformType.swift */, + 732C3D046DA1DDAADB427A51CFA8D702 /* URLTransform.swift */, + 01003CED91A500DC951FDE1309E8688F /* Resources */, + A4E463123A809DF90D0568E1DDE155F3 /* Support Files */, ); - name = Resources; + name = ObjectMapper; + path = ObjectMapper; sourceTree = ""; }; - 0FEF784F0E246EA0D076701814EF5835 /* Resources */ = { + 1240F3E71CF79AFE7599F80E6FA2378F /* Frameworks */ = { isa = PBXGroup; children = ( - DC9DF62EF43848BE1C5F234D65BCBC98 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 10C9798C964CC79A5087E94A601C1F14 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C559E1C6589C2C4D9F94A887A6257ACE /* AlipaySDK.xcframework */, + FF7E14938F3989FCF9A133CE332AC1B2 /* AlipaySDK.xcframework */, ); name = Frameworks; sourceTree = ""; }; - 13234F058AC42FE4586F0BC017BCB32C /* Model */ = { + 14CBF5E833AC8FA8395F48625F0CF0CE /* Support Files */ = { isa = PBXGroup; children = ( - A6169659CBED06CD788319B06F6437EF /* OIMAtElem.h */, - E2664E5BCD9D8BA910C7D09EA6C2AFBA /* OIMAtElem.m */, - 1583E5EDD96C5DC700A9A7CB042E5C7D /* OIMAttachedInfoElem.h */, - ABAA3CDFB336842D51FBF95ABD577DDB /* OIMAttachedInfoElem.m */, - 75E5014C5A20DE4797B4451A675607F3 /* OIMConversationInfo.h */, - 7CC518F434B48E1EC17CB97405E4AAE6 /* OIMConversationInfo.m */, - 39FED66228C9465702293375314C454F /* OIMCustomElem.h */, - 030E7B5E65DD005483DE4FC112390EBA /* OIMCustomElem.m */, - 91C802E651BCE006BD4115AB9D594543 /* OIMFaceElem.h */, - 1BCC4F82D2FB23B74FAFB19A6D5D21C1 /* OIMFaceElem.m */, - 7E23A30B365807329D25B8ECAF0D6DF3 /* OIMFileElem.h */, - A1603778C0EE3DA3ECCBEBA945D3B01F /* OIMFileElem.m */, - 039025967C251ADD69ACE1553B51DDF0 /* OIMFriendApplication.h */, - CB5268316387EAF511FE3FDA946F4C23 /* OIMFriendApplication.m */, - BBDC785D271CA5318A067B81436E8352 /* OIMFullUserInfo.h */, - 565598230E6135EF0029F6DFA99179EE /* OIMFullUserInfo.m */, - 560ABA646A2022BD1E5E93D0A9E39B26 /* OIMGroupApplicationInfo.h */, - 20FFC6126E63DBE03B5555F2CEA45936 /* OIMGroupApplicationInfo.m */, - 5318EE889AE2ED47F81CC78C2069CB35 /* OIMGroupInfo.h */, - 49B2C730E8574BF4D63DAF8204DC6409 /* OIMGroupInfo.m */, - E18772AEBB906F18A2BFD0E99C107C5B /* OIMGroupMemberInfo.h */, - 3031EF8A675A49AB3D585F9F2A638A62 /* OIMGroupMemberInfo.m */, - BF0E479511C18ADD53E88F03961CB9F1 /* OIMLocationElem.h */, - 34B31BD1C43D0EDD718C40AF38280324 /* OIMLocationElem.m */, - 58D937DEC9A6DADC4020FC73AD7DB7DD /* OIMMergeElem.h */, - 5199447D815E8771DC0B057BD811E2AE /* OIMMergeElem.m */, - 7CF512563DEBEF3926ED04F7296DA8B0 /* OIMMessageElem.h */, - 212097E109C37ABABE45EE6C1CB93074 /* OIMMessageElem.m */, - E4B119AE75A9A04C0FC424C31B4F171B /* OIMMessageInfo.h */, - 7C10ED747514E81C114AB0F3CA16FEE2 /* OIMMessageInfo.m */, - C961DD0E63F5AF416C1B3514F9AEBF47 /* OIMNotificationElem.h */, - 7DB99949480CB8A0B0DF10697A19BAF6 /* OIMNotificationElem.m */, - 6E2F7CCC851477208D59289153C67F97 /* OIMPictureElem.h */, - 1C2073401AAF79A598AB6B0B912877B8 /* OIMPictureElem.m */, - 63D81D87D9F9A845B326030633297628 /* OIMQuoteElem.h */, - 4B160D855FFEF98949AC7D84DF900D91 /* OIMQuoteElem.m */, - 54840BCE2FF7D34360F15C8D7EE872EC /* OIMSearchParam.h */, - 59A43B984C0AF852A6F8AB9E25671AE5 /* OIMSearchParam.m */, - 0DD5014CBC7EBE462FEFF1A0895E2A0D /* OIMSearchResultInfo.h */, - BA124264AE4D19CCA7B7B57D21302619 /* OIMSearchResultInfo.m */, - 27C4EB466DCF1D0C56B87A1492131A17 /* OIMSimpleRequstInfo.h */, - EC75BE3FA4A00604568829C9FF27AAAE /* OIMSimpleRequstInfo.m */, - CF707A0420C20F296F4B5A4D3D2534DD /* OIMSimpleResultInfo.h */, - 77677AE1490EEECD80C448F28787D67E /* OIMSimpleResultInfo.m */, - 65A15F4C96CAED1C108C40708EE87EF4 /* OIMSoundElem.h */, - F0C281DB20437F52417B71177BFAEE60 /* OIMSoundElem.m */, - 8D589F9274BAFDCFA26362A2DA2F9EB0 /* OIMUpdateFriendsReq.h */, - BB4CCEF4612B6E93B18A7AB979A7B8E6 /* OIMUpdateFriendsReq.m */, - 6FE753BC375C0C5909BCC6A256CBBD0C /* OIMUserInfo.h */, - AC8A56E876CE12D362A2C2E78A8D3CCE /* OIMUserInfo.m */, - BD860D73C4D35821C2B060BD58768183 /* OIMVideoElem.h */, - 8B1969DDA8CB584F16A88D1B0AB032B1 /* OIMVideoElem.m */, - ); - name = Model; - sourceTree = ""; - }; - 1478CB67C405C2641DB2E3E2AB7A31B1 /* Support Files */ = { - isa = PBXGroup; - children = ( - 3C4791B8C2A49D72E41FF9376B1ABA2C /* KingfisherWebP.modulemap */, - F49EBA828878A7FD53EFD3EC52DF8DB4 /* KingfisherWebP-dummy.m */, - FD55ED66E31AAE52903F4144A4A5B144 /* KingfisherWebP-Info.plist */, - 30EAD96D230B4FD77745E03EFA29E7D5 /* KingfisherWebP-prefix.pch */, - 4F68BD6425465F18A23B292AC6D7B869 /* KingfisherWebP-umbrella.h */, - FFD32F8F371F0FF3AB2E0204D4001137 /* KingfisherWebP.debug.xcconfig */, - 5875DE076530A11A7D58B4A3F7C35B1C /* KingfisherWebP.release.xcconfig */, + 99499D0EE1F54DD810D25785B2CEF644 /* IQKeyboardNotification.modulemap */, + 2F5FB553F91C4DAAD1EEBAB85DD87170 /* IQKeyboardNotification-dummy.m */, + D77FDB1C0C58A70586287759D338EF34 /* IQKeyboardNotification-Info.plist */, + 6ED83F2399718196583271FC686CBC4D /* IQKeyboardNotification-prefix.pch */, + 29DD63712BF5682DFBF582E1766154EC /* IQKeyboardNotification-umbrella.h */, + BBEF8ABEDA5FDBA01511762EB65DD72A /* IQKeyboardNotification.debug.xcconfig */, + 1E34C4B78DD7F2261388D210C5CADD36 /* IQKeyboardNotification.release.xcconfig */, + 57B4109175DBB8D4D441F6102ED76412 /* ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/KingfisherWebP"; + path = "../Target Support Files/IQKeyboardNotification"; sourceTree = ""; }; - 17BF613B5E6E87BD0EFB340EF8E07E6C /* Frameworks */ = { + 1599095F42B10F407428B81B12177944 /* Support Files */ = { isa = PBXGroup; children = ( - 75BB2637D9DB872F6C846F83FBCD4A40 /* AMapLocationKit.framework */, + 090A0F0AF4335239DE003FB4A5980412 /* AMap3DMap.debug.xcconfig */, + E078D46C2A601050DB01A977C864B192 /* AMap3DMap.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/AMap3DMap"; + sourceTree = ""; + }; + 17035DDE77D81288E6D4B9C13C5E68C1 /* MqttCocoaAsyncSocket */ = { + isa = PBXGroup; + children = ( + B1F10350695B3DDE24FB29DF4C930600 /* MGCDAsyncSocket.h */, + 5F5B52F8C128A08525589088D88B446A /* MGCDAsyncSocket.m */, + 850C6A13A8188DD67C782628C68BEC21 /* MGCDAsyncUdpSocket.h */, + DE2180C541DB14418AE24C9C09FB2399 /* MGCDAsyncUdpSocket.m */, + B6BC1669B13CBAA9F498D430C4891630 /* Support Files */, + ); + name = MqttCocoaAsyncSocket; + path = MqttCocoaAsyncSocket; + sourceTree = ""; + }; + 1729FC80456CEF9B99374B5D7FA2C982 /* RxCocoa */ = { + isa = PBXGroup; + children = ( + 3CB8C613628313363644BD09AD359103 /* _RX.h */, + 9C4D23E4B97E5589131E460C9DAE5009 /* _RX.m */, + 8F7CC255B973DED6704CF75AA5652653 /* _RXDelegateProxy.h */, + 2B6298FFD801309A5E645D5E694C08F2 /* _RXDelegateProxy.m */, + 144656E3F5F7AE2576B871406A869F02 /* _RXKVOObserver.h */, + 075882F6287E92089A2D5E849864B5EF /* _RXKVOObserver.m */, + C444211868DE12D238B5BF354455FC4D /* _RXObjCRuntime.h */, + E66D165B0BE2563D5DADFEB252DF1608 /* _RXObjCRuntime.m */, + 43406D3985E9918221FE0A4DE1B571DA /* Bag.swift */, + 614D20EE3407F1CF8CF6E98954CC88DE /* BehaviorRelay+Driver.swift */, + B4CDE77BD401C132B20942F8B3CA92E7 /* ControlEvent.swift */, + 8360D5277A3EBD251BE1D7B8B657CBB2 /* ControlEvent+Driver.swift */, + 1E1B0A6502E32D023ACE68E9AAF41799 /* ControlEvent+Signal.swift */, + A912BE71BCC6CE5C8A4741C1D8E0D65D /* ControlProperty.swift */, + 0DBBD891BF6C368D4AE331AD41909336 /* ControlProperty+Driver.swift */, + 6E0C12AE7D6E705E0AB3F100E94BDB07 /* ControlTarget.swift */, + AC1490178B4403F12075DA020083F475 /* DelegateProxy.swift */, + D3BAA59A5DF299D939954B1D0B6BAB74 /* DelegateProxyType.swift */, + D057D2D724536C69CB371BBB638D3B1C /* DispatchQueue+Extensions.swift */, + 24A12D238EE2AFDFD11A5BF137C767AA /* Driver.swift */, + F140B22CB4AB5F7F5608248DFE474EB8 /* Driver+Subscription.swift */, + C5DEF7F662508A12F2DEF686D8ED3570 /* Infallible+Bind.swift */, + 80F95906923E1515A2AD4F0F6690D8F6 /* Infallible+Driver.swift */, + BA453413AE53C58DA619D0B966B41FC6 /* InfiniteSequence.swift */, + B9891B991F8D7F282B6C175E77BE7D0E /* ItemEvents.swift */, + 620866CE6F644E71DD360A0EFAC1D7D4 /* KVORepresentable.swift */, + 5A88BF209F6202B0E730318470DDD8BB /* KVORepresentable+CoreGraphics.swift */, + A63D5EC5608CA5FC91E9F28422C4C1E7 /* KVORepresentable+Swift.swift */, + 9026790117C43E79599D121A106C2214 /* NotificationCenter+Rx.swift */, + 6290E5C0F32B2229537B63C8028A89CA /* NSButton+Rx.swift */, + E7B9D50DDFEECB6C6DE1EAEA0BC8ABE0 /* NSControl+Rx.swift */, + 4BB5E60ABB3231746217C7BE67D898E0 /* NSObject+Rx.swift */, + 9DCED5C705FE63535A256328BB0E994A /* NSObject+Rx+KVORepresentable.swift */, + 7675A584D15BA63139E519FD2CB2457A /* NSObject+Rx+RawRepresentable.swift */, + 11C1ACD4FF2DDE99653570E86A791A22 /* NSSlider+Rx.swift */, + 3CFF889EB81CC40894452F644825AF71 /* NSTextField+Rx.swift */, + FBDE0A3AD89058345ADDE79961120897 /* NSTextStorage+Rx.swift */, + 83BABF10DDCA2F56F8F22F97844ED531 /* NSTextView+Rx.swift */, + 5758CE5A67AFA979046916DC97CC125B /* NSView+Rx.swift */, + 071040A220C8B1B13643EADE3387CE25 /* Observable+Bind.swift */, + 3F5BBFBC93786C1203D7B9FC6A5D8002 /* ObservableConvertibleType+Driver.swift */, + 2F63AC006B2627EE41E02B5552FA3FDC /* ObservableConvertibleType+SharedSequence.swift */, + 5BE318237005B61F9AF9628B6F039D09 /* ObservableConvertibleType+Signal.swift */, + FCF8B7BABFCFD728C47BD91B529B0830 /* Platform.Darwin.swift */, + 46F633D702261FD3818B8BC3F02C82DC /* Platform.Linux.swift */, + 869279DCDFEC7F94D90F59FA986A08DE /* PriorityQueue.swift */, + 3D12B6120AA47A34F846154D94CAA3F4 /* PublishRelay+Signal.swift */, + 75CFF08BA767C49703863DFF96165154 /* Queue.swift */, + 1565C58CB6645EE5908226C8FA71D0F8 /* RecursiveLock.swift */, + 583B4C6A567749AA875BA86DF64F5671 /* RxCocoa.h */, + 6092F696CF83DAF2A79FEC33407A7B6D /* RxCocoa.swift */, + 41497B385EDAC9F73A4855C08692FDB1 /* RxCocoaObjCRuntimeError+Extensions.swift */, + 80B0158484445E6EEDCB488111857C96 /* RxCocoaRuntime.h */, + 7B7E3FC6BDBCDDF8FE344D514AFA47BC /* RxCollectionViewDataSourcePrefetchingProxy.swift */, + 1D0927FACAB8AFC0577E10CE3E51400C /* RxCollectionViewDataSourceProxy.swift */, + 6946053ADEB795CA6BF8DC00F6E9818C /* RxCollectionViewDataSourceType.swift */, + 328666E1FE05310AC0A5D3D31B1E08E1 /* RxCollectionViewDelegateProxy.swift */, + 410138B7DB73A37EA3B12FDE47EC6909 /* RxCollectionViewReactiveArrayDataSource.swift */, + D7F7D27217E891C5F29A685C844B453C /* RxNavigationControllerDelegateProxy.swift */, + 74ED59197619BCC0BC378F7696D9CF23 /* RxPickerViewAdapter.swift */, + EEEC9F1860BDB5691ECDE33AB473E52E /* RxPickerViewDataSourceProxy.swift */, + 808561ABAB1F1D752523D18D433D1913 /* RxPickerViewDataSourceType.swift */, + D9C19B02A149A3CE437F509ED0B3F6D6 /* RxPickerViewDelegateProxy.swift */, + 3F30D8D00A655C7EC5DA8DC98A8361B5 /* RxScrollViewDelegateProxy.swift */, + 9338849C2BBC91DD9D38114527BD13B0 /* RxSearchBarDelegateProxy.swift */, + 4C9C1726151F48CC295DA74726E495B9 /* RxSearchControllerDelegateProxy.swift */, + C258350AE25DA6A17D93C6E9D2CF991C /* RxTabBarControllerDelegateProxy.swift */, + 728E021DA9E63720A04C56E1FB52DA37 /* RxTabBarDelegateProxy.swift */, + 38BE8955A2F8AA0C1F76F5B85C29BB9B /* RxTableViewDataSourcePrefetchingProxy.swift */, + CBA1509DD9D34552546037937DF23074 /* RxTableViewDataSourceProxy.swift */, + 19D41911253A4EA902F92DB8C0EC5822 /* RxTableViewDataSourceType.swift */, + 208FBB9974C322A514DDB9CF05374E5E /* RxTableViewDelegateProxy.swift */, + FC4CC40B8B0D567BE5F577D1576BDBDC /* RxTableViewReactiveArrayDataSource.swift */, + D829C1EF7480121F20D5D88502020A07 /* RxTarget.swift */, + 224EE27EF8A4CB6DE2A2994B3B4BA865 /* RxTextStorageDelegateProxy.swift */, + 13257E2CEB981F8DE0977FDCD119CA08 /* RxTextViewDelegateProxy.swift */, + 60CA0BB648C2262B78659DA12DD51A2F /* RxWKNavigationDelegateProxy.swift */, + E6B17E7E86D3F8E7C697BD0F77163A15 /* SchedulerType+SharedSequence.swift */, + C12787613C350ACAA6E34E28788B71EF /* SectionedViewDataSourceType.swift */, + 66E59E81DC8FF48EDF585F8556EBF878 /* SharedSequence.swift */, + 4CFB6F6DFDEB8E69C4A18B6691BBDD7F /* SharedSequence+Concurrency.swift */, + 56A5A309D34A2E484F6D17F00DAA899C /* SharedSequence+Operators.swift */, + 650CBF9346AD732290BB7ED692D6B5F7 /* SharedSequence+Operators+arity.swift */, + DE77A4C4BB20BB9E98756314B59D7425 /* Signal.swift */, + E5B193016B16AF60E6FAC43E2C25F15B /* Signal+Subscription.swift */, + E861069B4AB76BA0BDB1C06C5147DCB7 /* TextInput.swift */, + 1B9BF634B186B10B3DEB036AF4CFC662 /* UIActivityIndicatorView+Rx.swift */, + 843DE0B172D56D4DE04CED8FE9C2717D /* UIApplication+Rx.swift */, + 844DF282F910BCA1C2789FDB5A2CB231 /* UIBarButtonItem+Rx.swift */, + 12AEC4022B4E74BA76823EDA45EF7B0E /* UIButton+Rx.swift */, + E95702201E937BD3B02E440468773440 /* UICollectionView+Rx.swift */, + 671AC6BBB7E983A9C3A434F31B12481D /* UIControl+Rx.swift */, + D813A5AF071FD0BD4182C8B22E365A01 /* UIDatePicker+Rx.swift */, + C1D497158B767F77BFA5E0748C677F85 /* UIGestureRecognizer+Rx.swift */, + D68DD308DBBCA95916FA607C00564308 /* UINavigationController+Rx.swift */, + 6448C33FD616D663955373268AD9800D /* UIPickerView+Rx.swift */, + D5FE50E2C3759529F39015ADF4515455 /* UIRefreshControl+Rx.swift */, + CDCD962236713536EFF122F0B8A174DF /* UIScrollView+Rx.swift */, + 2779AC1EA6378DFB55EC94CB2A921AEF /* UISearchBar+Rx.swift */, + 5F2CAB5804E5C6FE12F21F2E73D0504C /* UISearchController+Rx.swift */, + 2E82BF932F82DDF213C52EC34483CFB3 /* UISegmentedControl+Rx.swift */, + 17213D82F9306746169202894B0EAD94 /* UISlider+Rx.swift */, + 83A7C22E3795619790A213E6D8DC23DB /* UIStepper+Rx.swift */, + 4CDD47B22A2046775AB63801AE6381A4 /* UISwitch+Rx.swift */, + A73D10EE0B3B95755803C56234B8C194 /* UITabBar+Rx.swift */, + 4B3A498E078050E333B31F85315541AC /* UITabBarController+Rx.swift */, + CCD7BCD9C08B7D6A5BDF7D7B7E93E2C4 /* UITableView+Rx.swift */, + 45847A481163BB50EC86B3708DED15B7 /* UITextField+Rx.swift */, + FE537AA8E8B46BAB0B6477FFC2C8F915 /* UITextView+Rx.swift */, + 7697809BBA99F7988F7FFD07178DF004 /* URLSession+Rx.swift */, + EFDC09EB16E3515D1F2F66533C832822 /* WKWebView+Rx.swift */, + F2885CB689AB458D2550825B8891B537 /* Resources */, + E14CAAD9AACB44493155D716691D2BB6 /* Support Files */, + ); + name = RxCocoa; + path = RxCocoa; + sourceTree = ""; + }; + 17E8652D5B87475A0EE4D8410FF319FB /* RxCocoa */ = { + isa = PBXGroup; + children = ( + B10E608E3748FA5D17E35C221637F5CB /* distinct+RxCocoa.swift */, + 00D5B305DEE1ED75EE8C4354CC33DDCA /* mapTo+RxCocoa.swift */, + 3BE64571CFA39F6E7F89C21A96D1D7FB /* not+RxCocoa.swift */, + A9C7F4582926271F92F237DDB69DF485 /* partition+RxCocoa.swift */, + CA661D4F822BB9E46CE4E3531131BCF2 /* UIScrollView+reachedBottom.swift */, + 0992FBF15192FDE359109D457FACCB68 /* UIViewPropertyAnimator+Rx.swift */, + A66A31893F6C7863209C97E72EC09DF9 /* unwrap+SharedSequence.swift */, + ); + name = RxCocoa; + sourceTree = ""; + }; + 182B8E01020C6F0D2E94C066E3B19A52 /* AlipaySDK-iOS */ = { + isa = PBXGroup; + children = ( + 1240F3E71CF79AFE7599F80E6FA2378F /* Frameworks */, + 1A185B21DDF02650E788089C3A9EDFA0 /* Resources */, + 55C4125A98F46875D476B398546E5702 /* Support Files */, + ); + name = "AlipaySDK-iOS"; + path = "AlipaySDK-iOS"; + sourceTree = ""; + }; + 19A53117A1E38E29943319780A65256B /* Frameworks */ = { + isa = PBXGroup; + children = ( + F6F7F87E9741597E5B0B6B3E10027344 /* GeYanSdk.xcframework */, ); name = Frameworks; sourceTree = ""; }; - 183806F986FA7C7B9F4550202167A862 /* mux */ = { + 1A185B21DDF02650E788089C3A9EDFA0 /* Resources */ = { isa = PBXGroup; children = ( - 547E17D5968AAA672C509552228E9667 /* anim_encode.c */, - 09A47D8BBE8F670AEE1597E694E9299C /* animi.h */, - CAA1AA03A70AEA0C5A111D92FB984179 /* mux.h */, - CBD645FB492CC8ABAF8474214E280CC7 /* muxedit.c */, - 66E1CD8AB08972115F770800608A1BDC /* muxi.h */, - F2929AA63D82688BF8DA0D85380910E8 /* muxinternal.c */, - CDB7FF942B90BE067AA3B27A25238BA5 /* muxread.c */, - ); - name = mux; - sourceTree = ""; - }; - 184104BE580B9AD33844D3C3137BD7DF /* lottie-ios */ = { - isa = PBXGroup; - children = ( - 18A15E6769049B4159AC23B4E203B59A /* AnimatedButton.swift */, - 90ABBE9D63AD78104E5DACFD423F724C /* AnimatedControl.swift */, - 44EBEF9387307DC81A32EFFE81F6035F /* AnimatedProviding.swift */, - BED7A2A6B98402F4898A2ED5031C9DD6 /* AnimatedSwitch.swift */, - E7742E45657024F0DDFEBD97D410588B /* AnimationCacheProvider.swift */, - 41CC3F3DD2BB8D3B4156748F2141ED40 /* AnimationContext.swift */, - DB9746CC3590A586C2503988C11BFE17 /* AnimationFontProvider.swift */, - 55FD0B6A9D6EEFE6A1C9B281B105F80F /* AnimationImageProvider.swift */, - 872E8E52ECD0CD6B77BAAB141EA3389D /* AnimationKeypath.swift */, - 5EDD5DC412BB584AD5F6B72E3728689F /* AnimationKeypathExtension.swift */, - E2FB81BBD6BCBE9C6D6A155576A27671 /* AnimationLayer.swift */, - 522FFC7277C7384DC812F49DAC6A2BD7 /* AnimationSubview.swift */, - D9AABB0BF024C76A2F4778A8BF77E9BE /* AnimationTextProvider.swift */, - 775230A1FA491738DF687BEEB0E36177 /* AnimationTime.swift */, - 29501204E1391BC59AB7AF310834F053 /* AnimatorNode.swift */, - C9889E1671FA4909135510BCB410874E /* AnimatorNodeDebugging.swift */, - 35D0028F706E6F2DD1BBA09C9DD8E405 /* AnyEpoxyModelProperty.swift */, - 89EF7D735951E4D80CDBC73A687206F8 /* AnyEquatable.swift */, - D5BE10E514BD8C3BBDC238C222A00125 /* AnyNodeProperty.swift */, - 616B42C1149DA62E1819065E55738C44 /* AnyValueContainer.swift */, - AD27972448441D5FB6107C986BEBBE74 /* AnyValueProvider.swift */, - 3A5135277BD48056B6627693C1C65126 /* Archive.swift */, - EEBAAA80E335D6590A9D194325FBA00F /* Archive+BackingConfiguration.swift */, - 35B2495153788DD6EBBE5BF78859D1A2 /* Archive+Helpers.swift */, - 82431D0B15FED817380B6ECAC0135BCC /* Archive+MemoryFile.swift */, - 60BB1F68A42EFD825729CE824368D4A7 /* Archive+Progress.swift */, - 37835981F866845A76C1CFB6F3D10614 /* Archive+Reading.swift */, - B88D5DEAACE6FC226515037194E0A093 /* Archive+ReadingDeprecated.swift */, - E8D7DF632932C141A3A0BC1099B53183 /* Archive+Writing.swift */, - 803551D524EB59D9A654D4CB1D25BE8F /* Archive+WritingDeprecated.swift */, - 02FF9BD791E7E79B5F6D78F088939100 /* Archive+ZIP64.swift */, - 80FC60B5A2EE8A0941AF06CB71BD4601 /* Asset.swift */, - DB7856D2A89B795002794BEF5165A081 /* AssetLibrary.swift */, - 165FC294BFD8A65FF438D6516CD19815 /* BaseAnimationLayer.swift */, - 8EA54F0BF8E86197CCAC3BD763221B5F /* BaseCompositionLayer.swift */, - EFFEA7E4A731859F2E8145F75A7FCBA0 /* BehaviorsConfigurableView.swift */, - D9469079C705E0ACD65CE0D499E85ADB /* BezierPath.swift */, - B2001A2C582FBBA94AF91ADD4B9931C5 /* BezierPathRoundExtension.swift */, - BE5939CE0FDBDC6B3C62814EA03E1F30 /* Binding+Map.swift */, - F5D7AA96F4C384FFC61ABBD9C65C7F0A /* BlendMode+Filter.swift */, - 4132CF769C59E4962F728199F4EFDCCB /* Bundle.swift */, - E29063E89830E3D7872C21835ACA7C8E /* BundleImageProvider.swift */, - 975ECCBDDA389719AEC4E54DB0112147 /* CAAnimation+TimingConfiguration.swift */, - 36F5425BDC1B6DC62C60458D483CDA77 /* CachedImageProvider.swift */, - 285EA2B479EE8B45155F473C9D20EED7 /* CALayer+addAnimation.swift */, - 0A010C711309127F26077A97DB9D8DE1 /* CALayer+fillBounds.swift */, - 0063BE2DFA2C0152F5DDEEF7CA4531B7 /* CALayer+setupLayerHierarchy.swift */, - A6C5691B4B9FEB2303C898F704D97B3F /* CallbackContextEpoxyModeled.swift */, - 635BD03226AC5A8DC2C0FCBBE2A1A271 /* CGColor+RGB.swift */, - CD53BA557DF4BC4953A4AB9EC6A4FF57 /* CGFloatExtensions.swift */, - BAFDBAA1B3E4639B806A656741AAC875 /* CGPointExtension.swift */, - 43CBA87A6062D67B43C728A78CDD889F /* ClassReference.swift */, - 2EC2049C823875676B5A5A9A7CF7CCCA /* Collection+Diff.swift */, - EE8AC2C8937DC5474F53AD860FC089B9 /* ColorEffectValue.swift */, - 73B1D5C56726F64AE0476C0C1DE058EC /* ColorExtension.swift */, - C0242CA8AEDD877040E56C254660FC43 /* ColorValueProvider.swift */, - 9BD6B4F346C99BD856693783A8C59593 /* CombinedShapeAnimation.swift */, - A7D400804C9D63E6FC3EC09C0CDDD6D2 /* CompatibilityTracker.swift */, - 4C52DF26092158048682358F43565CB5 /* CompatibleAnimationKeypath.swift */, - BFEAA4C469AAC85BB62868EA0E706D5F /* CompatibleAnimationView.swift */, - B702621E70E249E80F3885815B6D43E0 /* CompositionLayer.swift */, - AD03CCC56A646093FE8F14113693E9AE /* CompositionLayersInitializer.swift */, - B6C2FBB7FA150DD8D8F445CC781BF20D /* CompoundBezierPath.swift */, - E82B6099394C2F5A543E192B85CC8691 /* ContentConfigurableView.swift */, - 687267D7FB090DB33AAF5A62DA1D0495 /* CoreAnimationLayer.swift */, - E4B19EAC26B64E59FF162E36726E6092 /* CoreTextRenderLayer.swift */, - AA285ADE8A6A7FDFFE668150218D3D8C /* CurveVertex.swift */, - 38EEDE814FAD2740F02699B6E4BB0001 /* CustomPathAnimation.swift */, - 30ABC2B69AA7FDD403BBA66A483AA50B /* DashPattern.swift */, - DB7D268FBB10E0D836B97C3928B5321B /* Data+Compression.swift */, - 050847A31B5BFFB8A95DC61D0BE1E3A8 /* Data+CompressionDeprecated.swift */, - 0CD26ACB38019F95EF4C9767072D150E /* Data+Serialization.swift */, - D6F586A5D8FE098F83C58AFB7B88C5B9 /* DataExtension.swift */, - 3E4BEB998FE521E695D73DC9BF2ECA90 /* DataIDProviding.swift */, - 86CDC89A868B6D3092C6F3EE456FC553 /* DecodingStrategy.swift */, - C8F3F7FD348306025BE447B96E130A74 /* DefaultAnimationCache.swift */, - 7E5D68AE59A4587387B9319DF7CF3358 /* DictionaryInitializable.swift */, - 09C9FFCB4BFE694DCB6775DB83FA38FE /* DidDisplayProviding.swift */, - D5D3C4F3B57323AEE14C3961892E5BBB /* DidEndDisplayingProviding.swift */, - 88CF94B26432761AD7272FFDA7D98646 /* DidSelectProviding.swift */, - 7FB7CFB34CBF3DE8D9065DC420ED9447 /* Diffable.swift */, - 2C6A602E36472CC2DC2327225B04D330 /* DiffableSection.swift */, - 0406D4904704EB518E43EE52B4F1D1AA /* DotLottieAnimation.swift */, - FFCED4E784FD6B990CD666FDBBA0A426 /* DotLottieCache.swift */, - 9E8AF1331E01EDB4F004F4129550A574 /* DotLottieCacheProvider.swift */, - C184E760724FA58B37DE2A4F77BFEFDC /* DotLottieConfiguration.swift */, - 1F6B612D76BB12D1DD8A1C1714E48765 /* DotLottieFile.swift */, - EA9838D5568CF08D46DA7E59F8CF6C0D /* DotLottieFileHelpers.swift */, - A2739ABA43794B9409EE2F3DDA37D1A7 /* DotLottieImageProvider.swift */, - 10BDD4803F2D3B0D30C89BAB4D03D216 /* DotLottieManifest.swift */, - 9AE453074B44CE425E74E7005ECD4AE8 /* DotLottieUtils.swift */, - 3A27D042C38FA3F775A3165A4F4623C4 /* DropShadowAnimation.swift */, - F6A1B9FE2A7F11E3B46CD429C4BA078D /* DropShadowEffect.swift */, - 6746F5634973F191E0B1F6461DB1945D /* DropShadowNode.swift */, - EB8EED23F953B16F768563FC931049B9 /* DropShadowStyle.swift */, - 48F6E0EA41E40ECC2E2F6DD4D0B38CB1 /* EffectValue.swift */, - F531DEF9CEEFBD2F35BEBFBF41D073F4 /* Ellipse.swift */, - 471AA0E6419BEC2F99BC28C13F677E88 /* EllipseAnimation.swift */, - CAE7582B7C4BC8106041A1A832420987 /* EllipseNode.swift */, - 637A7313065D5EFD2C26D2F8C370607D /* Entry.swift */, - 4DECC62F44E2E42AF9DA7B4D12D109AD /* Entry+Serialization.swift */, - B96763E0F72C4F15536986714E73823B /* Entry+ZIP64.swift */, - CA1147DBAED55DD02A850E00497B92DB /* EpoxyableView.swift */, - 0E8F9DC1785CD80E71ADCCAC6918470F /* EpoxyableView+SwiftUIView.swift */, - 86450CB64F3B277D05E16E3FCFBDDDC6 /* EpoxyLogger.swift */, - 291F235F7EF38C4F833B4A14B6C4236F /* EpoxyModelArrayBuilder.swift */, - 1FF7D4D50D65E9D4198254BB3BEA4CA0 /* EpoxyModeled.swift */, - A132C1553C8DE2206B733C062A0E2D83 /* EpoxyModelProperty.swift */, - 22C59EA8496E114A956C1B762EB73B8A /* EpoxyModelStorage.swift */, - DB4DCA05AF0C1A1C21B89A7468E041BE /* EpoxySwiftUIIntrinsicContentSizeInvalidator.swift */, - FEC5AA73C23F8210E1D7C888097942B0 /* EpoxySwiftUILayoutMargins.swift */, - 477382C0F53729E89AD8720A95AB42A7 /* ErasedContentProviding.swift */, - 7E794613B7B4967B7E315E58575C19E8 /* FileManager+ZIP.swift */, - FF9D3F780F9307B2A4956B12C94603D9 /* FilepathImageProvider.swift */, - 3672AB437DFA2D3DB0B46CE5363FFC21 /* Fill.swift */, - 3C6988BCE07821C58551CEC828E29088 /* FillNode.swift */, - C61CA1E7129FC9BB178D8C730B3B5A79 /* FillRenderer.swift */, - ADEB27CA669C4121E999811969AC33BB /* FloatValueProvider.swift */, - 4E088D11842C15829D25C41127693532 /* Font.swift */, - 2D85C068680B34A7EEFF48F7268DD710 /* Glyph.swift */, - AC3BD5DF5C448ECFA97F2D14FD13D728 /* GradientAnimations.swift */, - 0A6039DC25796F9AE9A8B94A69984B37 /* GradientFill.swift */, - 020D6025AE9566485C60DFB72DEE5B18 /* GradientFillNode.swift */, - 716D4AEC881C597AE0F28479D16E71AE /* GradientFillRenderer.swift */, - 7381A6E52759A60F4F9B92C1DE3B2E15 /* GradientRenderLayer.swift */, - 0CE84950E22DD459CF2C5DB2783BAFFB /* GradientStroke.swift */, - 97F0DF9B08CCA8D2A5749BBA40C04F42 /* GradientStrokeNode.swift */, - 51F373DF5148C21C78733AFACF8E29F0 /* GradientStrokeRenderer.swift */, - 380BDB77A870AFA5A57428CCF35356E9 /* GradientValueProvider.swift */, - 812C339FF35298294B26DF3F2FC34F31 /* Group.swift */, - 5AA735164364C8F331D4C9C21EA6F20C /* GroupInterpolator.swift */, - C40F5AA4F27B5CB9A27F0ACE39DCE988 /* GroupNode.swift */, - 675B12B7CAD812ECF38A4EBD29B11E06 /* GroupOutputNode.swift */, - B2436D99B65B6A8D428A0B859116B860 /* ImageAsset.swift */, - 8E6324703E1125DF8EE3BBB0953D938B /* ImageCompositionLayer.swift */, - 2A75DA3631019C8E174047B15B8ABDEF /* ImageLayer.swift */, - 5F93EC958C215B385E15337C6289B91B /* ImageLayerModel.swift */, - 8D3D018125621B4BB8BD7ED705778350 /* IndexChangeset.swift */, - E7F0E8464FD7AF4F138EB5EAA5FA48F4 /* InfiniteOpaqueAnimationLayer.swift */, - DF15FC481CCD2B54A0EF2DC21F04F419 /* Interpolatable.swift */, - BB34224D13F0A6C900F251943BDB8520 /* InterpolatableExtensions.swift */, - EC837C19FBB78BFC74ECCA16877EF7B6 /* InvertedMatteLayer.swift */, - 6C7351CB3EB502D83F5D34EE4B38D7D8 /* ItemsExtension.swift */, - 5E919CC6590A0AF2C026C7FA6371EFD8 /* KeyedDecodingContainerExtensions.swift */, - 79B611C17C06D5FF4CCB095774A495E9 /* Keyframe.swift */, - 0C4A9542376C040D061E6FE28C2DB9B7 /* KeyframeData.swift */, - E9DE577BCD3B1980C66068F5BBF9C1DA /* KeyframeExtensions.swift */, - 2445A2BFA4F1F72112D3E9B9BD1ADDE7 /* KeyframeGroup.swift */, - CD3394AEB6113760F63CD2C8E55F0743 /* KeyframeGroup+exactlyOneKeyframe.swift */, - 78F7A8987B24B2D899CBD7F38349871F /* KeyframeInterpolator.swift */, - 41E7C809EA33C0393A6AE27000AB14AA /* Keyframes+combined.swift */, - F8DEBF09645160014D2988AC5BC499ED /* Keyframes+timeRemapping.swift */, - 2AC04D79457374349B95B0B732D07A31 /* KeypathSearchable.swift */, - 659C2CC0C7E0DE1574B6730492D6AD01 /* LayerDebugging.swift */, - 54869EC81C5539A8AD92881BFD342D18 /* LayerEffect.swift */, - 94D516F270368ACF9D94D50BA45877D7 /* LayerEffectNode.swift */, - DA521EA6BA5447EBEE592BCF358F83F9 /* LayerFontProvider.swift */, - 95443C107F9AEEA2EE018985A7D23387 /* LayerImageProvider.swift */, - E3EEB3D929F12DA17005E1F37882A2F8 /* LayerModel.swift */, - 745E49067846460E0A71AE45B322158C /* LayerModel+makeAnimationLayer.swift */, - F79EF22CDC01C744BFA86A491B88C628 /* LayerProperty.swift */, - 882FA463C133D41CD8499FE6FB7A999F /* LayerStyle.swift */, - 59FC1BD33170A2BC4D498D0B282E04C9 /* LayerTextProvider.swift */, - 67C415CE5B3DA27754A005F1E2626DEB /* LayerTransformNode.swift */, - 4C16BCB8E73F50157A1D93FED070EE1D /* LegacyGradientFillRenderer.swift */, - 9F4DD82FA503C00D1869D0680B76A86C /* LottieAnimation.swift */, - 6CA6F39A42F8F26B1001FC6ABA7D43B5 /* LottieAnimationCache.swift */, - ABC97A3BC2FAB2610A09174860B90436 /* LottieAnimationHelpers.swift */, - AB7FA079A6480E26839E652C739D968A /* LottieAnimationLayer.swift */, - 7BF5D4957693B5B5DBC61FAC96B2CF23 /* LottieAnimationSource.swift */, - 2FC7510690F9C1195797935F509A996D /* LottieAnimationView.swift */, - 89492CD7805184F37D66C74AF64E60D5 /* LottieAnimationViewBase.swift */, - FAC27B316D383024F0A59D8133F0685B /* LottieAnimationViewInitializers.swift */, - FD07A6AA3A8ACBCE80E15C6F1BEF8D8B /* LottieButton.swift */, - 722701F61A9A66CC4971FB3EA06BD853 /* LottieColor.swift */, - AC62F1FD8293CE55DC16776968CD8EFA /* LottieConfiguration.swift */, - DD253B873F2B67521833408BB82D843B /* LottieLogger.swift */, - 5D8646AABF9B045A43689BB1CD400420 /* LottiePlaybackMode.swift */, - 9EC2C9B5255FD1BD8E427E9A7A199580 /* LottieSwitch.swift */, - B0786928B2C05998AE8F0FF54CE85D00 /* LottieURLSession.swift */, - 801C736CBB37EF2A92BFFF9A8DFBDC70 /* LottieView.swift */, - C664CD013CBAA23F9525F2EC6C50AC09 /* LottieViewType.swift */, - 8A09E695B709DD7B53EE9791CFE0DA7E /* LRUAnimationCache.swift */, - B5190657508F7147ACBE8B04917D52D6 /* LRUCache.swift */, - 36CF504BACFF929BC4D8BACB9C800E9F /* MainThreadAnimationLayer.swift */, - 57CDD5F0D5ADF12E245977A57296A75F /* MakeViewProviding.swift */, - BEB9AB80392ECE7248709873DCA13FCC /* Marker.swift */, - 46FA4E5C6AB9828AA051B5295DB7401A /* Mask.swift */, - 6FCBBFB94C92AAF65512098808136293 /* MaskCompositionLayer.swift */, - 8E64F4612761F1A967A05BC539DAF105 /* MaskContainerLayer.swift */, - F4F177FBFF8775FCFBEBEB5746A1F62D /* MathKit.swift */, - A598A01BE8C27F0423DB78EB55F82E42 /* MeasuringViewRepresentable.swift */, - 0D3E95B767FD6876A4F79F0E3E0A61F4 /* Merge.swift */, - 846B243885678469AE5CDB8168133AEA /* NodeProperty.swift */, - 350390ECD2B359290A8084CB7DDCEF31 /* NodePropertyMap.swift */, - 0FCB1FD240155B644AD7582F70744DC4 /* NullCompositionLayer.swift */, - BD766BEEA3CB87371EF37EDE094330B4 /* OpacityAnimation.swift */, - B2377187B31347A650A1587E782382FA /* PassThroughOutputNode.swift */, - 33DAC44C2ADAB17A1E18E59C3363BA98 /* PathElement.swift */, - 896165C77437B3E3CA729B4CF267209E /* PathNode.swift */, - 2A744FA8696B38DECAED24C7D0829A18 /* PathOutputNode.swift */, - 31C067D5AA45DE8118D9B9C303CDF1C5 /* PointValueProvider.swift */, - D48287B30F0088EC0C5310945CA4B7A1 /* PolygonNode.swift */, - 94F7F3E3105E990CC2499FF7816AE311 /* PrecompAsset.swift */, - 6F774BD72D02B75021A7214A32F49A43 /* PreCompLayer.swift */, - FFD2FEBE902487EB11E1F3B27258FDE6 /* PreCompLayerModel.swift */, - 2355152919250DBBD5FD5A9E31F11464 /* PreCompositionLayer.swift */, - 09E8A3E05EC079477747443AD301E860 /* Rectangle.swift */, - 6B6F61BE674A89311CDDD88E71D4B831 /* RectangleAnimation.swift */, - 7A5D9C68C0A84DD8FEDB37BAD59E8E7C /* RectNode.swift */, - FD5E810B692FBB786B2032A23F252AFE /* ReducedMotionOption.swift */, - 6BB44B5239CC920575CAF69072F84164 /* RenderingEngineOption.swift */, - 9B10279D7918F58546A902DD776F193D /* RenderNode.swift */, - 19D327EFE94ECB1A3205002302180EBC /* Repeater.swift */, - F5F861507F91FE57B627EB903164472C /* RepeaterLayer.swift */, - 277586195FD85080AED690938D317998 /* RootAnimationLayer.swift */, - E24C7A21B6750630893FB2EA5D1EFFBA /* RoundedCorners.swift */, - 146CAAD47B8060678F231FC28E0A3B60 /* RoundedCornersNode.swift */, - E27470085DEB31191E56C66DFE1A64EF /* SectionedChangeset.swift */, - 249F08F366A61A80DBF012BB16BE82AC /* SetBehaviorsProviding.swift */, - A3ED3DE1B23ED24A4AD3B102497F472B /* SetContentProviding.swift */, - DFA30AF832CB05775709E542E804898A /* Shape.swift */, - 59AC7679378D0A2B32322B3D52CC590D /* ShapeAnimation.swift */, - D2509D403C834A34D7305D4C90158B37 /* ShapeCompositionLayer.swift */, - 84A69E76676E2422A40553AA70F4B9AF /* ShapeContainerLayer.swift */, - 8EBAEB62E0BC6BBD2A99A9FFC0297E16 /* ShapeItem.swift */, - 598460A5DF3B56203B29D01ECAC0F8F9 /* ShapeItemLayer.swift */, - B4E269F1764BE1BC501E09F81012012C /* ShapeLayer.swift */, - 7A5645C607400D64B7E1AB629322A90E /* ShapeLayerModel.swift */, - 0BA20785663BFF2D9EB5DA399BF39DB2 /* ShapeNode.swift */, - 5592B24A3177FEA4ABEED9D0B3A6F84B /* ShapeRenderLayer.swift */, - B37A3310A4C1CE6AF8477A9EDAF2E4A6 /* ShapeTransform.swift */, - 630AE44EDCEF6C485BEB0D998AE18947 /* SingleValueProvider.swift */, - 5BFE805D984AAEF8498138BA0166F120 /* SizeValueProvider.swift */, - 27B83BBA92B0D0F145F36F867F55084C /* SolidCompositionLayer.swift */, - 8F23207FD91B4D58996E1529198654DB /* SolidLayer.swift */, - 3901977A60BEA76544CA1152762821E1 /* SolidLayerModel.swift */, - B496E0B79F00C67F9FFBDAA29BD68B37 /* Star.swift */, - ACC3F849100B4177C338AEEF424E627F /* StarAnimation.swift */, - 57760EBDF3FB84060CA612EBDDE56C1C /* StarNode.swift */, - FBC49F1BCFB02AB1359A624A65AB5824 /* StringExtensions.swift */, - 18A237F8AFB1DD864B2E065B762851FB /* Stroke.swift */, - 2DABBD081B5C4DA063F4DB121147E586 /* StrokeAnimation.swift */, - 9E3C9772593EC36053DCE3AD21CDA16D /* StrokeNode.swift */, - EDB98AB321A5B30B05F0F320384699D3 /* StrokeRenderer.swift */, - 62AA6CBDC90F15752FBBFAD594E0DB65 /* StyledView.swift */, - CACA5F91164444FD018604161211CEC8 /* StyleIDProviding.swift */, - 12AC14DB654B07B92FC565359BB24729 /* SwiftUIMeasurementContainer.swift */, - 344CE732EC91350D560B03E4C413A059 /* SwiftUIView.swift */, - EAEC149E660F72FBA6F717D362ECF1F5 /* TestHelpers.swift */, - DA153F1787B4626C642F61ECE6F84F95 /* TextAnimator.swift */, - 5110D595F02FD67EECD601B158E606C1 /* TextAnimatorNode.swift */, - BF41EFA1EAF19A24E823D999541E1D14 /* TextCompositionLayer.swift */, - B37C4EA7F5ED5F46E43C8DB7203FFA1E /* TextDocument.swift */, - A77598EF3EBC00300D5A3F9E4B15F065 /* TextLayer.swift */, - 86EE28E7DEABA7E24637E97FC9F503A5 /* TextLayerModel.swift */, - 24CF5FE8FABF08B21AE1B4496D4FD182 /* TraitCollectionProviding.swift */, - C4C753919F581AE643532B0D59A3E5D3 /* Transform.swift */, - 89A49B541760965E76940F9AFC9F361A /* TransformAnimations.swift */, - B281FF7A2ADCDBC7ABCD018AE61A7C48 /* TransformLayer.swift */, - 340B01518155A1C6DF9490C3B5583041 /* Trim.swift */, - 6278C6F6E095466FC0747AED3A82DBAC /* TrimPathNode.swift */, - AA0BB7AB446A12933B77D4C0AE7B8AA8 /* UIColorExtension.swift */, - D5C78551AE5DF3F869970B180F880896 /* UIView+SwiftUIView.swift */, - CC3798F5D6C9EBC45E8AABCABA094C90 /* UIViewConfiguringSwiftUIView.swift */, - 01E5DBFAF8111481E00D7B8906879F31 /* UnitBezier.swift */, - 1FA284AAEAD628F6B638EFC01ADF2225 /* URL+ZIP.swift */, - B1B5154A7E3B2A7CADF24AE27A2BFB71 /* ValueContainer.swift */, - 9A2A7C5D27987780C1AD46450EB28461 /* ValueProviderStore.swift */, - 489AB4A9B338E825DFFB1745D2B1E16E /* Vector1DEffectValue.swift */, - E31B8E2DE2928272DE12C9F3AA9BF334 /* Vectors.swift */, - C592FF44021E880C95CFE088D4C80A27 /* VectorsExtensions.swift */, - 6929D9112D6D2BA2861A61C822056E89 /* View+ValueChanged.swift */, - 3189E69539A5AFB420AA7887844BAD4F /* ViewDifferentiatorProviding.swift */, - F559BB90CE3167F1DC71176358384C83 /* ViewEpoxyModeled.swift */, - 3735BF48C165F1FF3722190A8D76CEAB /* ViewProviding.swift */, - 2E60DA40527A43576DB5B9BD90EF96BE /* ViewType.swift */, - 11557BC158C05BFB9E2F996F3EEF9C99 /* VisibilityAnimation.swift */, - 7D638901CE9A00B98FD0FD8D2DADCB2A /* WillDisplayProviding.swift */, - 2566AB51BD5335A457DA787A36A8A979 /* Resources */, - 233402B58F7F4938646F3CB5C0464CE1 /* Support Files */, - ); - name = "lottie-ios"; - path = "lottie-ios"; - sourceTree = ""; - }; - 1A9319BF8FA8992A9F1BE19B24A88C2B /* Resources */ = { - isa = PBXGroup; - children = ( - 4B8D141C5CB92565EBE4E408187A268A /* MJRefresh.bundle */, - AF41612EEB9F8E1B8A0A9496A63C2391 /* PrivacyInfo.xcprivacy */, + BDE8A491D26688B79C66157CE598DB67 /* AlipaySDK.bundle */, ); name = Resources; sourceTree = ""; }; - 1B64ABA8F436EE83F74E37C2167D564C /* Moya */ = { + 1C04CC67740625319DA7C97E12910ECA /* Resources */ = { isa = PBXGroup; children = ( - CCA7DCBB8267C4F607C0972B50D2BFF0 /* Core */, - 972E5EC9A62033D326264F0F98074964 /* Support Files */, - ); - name = Moya; - path = Moya; - sourceTree = ""; - }; - 1DCA065307115405102822179113DBA5 /* Support Files */ = { - isa = PBXGroup; - children = ( - ACC681D108A8345F492BADBED19B1FA5 /* WechatOpenSDK-XCFramework-xcframeworks.sh */, - 1F0F417D668A29E1F52CC4DA14DE80D6 /* WechatOpenSDK-XCFramework.debug.xcconfig */, - 8CB579539F7E67A543281235A347A0DD /* WechatOpenSDK-XCFramework.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/WechatOpenSDK-XCFramework"; - sourceTree = ""; - }; - 1E19CB73CDC36544434FB01B82AFCA32 /* Picker */ = { - isa = PBXGroup; - children = ( - 06A671AD153C13287C7F5677F7728291 /* AlbumListConfiguration.swift */, - 7F6E07FC92F07EE8755B8F09EA81360F /* AlbumTickView.swift */, - 8552E5A9E1DCA523D27BEF65DF4E6F35 /* AlbumTitleArrowView.swift */, - 0DDF4C5CB57A76EED48FAB3C5DE0F648 /* AlbumTitleView.swift */, - 23627BEB011259D12B07A6DA62769D64 /* AlbumTitleViewConfiguration.swift */, - 6CDDF5A118E717FCD167B130920711D2 /* AlbumView.swift */, - 9245CE764CFC8D2EE878F9982D8D7E40 /* AlbumViewCell.swift */, - 725E391E4DD80A683204D50692D49254 /* AlbumViewController.swift */, - 6268CFADCC4FF23E0CF60396A20648CA /* CameraConfiguration.swift */, - 9591005EF300740D15A68DC41F123102 /* CameraViewController.swift */, - 026F29BAA77629475C91162F66FF4839 /* DeniedAuthorizationView.swift */, - 4D03C4A705D61C193A9538DBE31D5AA6 /* EmptyView.swift */, - ECB898FD774D9886C3F4389AF60B275C /* EmptyViewConfiguration.swift */, - CD4BB25B01C11AECAA30B2010211F454 /* GIFImageView.swift */, - B30CA8E9E2F081102A0E466E3DBCA97C /* LocalAsset.swift */, - 6588BE6EAD95A062EAD65E4406523B33 /* NetworkAsset.swift */, - 97DE3A82457FECCDA36D235A9A527121 /* NotAuthorizedConfiguration.swift */, - 988C977871E4F16B43124775C5442980 /* PhotoAsset.swift */, - CAD52A080AAEE8A81783F36FB0CFFCE0 /* PhotoAsset+Codable.swift */, - 6B7A648559C518EA6DDF715D86F642BF /* PhotoAsset+Network.swift */, - 2F65A5161CB9361350076FDB1F6C69D5 /* PhotoAsset+Request.swift */, - E5F3B932CFBC76ABF24A9176D190C4B5 /* PhotoAsset+URL.swift */, - D773DCDA3327CB85C313A8E3F689E532 /* PhotoAssetCollection.swift */, - AF440B48F12C86D500E4870C7336F8CE /* PhotoListCameraCellConfiguration.swift */, - 1294CE8A5F4523CADF3F15AD30A2FC36 /* PhotoListCellConfiguration.swift */, - 45D6D7BCFDFDF29A6DBD06C86894A520 /* PhotoListConfiguration.swift */, - 12E98132350361407F1F060CAF282D79 /* PhotoPickerBaseViewCell.swift */, - 13C32C8D313CE54C938117F79FB42909 /* PhotoPickerBottomView.swift */, - E3272B858A42201B36637AFF8EAF9B45 /* PhotoPickerController.swift */, - 8A8670B27DF4CBC108E75715DC9B290A /* PhotoPickerControllerProtocol.swift */, - 462A0CFAB7382F9081365327D7F33267 /* PhotoPickerSelectableViewCell.swift */, - 53F1950A2EA3EAEE2DB8542A2B3D3F33 /* PhotoPickerViewCell.swift */, - 01CFD68B658BAD15EF824BA4028CA1A2 /* PhotoPickerViewController.swift */, - FCF8F600071E7B3102920CAB6FF48BAF /* PhotoPickerViewController+SwipeSelect.swift */, - B0E23FC914AC918A3812AD96D4739ED3 /* PhotoPreviewContentView.swift */, - A8D92D190853671E509BAA5E005AAD97 /* PhotoPreviewSelectedView.swift */, - EA80AAE9A8F4745194A22138D50BAC46 /* PhotoPreviewSelectedViewCell.swift */, - 25A588051320603C531C4D4D035FD277 /* PhotoPreviewVideoView.swift */, - E20299373650F59323E2017B3AFF9EA4 /* PhotoPreviewViewCell.swift */, - 25DE73A1EA9F7ECF0E1D5E9F2897CA07 /* PhotoPreviewViewController.swift */, - 42313B5EA1C08DEBCB6B59020C9314BA /* Picker+PhotoAsset.swift */, - DC2CF79AC36312C82B7879494F47F301 /* Picker+PhotoManager.swift */, - 50B45299DA66A11F777502AF15634A23 /* Picker+PhotoTools.swift */, - 445052D7B6C3849EF4DC935731E697FC /* Picker+UIImageView.swift */, - 2A687625895E5B7535DC57C8C7718D36 /* Picker+UIViewController.swift */, - 62AA96A19742574F4A188E5B86334BA6 /* PickerBottomViewConfiguration.swift */, - 9013133C38E66F88D918BAA5D7105F92 /* PickerCamerViewCell.swift */, - B281B08D41A8C1539780B8C2DCEDFBFB /* PickerConfiguration.swift */, - F565D5B158AF3BD7A2398E2AB52BB084 /* PickerInteractiveTransition.swift */, - CA4B9D8BFF9CF3F65AD2916D9197DF2E /* PickerResult.swift */, - DC0ED2914A2752C49E36A33BF535265E /* PickerTransition.swift */, - 25285C5E626F30148926D9D6A6202443 /* PickerTypes.swift */, - DF6EA89B3D938E7704E068A325DCF64B /* PreviewLivePhotoViewCell.swift */, - BF59DBF677935AFE11100B7BA87711D0 /* PreviewPhotoViewCell.swift */, - E5F61B293B8A4C483CC96C8328E45C9D /* PreviewVideoControlViewCell.swift */, - 21DB69F87DC93861A4FEB14C6B788C7E /* PreviewVideoViewCell.swift */, - C13D413FA74ACD184F48EEECDAF835AF /* PreviewViewConfiguration.swift */, - ); - name = Picker; - sourceTree = ""; - }; - 1E8F7BE6175C1532BFCBD66DDCE82460 /* SnapKit */ = { - isa = PBXGroup; - children = ( - 54A3F0BF75389BB6C8ACD25D8C0B04B9 /* Constraint.swift */, - DD4AA3C5C4BE5AF110BEF84C2B425AA0 /* ConstraintAttributes.swift */, - 9F2A1EB79C2BE2EA918A66FEF777D04D /* ConstraintConfig.swift */, - 937BB6E663A5DDF84A196EB20804E1C1 /* ConstraintConstantTarget.swift */, - 6E2E823642914FC324B9D6472E687E6F /* ConstraintDescription.swift */, - 4DC7F488D40CE43018AB21B6B897E2FC /* ConstraintDirectionalInsets.swift */, - 7E9CDCE5F0043FB2C6DB3BCFEA9F9D6C /* ConstraintDirectionalInsetTarget.swift */, - 270430691446D7F2AA48696D223B3B36 /* ConstraintDSL.swift */, - EDD4F7BA6A5912E04B2CD34EE7001335 /* ConstraintInsets.swift */, - 01F8EA59DEAAA738ECEF7D68FCD45C7E /* ConstraintInsetTarget.swift */, - 005D4C8AF425EF161CADC4688A651EFA /* ConstraintItem.swift */, - CDABE3383A3C68EFCCE02018595AFFB3 /* ConstraintLayoutGuide.swift */, - D116F3B6A0E7D4C7816BC8AF483B3EE2 /* ConstraintLayoutGuide+Extensions.swift */, - 5ED33FEB3529F8C9B342C7C2A097E8A8 /* ConstraintLayoutGuideDSL.swift */, - 7DAD49D64090D08FBC52E7C52FFBFF8A /* ConstraintLayoutSupport.swift */, - 5E03558060FDD52E3C586D6C52AE3EEB /* ConstraintLayoutSupportDSL.swift */, - 79E707A863CA7859212FEFF8209B2C51 /* ConstraintMaker.swift */, - C17C21B8184E139AF017777649C7942C /* ConstraintMakerEditable.swift */, - 0DAE279F4B34773AA505A877C76A03B1 /* ConstraintMakerExtendable.swift */, - CB6180AA64A729F29163E3E4DA72B8DA /* ConstraintMakerFinalizable.swift */, - C2874A5748A76E6FF8D240C980346F2D /* ConstraintMakerPrioritizable.swift */, - 4C04BCB613C18841E80E12AD65B54EB5 /* ConstraintMakerRelatable.swift */, - 5F64866AC624BC264E03015321237874 /* ConstraintMakerRelatable+Extensions.swift */, - F17F7847C169C42CD6A56A88675DE83D /* ConstraintMultiplierTarget.swift */, - C803D3D90266F99C8F0394B468092649 /* ConstraintOffsetTarget.swift */, - DB018CCCA925531421DF2AABFAE43A25 /* ConstraintPriority.swift */, - 56AE43789F036F7E37E7C78CE526A331 /* ConstraintPriorityTarget.swift */, - 85DC559A3ADB0AF3A0CC24573A6D4F03 /* ConstraintRelatableTarget.swift */, - 89FDADBEBF7D7F7E8ED56EA6D6D96604 /* ConstraintRelation.swift */, - 8E4F0EB967D731167573C0D43015BE39 /* ConstraintView.swift */, - 24EB183736E04F3300474C4908E03098 /* ConstraintView+Extensions.swift */, - C669EF21008A80A60B3840300815827B /* ConstraintViewDSL.swift */, - 342385D452E45822DD7ECD2003E65B56 /* Debugging.swift */, - 44AA35264925F43D3EC251BF229096B1 /* LayoutConstraint.swift */, - 0BBC5AF8C3A9691541305496A8731034 /* LayoutConstraintItem.swift */, - 80DEFE3B1718E8C2DAB2BE3561944DAD /* Typealiases.swift */, - A0B615FCCC02CD636E8D81ADC0F6C65A /* UILayoutSupport+Extensions.swift */, - 051971D7584710BD37FD4D9C3A5D4B2A /* Resources */, - A0BE7DE0F770AF3D3C34A3D4430737E5 /* Support Files */, - ); - name = SnapKit; - path = SnapKit; - sourceTree = ""; - }; - 20DC7C2F68E6D225F8A28218243E68AD /* Support Files */ = { - isa = PBXGroup; - children = ( - 29EC4402BC322A41C3AC32102A7AD878 /* RxDataSources.modulemap */, - 57E9017AEEC33B5ECECDD10EAB6C564E /* RxDataSources-dummy.m */, - 59F548CA31617CF52B2B366F78407B53 /* RxDataSources-Info.plist */, - 65C686468BAEE92162C48CCAA7C15D4C /* RxDataSources-prefix.pch */, - 4163D447B518D4BC6E0EE0EAC80736EC /* RxDataSources-umbrella.h */, - B538CBD104D8A06AE7A78D4BE98E50CE /* RxDataSources.debug.xcconfig */, - DBF62C0D3DDC64AEDEF9A5454DD073DF /* RxDataSources.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/RxDataSources"; - sourceTree = ""; - }; - 21764D062FBD199DAC83E1EB5A269654 /* Support Files */ = { - isa = PBXGroup; - children = ( - E9FDA15702E93A36F94093E64FFCBDAA /* GTCommonSDK-xcframeworks.sh */, - 708DBDCABBB77C6D70637B96FB6FC314 /* GTCommonSDK.debug.xcconfig */, - DC18C5356E15BE7E1C0CC9337F251372 /* GTCommonSDK.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/GTCommonSDK"; - sourceTree = ""; - }; - 233402B58F7F4938646F3CB5C0464CE1 /* Support Files */ = { - isa = PBXGroup; - children = ( - DA49A84F2674310313ACC307E2624882 /* lottie-ios.modulemap */, - CDFE58BD47F6BD0FC9FB7D6FB1471943 /* lottie-ios-dummy.m */, - 0B6E92282095998AE496E1CD388E290E /* lottie-ios-Info.plist */, - AD2D1327000C70FC0BBAA01C490E011C /* lottie-ios-prefix.pch */, - 1CFB860E83288CAFEBE347A6D5C2A748 /* lottie-ios-umbrella.h */, - BDB33574F45BE6091CBD60487B6B9FAC /* lottie-ios.debug.xcconfig */, - 70EB9DECE01FBEF4BE7887739229CDA6 /* lottie-ios.release.xcconfig */, - CB74ADFB0BA860873B5973342495B456 /* ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/lottie-ios"; - sourceTree = ""; - }; - 23EA7C5FAF45429CC662159E2C59682A /* Editor */ = { - isa = PBXGroup; - children = ( - C008E791217FF7AE2284DE4ED33D82DC /* CropConfirmViewConfiguration.swift */, - 29D2B882480874F42D53FD7B196E67AC /* Editor+PhotoTools.swift */, - EB48C25BA36E7A3A90DF6A7ACCF696A7 /* Editor+UIImage.swift */, - 402415CFF7312E2B08AADA79DA73A4E1 /* Editor+UIImageView.swift */, - 3F90E27702A8F171A62776D2F844F0A4 /* EditorChartlet.swift */, - AD9041B6DF19370EC5F993457993D52D /* EditorChartletView.swift */, - 075CAD90D4B9F0A4CD5758A057138771 /* EditorConfiguration.swift */, - F84C87D3D449237C53594AAF0191B383 /* EditorController.swift */, - 15D5EFF4E9FEA0C1A35B46E0B26B96DD /* EditorCropConfirmView.swift */, - 7E377318D40E300ABE825A4367FCBD80 /* EditorImageResizerControlView.swift */, - 1106559DE680E75DE166E285D84655EC /* EditorImageResizerMaskView.swift */, - C148AA1C2819A5B7DEAC0ECF49DDB109 /* EditorImageResizerView.swift */, - CFC284EBBDD148F95EC62C58F49F6110 /* EditorStickerContentView.swift */, - B6FF27B4385AF3373CEC3201BDC261F2 /* EditorStickerItemView.swift */, - 27CFFE88BED57C1FE5BBB3011F19DBF3 /* EditorStickerTextView.swift */, - F6C485474804F77A7EDCA1DE1FA325B8 /* EditorStickerTextViewController.swift */, - 43E499C40D12F0BA44448C3A8FE1BA57 /* EditorStickerTrashView.swift */, - 346BF7588267CADD317DE1D52AD7134D /* EditorStickerView.swift */, - 23F9CE86B59F74334043FA327497FA4A /* EditorToolOptions.swift */, - C130B750A15BEC82321EE1FB7C52C2EE /* EditorToolView.swift */, - 483A34A8F177C29CC7FBA298C2881921 /* EditorToolViewCell.swift */, - 6AA2BDF2A6AEC64BE57DDA9A5A18B11A /* EditorToolViewConfiguration.swift */, - 7E5A66AF3F7558F7194F9003783F97B0 /* EditorType.swift */, - 2ED6C4C1077B91FD00A25B4E57EA4C75 /* PhotoCroppingConfiguration.swift */, - 3AC4B8F50BFE837EACFBE3C44B0388D1 /* PhotoEditorBrushColorView.swift */, - 690512071EDC44B3B6B7DAC39FB28E74 /* PhotoEditorConfiguration.swift */, - 628023983AC1634CE080F49424225367 /* PhotoEditorContentView.swift */, - 3F982914D28918E5ED7DABBD318AB9CC /* PhotoEditorCropToolModel.swift */, - 49624603A0AE8BE4B18806F2DAD7B3D4 /* PhotoEditorCropToolView.swift */, - 94E6EE5AEC188C24CA3F770D37E635EC /* PhotoEditorDrawView.swift */, - B023E00F6097377AEE33C52783C2D1FB /* PhotoEditorFilter.swift */, - 7AC1D8D7E70806DAFFF676321C42C9EC /* PhotoEditorFilterView.swift */, - 41F90D943D1430057060CE7D0D884CEC /* PhotoEditorMosaicToolView.swift */, - 693F8ECA090561B610BA6FF8274178DA /* PhotoEditorMosaicView.swift */, - 1A4EDC467901C4C5FD494CCC7C2C7D0C /* PhotoEditorView.swift */, - E0718A024C52D04F10056B23069A34F1 /* PhotoEditorViewController.swift */, - 8203A43BF6030189020CD4BD6F61CE28 /* PhotoEditorViewController+Animation.swift */, - A66D9F8A28B2D8B918FF71CBEC6E5BC5 /* PhotoEditorViewController+Export.swift */, - 47C1FF137DA42CBB07A1EF1B8D4A2D29 /* PhotoEditorViewController+Request.swift */, - D3DD3163F3F69703D57F0C5EE33BFEE0 /* PhotoEditResult.swift */, - 5C4A63F49D323F784BCA69785BB2D563 /* VideoCroppingConfiguration.swift */, - CF7AD9CDBAEA6134EE92F10730C7351A /* VideoEditorConfiguration.swift */, - ED63C76DB0E4B5BC896EBC92A06916DC /* VideoEditorCropView.swift */, - 57693EF93CD5CEFDC6308D6BDAB5934B /* VideoEditorCropViewCell.swift */, - 8F085795F289B5BEEE1A9F7E1FFCAA53 /* VideoEditorFrameMaskView.swift */, - 173B97065E201D29718EA0986BBECA8C /* VideoEditorMusic.swift */, - A8212076E19A3552BC329E458689B1B1 /* VideoEditorMusicAnimationView.swift */, - FB887A9561D276DB34EA50EEE4EC12AC /* VideoEditorMusicView.swift */, - 120ADFE75C0204A5F6266DF89EC4FAF2 /* VideoEditorPlayerView.swift */, - 9FC8B0D7C9DF7F1E28698FF3993A1672 /* VideoEditorViewController.swift */, - C8FC5D8D4CAD082AFDF06500203F157F /* VideoEditResult.swift */, - ); - name = Editor; - sourceTree = ""; - }; - 2566AB51BD5335A457DA787A36A8A979 /* Resources */ = { - isa = PBXGroup; - children = ( - E906AAEBF4DCC02DEAD03D193A8E8CC1 /* PrivacyInfo.xcprivacy */, + 904B48D203DDC37F7BD33F40FE034271 /* PrivacyInfo.xcprivacy */, ); name = Resources; sourceTree = ""; }; - 2593E1DD2DC47C75EF3A0CE509D4C1AB /* WechatOpenSDK-XCFramework */ = { + 1C6C2CFBB7F1907271C7CA2745B014A8 /* IQKeyboardReturnManager */ = { isa = PBXGroup; children = ( - B22F019765CB5CAA957DD04C8674CB94 /* Frameworks */, - 1DCA065307115405102822179113DBA5 /* Support Files */, + DA8120E1B44E61CCB3091659BA9A096D /* IQKeyboardReturnManager.swift */, + 3543AC184D347C03D551F192980FD16A /* IQKeyboardReturnManager+UITextFieldDelegate.swift */, + B29722D6230A4E399189B5B3E153D285 /* IQKeyboardReturnManager+UITextViewDelegate.swift */, + 184F947CEF38F5F5A56AAC37D7C72109 /* IQTextInputViewInfoModel.swift */, + 83E626F61C8B74E4A4E472AF4DA1B54B /* Resources */, + 97F3D01C278D7DB488701511B859D170 /* Support Files */, + ); + name = IQKeyboardReturnManager; + path = IQKeyboardReturnManager; + sourceTree = ""; + }; + 1CCD02D2E10EF5E63B685645A6CE4A25 /* Support Files */ = { + isa = PBXGroup; + children = ( + ED167E45D7D1D195B797F19B14612D2F /* MBProgressHUD.modulemap */, + 94AFF6B159156CF9FB52FA537C9D048A /* MBProgressHUD-dummy.m */, + 9A0653D24FED7922043E4E7661E6A56B /* MBProgressHUD-Info.plist */, + 39B0A6CA0BD6828A3BDAC8FDCB446598 /* MBProgressHUD-prefix.pch */, + A42061DFC6E2B374C142A8DB9B3289E6 /* MBProgressHUD-umbrella.h */, + 727C62357BCC8E0AE55A67EC6658490C /* MBProgressHUD.debug.xcconfig */, + 35B8F8C3682AB04ABE8141037BDAA739 /* MBProgressHUD.release.xcconfig */, + FF3DDD4A011290EF797564EFFFF0D7A5 /* ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/MBProgressHUD"; + sourceTree = ""; + }; + 1ED39D70B77D04A440300E85A5468541 /* Resources */ = { + isa = PBXGroup; + children = ( + 18091BE40C28018BF17A58A3B4E68CDA /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 213F7456FA3CBD6ABF7ABD856222F406 /* Resources */ = { + isa = PBXGroup; + children = ( + 6842A0E2A2DB80154F5F93850EF93F27 /* YBImageBrowser.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + 21E4E40C3B4B7D5606D3B896CEBBC9DF /* WechatOpenSDK-XCFramework */ = { + isa = PBXGroup; + children = ( + 9C63DD6DC4AC196298456B1A2338DEBE /* Frameworks */, + AD60C8588DD34B9746332044870D56C5 /* Support Files */, ); name = "WechatOpenSDK-XCFramework"; path = "WechatOpenSDK-XCFramework"; sourceTree = ""; }; - 27051B64C26EB0CDE32F75D2844F36EA /* Support Files */ = { + 22B2590D022CBB1EB5BE49DCE4663481 /* Core */ = { isa = PBXGroup; children = ( - DE123DE4EFA58528204D822F2B11982E /* SGQRCode.modulemap */, - 0F0B7C25AA2F40A4E6FFD122B936E9B5 /* SGQRCode-dummy.m */, - 2F762DB144E20011CDA76B1FFE2F011D /* SGQRCode-Info.plist */, - AA2009BD31AB4862C0F522D1157D1B11 /* SGQRCode-prefix.pch */, - 450ACC10D4C6E5EF773D09E25222F0C0 /* SGQRCode-umbrella.h */, - 9F8AF2C5A4BBDB77E38E045AFFEBF172 /* SGQRCode.debug.xcconfig */, - 6DFB7C4372393229F1688792BAC624F6 /* SGQRCode.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SGQRCode"; - sourceTree = ""; - }; - 29BB9916C4BD6341ADCF265DBFF6E4DB /* Core */ = { - isa = PBXGroup; - children = ( - DDB45231F1F5EB920B95C347ADDA37E0 /* NSObject+YBImageBrowser.h */, - 9CA16EE1A89EBCA3540FF1842B65A1F0 /* NSObject+YBImageBrowser.m */, - 02D106F8687416EA77319E7ADE562850 /* YBIBAnimatedTransition.h */, - 28E32AB0F1A47BA5A7A51B18B2079AB8 /* YBIBAnimatedTransition.m */, - 5BEF055B7F4F83D3D0FEE7E0F24A888D /* YBIBAuxiliaryViewHandler.h */, - 28D97C1931912760D88F8AEDC0081E77 /* YBIBAuxiliaryViewHandler.m */, - E0CE0ECA12ED2394C3ED2CEEE96A2BA8 /* YBIBCellProtocol.h */, - 9FE22C52F3EFE4A4578ABF3C37C14741 /* YBIBCollectionView.h */, - E8E3080423B25BF6C6075F57320D28B6 /* YBIBCollectionView.m */, - 4E9B98311325CDF25036C3281CDBCA4D /* YBIBCollectionViewLayout.h */, - 2724F7D5E46D3CB108BBF81954389D65 /* YBIBCollectionViewLayout.m */, - 30D98D1A29F5DC6D072CD99F8B268931 /* YBIBContainerView.h */, - FAEA6E5F8BC0A7CAF9400093BB333FED /* YBIBContainerView.m */, - 4E591ECDB169F1C1FEA1146E243A7C90 /* YBIBCopywriter.h */, - B10210F7003D8FCDC58E9897BF8F9A7C /* YBIBCopywriter.m */, - 51DC42C2419121C34A1A37FAEF5CADCD /* YBIBDataMediator.h */, - 6F040177292504B70D8F778A5E3CD95B /* YBIBDataMediator.m */, - 6FF0DAC53114F5A38ED18BC9E4CFB6EF /* YBIBDataProtocol.h */, - 4EA880E07DFDD100C561A72CF77D3DB3 /* YBIBDefaultWebImageMediator.h */, - 2E18007B9B2D27C7163D2478DCA136F4 /* YBIBDefaultWebImageMediator.m */, - 46CA00F3ED3A39266FD0485E6A9A52E8 /* YBIBGetBaseInfoProtocol.h */, - 5BF71EAF82417B414C95B361533EE14D /* YBIBIconManager.h */, - EE250BA3582E9617496529A94B3D2AD0 /* YBIBIconManager.m */, - 31C67847AA0011E797287DE347F30612 /* YBIBImageCache.h */, - B2FF70490B2E1F91F3313E405F04F864 /* YBIBImageCache.m */, - A35504DC759D1D6D581B34A9591AB9F4 /* YBIBImageCache+Internal.h */, - 5453B61652D70959B356E49D87F13FA2 /* YBIBImageCell.h */, - E0979D045CAFD37581816EC0C09D3F4F /* YBIBImageCell.m */, - 26E7CB556326C9077DF63BEEB7B2E40E /* YBIBImageCell+Internal.h */, - 797D2CF8D70578E3BCF39EF8F5D828CE /* YBIBImageData.h */, - 21D531AE86A9BDBC117C3BE120B6E7E5 /* YBIBImageData.m */, - D68C40790FE6F29278192AF58A55C115 /* YBIBImageData+Internal.h */, - 2324FAB2BCAFFED67E845E6DD9A96D61 /* YBIBImageLayout.h */, - 0264AC943656AA3FA9C6B88AC02C1E97 /* YBIBImageLayout.m */, - 99A0AB85281536E0E545FFA662C432F5 /* YBIBImageScrollView.h */, - D20A56560F315942F27C111F2B851792 /* YBIBImageScrollView.m */, - B2AFEC94AC3BE895818CC20EF1694D57 /* YBIBInteractionProfile.h */, - 6115E13375F7CD6D73AD6BF3A4D25C83 /* YBIBInteractionProfile.m */, - DC22F1149C5A3255693D354900D95EF3 /* YBIBLoadingView.h */, - 568B09274F880366B93DA437F7833148 /* YBIBLoadingView.m */, - C90D4DF6532EC599263E6EAF62E3B481 /* YBIBOperateBrowserProtocol.h */, - 98CB8DA217C5930EC3944F99F5D655D7 /* YBIBOrientationReceiveProtocol.h */, - 98D78C9FF90C7172E103F3D42D122546 /* YBIBPhotoAlbumManager.h */, - ACCCADC954162C87B199D3E8C5D94DA0 /* YBIBPhotoAlbumManager.m */, - A7E16049507CC03B9090F2AF6AA72E29 /* YBIBScreenRotationHandler.h */, - C7B41E31317DB329D97E70B6AE1B3AAC /* YBIBScreenRotationHandler.m */, - 73CD422A69C42F923FBDDB22D2266109 /* YBIBSentinel.h */, - 7B158E503EAACD9D43DEF7BA2586498A /* YBIBSentinel.m */, - CB5ED48D1C2FEE6F9B6572BC3DC8D105 /* YBIBSheetView.h */, - D7BAE3331BAA65418B42B63EB7A827D8 /* YBIBSheetView.m */, - BB3D3CAB8E5BB7D166549F00AB9C0C15 /* YBIBToastView.h */, - CB8D8C5604011BB605F1D1874F011C0E /* YBIBToastView.m */, - 6D1B3B65DA5FD5A5576321B0DF0050B4 /* YBIBToolViewHandler.h */, - 0FA833C33B5AC6E4CEC49F9D1321C982 /* YBIBToolViewHandler.m */, - 5BB390B0E40E89FDDE554F21ECB7CCF1 /* YBIBTopView.h */, - 99DE9108716840253E3172EC905024FC /* YBIBTopView.m */, - D7A6B09B1EB0F21A79A335F239769653 /* YBIBUtilities.h */, - 58A066A3C3FB7F76C197EADAE084688C /* YBIBUtilities.m */, - 5AA9CF87A7F0EBCDA4F896271A17A3F8 /* YBIBWebImageMediator.h */, - C871A85DF5F63890D0CDE0EB704B3560 /* YBImage.h */, - 91C711A1DC0B3F501774D59914B427DF /* YBImage.m */, - CD18DA084428987D08B37C1AEAC65E52 /* YBImageBrowser.h */, - 4658669320F17E4FF1069C73ED9C3838 /* YBImageBrowser.m */, - CB9679AFC8A1A93C637AD8DA4B2A103C /* YBImageBrowser+Internal.h */, - E4510CDCA226DCE0E5A193FC8910CA58 /* YBImageBrowserDataSource.h */, - A2CE242AF1F10BE3EF9A73779447424E /* YBImageBrowserDelegate.h */, - B943263DB4496297CFA039D0DF444E2D /* Resources */, + 8354BEF8A173F7C560C84148593F0CD7 /* and.swift */, + 1EB524C0849E4B0FDC0EC4D3FBADF657 /* apply.swift */, + 5D5883A9A254761FD72FD4BD60F9207B /* bufferWithTrigger.swift */, + 57E872926A9F0A58259D98D0E6C8AD28 /* cascade.swift */, + 1C8C4047820D21477920765A198889CD /* catchErrorJustComplete.swift */, + 1BC19FD29586F1661E5FB91599DACA72 /* count.swift */, + 231246BF2A5913AF9CF769DF47AB7806 /* curry.swift */, + 99239440EF284973039A0999DC626537 /* distinct.swift */, + 5BBE0E370C0970A23FE497F665D3E7BB /* filterMap.swift */, + F91B42E3A00BA1BA0E898C80945E1CC3 /* fromAsync.swift */, + 183ECF3CB3F9B9A28400DF0443F735D0 /* ignore.swift */, + 2FD132A96BC176A0BD3C8AB88344FAC5 /* ignoreErrors.swift */, + AF0B8DBB8BE630A64C34C16B1D7F8343 /* ignoreWhen.swift */, + 5A21A112A2FAD7228F3F968043407B52 /* mapAt.swift */, + 041BE6B75085B8D8F3F94945290C1279 /* mapMany.swift */, + 976B64416E3016008D42A1E155509FD3 /* mapTo.swift */, + 591FE62A8AED50273FB3FD3B80759AF3 /* materialized+elements.swift */, + D387B9EF45C30A00D99BDDC504B89E42 /* mergeWith.swift */, + 2ECDE574BC8FD1E32B99075B12144063 /* not.swift */, + D6153CC74CC2C4EA27387FCAB1619F3C /* nwise.swift */, + 2C03FDAE6EE74E76EBA2288AEB50A1EA /* Observable+Alias.swift */, + 65EB44BEDF8C30E6FF3250EEF9BC03B2 /* ObservableType+Weak.swift */, + E91F66139CDDA437F057F79B815A732D /* ofType.swift */, + 1B7F5FD6DA9BADA51B3252CFD995B944 /* once.swift */, + F966211AE623F7F0393C7F5139C6CF61 /* partition.swift */, + 5ABBFFA488022C89EF93575377A4C200 /* pausable.swift */, + 0E68A3533F3C2D4D73D3AA397B395563 /* pausableBuffered.swift */, + D9020DDE726D79775743E62A9859FF53 /* repeatWithBehavior.swift */, + 5AA2CD254B942B1A97437DFF6AA4C3B8 /* retryWithBehavior.swift */, + 38F764035CA9E883524E86CEB7BF6FF7 /* toSortedArray.swift */, + 3E321387479547D50CFE05D0B62300A0 /* unwrap.swift */, + 63881AFB6BB011EFCF1252118D2C46A8 /* zipWith.swift */, ); name = Core; sourceTree = ""; }; + 26ABA9AE35255DFF6F3ACEC229D38FE6 /* Support Files */ = { + isa = PBXGroup; + children = ( + 7C922F108D85E1DA2A7D649B99419548 /* ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist */, + 6E26B46220F7707A660D0AD6D5B62D5B /* RxRelay.modulemap */, + A27A11E0906C1DEC75B5B18E610C9434 /* RxRelay-dummy.m */, + 5F7A74C16497D9325EA8E175061E4488 /* RxRelay-Info.plist */, + AE89F8D1916B993D275FAF4DB3647381 /* RxRelay-prefix.pch */, + FFA5203579DE0199D1EEBA334E365319 /* RxRelay-umbrella.h */, + 914F74DC9A660B3CCD6B5049FA3E857E /* RxRelay.debug.xcconfig */, + B479A2DD7E7DF27106FC6E8B4BCC9594 /* RxRelay.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/RxRelay"; + sourceTree = ""; + }; + 28EC08A03CA2595F80D3D9862F151DF9 /* Resources */ = { + isa = PBXGroup; + children = ( + 7307E2DAAF66A2DA284CCE8C33EB8980 /* MJRefresh.bundle */, + 7282B196E51A3F4664251AA4023D0C02 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 29405DD8F64F6FB41A395D9CC6104EDC /* Support Files */ = { + isa = PBXGroup; + children = ( + DC32760A5BC1C280C10033E024BA7D38 /* ResourceBundle-RxSwift_Privacy-RxSwift-Info.plist */, + 953299ECE8729913D60E8FE4347C81B9 /* RxSwift.modulemap */, + CF54465B2588A0521DFFB1FF4940DF6C /* RxSwift-dummy.m */, + D507F5D54565CF1A7DE4A2435AFE878B /* RxSwift-Info.plist */, + 360CE21F80E46FEB77949658AF62C5B3 /* RxSwift-prefix.pch */, + 83A1F2D48A891A026C113A34ED4483E3 /* RxSwift-umbrella.h */, + BDF903CC6F915E514FBF685B2291C574 /* RxSwift.debug.xcconfig */, + 4DDFE96FD63E4568E70A89429B350567 /* RxSwift.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/RxSwift"; + sourceTree = ""; + }; + 295DBC4F5635C5B494F285F57C8224E0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2EFECD383B69C269278B54B4C8841167 /* AMapSearchKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 29D9D99885D1DFB30DC95AD7C11467A6 /* Support Files */ = { + isa = PBXGroup; + children = ( + F91C2C9B1E3C54C520A2D6DBE17AFB1B /* IQTextInputViewNotification.modulemap */, + 997167D7CBCAD446D8B3CDD072502918 /* IQTextInputViewNotification-dummy.m */, + 6351AB2D7C8FD9BADEFC1065E0AEC081 /* IQTextInputViewNotification-Info.plist */, + 4898667850B1F683D057A578214EAE3E /* IQTextInputViewNotification-prefix.pch */, + BF32372FBC1D4CEB416B12E4E4D35483 /* IQTextInputViewNotification-umbrella.h */, + D5B31C16DC507AA7342155F0550B0D79 /* IQTextInputViewNotification.debug.xcconfig */, + EA0077E342A252E846F4FF0AC2A7752E /* IQTextInputViewNotification.release.xcconfig */, + 9A6F311555A73BB737010366B0CDEEDE /* ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/IQTextInputViewNotification"; + sourceTree = ""; + }; + 2AF197CA5C99CF72FF47CF9E963E3B00 /* Interface */ = { + isa = PBXGroup; + children = ( + DDAB292AFEE428D9B577D74F07D5A0EF /* OIMManager.h */, + 31B8537D70EEE6E1BCF41B5917CDDC13 /* OIMManager.m */, + E8B97DC75EF7EDB859A6C3C461EDDE5B /* OIMManager+Connection.h */, + 25B0AFDE6F490BD489C84DE9AB7B623F /* OIMManager+Connection.m */, + 387A1E82C97FC165F805C0A885316D08 /* OIMManager+Conversation.h */, + BA50CF2B5D2F41B255A98CBFC75EF571 /* OIMManager+Conversation.m */, + 610421EA2DB40C1997A6697143D26FCD /* OIMManager+Friend.h */, + 33A714CAD18FD98B82C934FCD845F5A4 /* OIMManager+Friend.m */, + B7FBDEBE2C4E628598655B74A3137531 /* OIMManager+Group.h */, + C45803DEA9BBD6D69D4D24C69F4DAFA1 /* OIMManager+Group.m */, + A8E0AFB41829ABCBA41B2E4A12FC1FF8 /* OIMManager+Login.h */, + D63FD645FB3FE4E761A51B32132ED16C /* OIMManager+Login.m */, + 26B525A296261CA1942BF343253871F1 /* OIMManager+Message.h */, + EF3AAC0045F4635A4281CCE672E15EB1 /* OIMManager+Message.m */, + BF86B2932209BF72B21D027CCB3D5BE2 /* OIMManager+User.h */, + 6C2E793CB5C9B430F36FE3573B5EBAB4 /* OIMManager+User.m */, + ); + name = Interface; + sourceTree = ""; + }; + 2AF6B1633CB179859BFB0690965321B9 /* demux */ = { + isa = PBXGroup; + children = ( + BA028C6C6E1A7001499331E6B38C01F9 /* anim_decode.c */, + 9A82381F95A0B1C9085F0DC4DCDEE26B /* demux.c */, + 7CB02546BA5EAF3A87B631DFDF1A12A9 /* demux.h */, + ); + name = demux; + sourceTree = ""; + }; 2B01C5D34569DBC173A53875424B8908 /* Targets Support Files */ = { isa = PBXGroup; children = ( @@ -6890,1595 +6740,1394 @@ name = "Targets Support Files"; sourceTree = ""; }; - 2B8B8B2850D43FFA2121E925FA9D97A7 /* IQKeyboardCore */ = { + 2CE3D4270C99A67151A062702A2DF753 /* YBImageBrowser */ = { isa = PBXGroup; children = ( - 2D7480D6550C594F75C2C72FDFB92E91 /* IQKeyboardConstants.swift */, - B86E1E6F43F67612B84DE9E72FB2157C /* IQKeyboardExtended.swift */, - A22DC8E59A81000BBA63235416889042 /* IQTextInputView.swift */, - 1FE7D3EF3525CECB919C94B7CBAAEB8D /* UIView+Hierarchy.swift */, - 0E3D99BD332A3DB3266D1DBF60DFD2CC /* Resources */, - F00883E6CC241DFA597CE4D826864AAB /* Support Files */, - ); - name = IQKeyboardCore; - path = IQKeyboardCore; - sourceTree = ""; - }; - 2C4CCEE85247151B2A47A9EB0FBE6349 /* URLNavigator */ = { - isa = PBXGroup; - children = ( - 486C16E381473095D0AA5D90E00E5843 /* Navigator.swift */, - 4DF16DAEEB6F7357BF3520DDEBB204C5 /* NavigatorDelegate.swift */, - 78EDEE5E177BF6DF888E2F685ABDAF79 /* NavigatorProtocol.swift */, - F89D901F96E665E5495CE0A5C598E200 /* UIViewController+TopMostViewController.swift */, - C40FD0E6009B44B34D4CA91F002AD958 /* UIViewControllerType.swift */, - BD4119C293858086ECD9A8866275C5A9 /* URLConvertible.swift */, - 0DAE16684B183BA733C62C1A5D862E6B /* URLMatcher.swift */, - 7DB6990AB0882562E03133DB23E906A8 /* URLMatchResult.swift */, - 7373E895FB24690540181BFF56955312 /* URLPatchComponentMatchResult.swift */, - C2FF16D1D087D591C2B162AEF8018694 /* URLPathComponent.swift */, - FE1D993C35E23F57C7F678604B14B362 /* Support Files */, - ); - name = URLNavigator; - path = URLNavigator; - sourceTree = ""; - }; - 2D9B4061D217ACFDC5B354E5FB959489 /* Support Files */ = { - isa = PBXGroup; - children = ( - 8D38B1AD3D58D53753B87B7C2A825199 /* CocoaLumberjack.modulemap */, - 865E473975582293F0FE384ACE2EC425 /* CocoaLumberjack-dummy.m */, - 193C2F05AD905BA3B2BAA978950E4592 /* CocoaLumberjack-Info.plist */, - 83F042965F53FBDB5EA105FFEEBF54BF /* CocoaLumberjack-prefix.pch */, - C90B489DE950DD12FC8930AC3EAFE6AB /* CocoaLumberjack-umbrella.h */, - 615A1FD3776094E854318EE01C75786B /* CocoaLumberjack.debug.xcconfig */, - E6E2849379444297D6642C171B517AA2 /* CocoaLumberjack.release.xcconfig */, - 302F5D48423E1570B6919F852C173899 /* ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/CocoaLumberjack"; - sourceTree = ""; - }; - 2E7EB23330599E9FB94E7FBFF85F9A04 /* Resources */ = { - isa = PBXGroup; - children = ( - 2DB115166094A8D48E376C2F668892BE /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 2FD4164449FB5747C85C9C31E81DE2C1 /* RxDataSources */ = { - isa = PBXGroup; - children = ( - 8D6DC81BAFA296758CF20F117E7A283A /* AnimationConfiguration.swift */, - F12FF728132D421A61C2C6BF2D0F056D /* Array+Extensions.swift */, - E834870E6150A5FFB1FCE3D10C8A1A67 /* CollectionViewSectionedDataSource.swift */, - 9361EDCF72DA935BC195CF2F2E7FEEB1 /* DataSources.swift */, - F9604381FEF2D16AD7ED3B5538527210 /* Deprecated.swift */, - CFC30276B8929B72D79A2C9660B6AAD1 /* FloatingPointType+IdentifiableType.swift */, - 52A9B8EECAC572CE3407A8026D6DA569 /* IntegerType+IdentifiableType.swift */, - E3FC69F2F25AD2A73471B55D72EF3D88 /* RxCollectionViewSectionedAnimatedDataSource.swift */, - 71D2F825E8CB5F153CB1129FD6C30A14 /* RxCollectionViewSectionedReloadDataSource.swift */, - 72D229FA5EF1F07B5006BB07983E73F3 /* RxPickerViewAdapter.swift */, - 85AB9F198071F4FFFD3967362E9EDB76 /* RxTableViewSectionedAnimatedDataSource.swift */, - 1A5AE75EBDE8DA870927704CD94AC0E1 /* RxTableViewSectionedReloadDataSource.swift */, - E91916B07C37A209D25B7D910842E604 /* String+IdentifiableType.swift */, - 142413141212B735369078BF6388CA5A /* TableViewSectionedDataSource.swift */, - 130BE4B7F904DF2C8DB08317F844B561 /* UI+SectionedViewType.swift */, - D1DB3CB1B0F9F8FBA6EB3FF0651D9C39 /* ViewTransition.swift */, - 20DC7C2F68E6D225F8A28218243E68AD /* Support Files */, - ); - name = RxDataSources; - path = RxDataSources; - sourceTree = ""; - }; - 2FEEEE07FF0A91834891F9CC2A86EC56 /* Video */ = { - isa = PBXGroup; - children = ( - E1BCDBFBE4B6AE506F7500D541CCA4B8 /* YBIBVideoActionBar.h */, - 8BCADFC48E2D3683403AE676EBB1FAB3 /* YBIBVideoActionBar.m */, - 25786E146AAE30629FEFFFCD7FEF1C8A /* YBIBVideoCell.h */, - F49EC34BA25445FFAFDB75752FD9EFFE /* YBIBVideoCell.m */, - 59FF3CB194901CFCF1A50573DE01113E /* YBIBVideoCell+Internal.h */, - F06C8ABB058B9D2FEF1726930EB05BCE /* YBIBVideoData.h */, - E9A43AEB8060E50780CE46E8FFB7F94D /* YBIBVideoData.m */, - 6C0DB89854D24E5D70FDE2EA792BBCE4 /* YBIBVideoData+Internal.h */, - 7462F84AB2989D3A2675AA6CA2CC540B /* YBIBVideoTopBar.h */, - 86A3B7CF5EAD9973DAF3C6FFBAEE5AFE /* YBIBVideoTopBar.m */, - C5B7E713872D1FF5E662E3E0EA2B6505 /* YBIBVideoView.h */, - 4F32E9C5ED25E45138C2B009244D8436 /* YBIBVideoView.m */, - 5C6354E910C26010E6650204C68A6B1B /* Resources */, - ); - name = Video; - sourceTree = ""; - }; - 32F0F48DED71A27F831DE40F4142C263 /* Interface */ = { - isa = PBXGroup; - children = ( - 5393BC5A87C5F37D204A620A3F1979BA /* OIMManager.h */, - EAF1091660C6429B118149BE01714056 /* OIMManager.m */, - FB4ADEBB4D4F0969EDB1E98FD06BD24A /* OIMManager+Connection.h */, - D1DB4F36A216F0FE7063760FC77B8302 /* OIMManager+Connection.m */, - 65AF056AC49D66AA67CE8E4CC5F7ABFC /* OIMManager+Conversation.h */, - B23C3A2C524E46A832566B9E8F3565B5 /* OIMManager+Conversation.m */, - 5DFA11B23F0F29B0B8105FB002C0BB1D /* OIMManager+Friend.h */, - 30BCDBE3285AAC94EE2E1B2D935E8DCD /* OIMManager+Friend.m */, - 44456B4A49FD97858C88390117FC8890 /* OIMManager+Group.h */, - 1E5EAE84819EF1BA77DF74FCED0F3399 /* OIMManager+Group.m */, - 00A34944CB3A07DB54E4A187735E5EDB /* OIMManager+Login.h */, - A2C6981FB90E9DB2786F343976922ECA /* OIMManager+Login.m */, - 97847B9AE08AA8C0D6CD270E39CDC0E2 /* OIMManager+Message.h */, - 41B686351F84A98FEEC222FA207E8D99 /* OIMManager+Message.m */, - 89EFF37CC53F11B002498B5B55AB037F /* OIMManager+User.h */, - D1298B1397ACD7C9C70CFD673D14E200 /* OIMManager+User.m */, - ); - name = Interface; - sourceTree = ""; - }; - 346D59E9FB8F99F5AA4CE3479F2C2499 /* Support Files */ = { - isa = PBXGroup; - children = ( - 1F5D6827AFB3166F91E146F96204DDFE /* MJExtension.modulemap */, - C816BC11F808237533A304258E6B9519 /* MJExtension-dummy.m */, - 5B58ED15172BCCF27E385B5BF68A6918 /* MJExtension-Info.plist */, - 62A9CAE160221A15F9869953E47C95D0 /* MJExtension-prefix.pch */, - F40F3FE6E6E74FE180EC6601023DBA74 /* MJExtension-umbrella.h */, - DF72176577676D86E77A44C57C98F44B /* MJExtension.debug.xcconfig */, - 0728A2587FDDC0AF78C982A4DC85EF61 /* MJExtension.release.xcconfig */, - F77154D97D4ACDB3794B86B36A4D2C2B /* ResourceBundle-MJExtension-MJExtension-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/MJExtension"; - sourceTree = ""; - }; - 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F7FCEF70C7D9750C1B6ED3C89E1E04E3 /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - 38344D8DE159517DCEBA9F6784602714 /* RxRelay */ = { - isa = PBXGroup; - children = ( - A89C8E12857A90B1C389AB823B07BD56 /* BehaviorRelay.swift */, - BC93400A9949AF32E23616180B0B6CDD /* Observable+Bind.swift */, - E6FB79E861E4F3D89D4BDDCF33899DB8 /* PublishRelay.swift */, - 001B292321BC5B049194157ACD963619 /* ReplayRelay.swift */, - F1E36184832E3BA860B6D06AC2293606 /* Utils.swift */, - 57681D8DCFCD935A4581C91E6E877085 /* Resources */, - 9AA229A44FED65851AA309B6B73724C8 /* Support Files */, - ); - name = RxRelay; - path = RxRelay; - sourceTree = ""; - }; - 390D6C41E231B4F2FB55A27601653A77 /* Support Files */ = { - isa = PBXGroup; - children = ( - 44D3D9364C5E3681429B741A17C6D231 /* RxSwiftExt.modulemap */, - 558D712381B568AD9457624A9865B29B /* RxSwiftExt-dummy.m */, - E9C0E7881BEB03E2172FC9B3A9B1ABB3 /* RxSwiftExt-Info.plist */, - 2E2DA381D265C5A84E4274615BD3C37F /* RxSwiftExt-prefix.pch */, - 62851F93EAD70B5DAEBEAE1D63184C5A /* RxSwiftExt-umbrella.h */, - 62068575E84E562D2715857256F195F2 /* RxSwiftExt.debug.xcconfig */, - 1EEA2A47DAF2DB781EBC24E6A1DCA2E5 /* RxSwiftExt.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/RxSwiftExt"; - sourceTree = ""; - }; - 3C982D2C8B65ED186C10F67411894FEC /* SDCycleScrollView */ = { - isa = PBXGroup; - children = ( - 57E2B9941F8CBF419C46C68C9AF8CE62 /* SDCollectionViewCell.h */, - 85CEF0B57610430DC6C0900DC77AC6F5 /* SDCollectionViewCell.m */, - 137B6C5117E166291507375196C29E1B /* SDCycleScrollView.h */, - 9167B3FF06763D714F9660F54885ECEF /* SDCycleScrollView.m */, - 990707B203C5928699E7AAADC40C85D6 /* TAAbstractDotView.h */, - 3B2B2FCF8F9A4061EFB2C1C80198FBF1 /* TAAbstractDotView.m */, - 112275B5F2DA020D1F5AAA0ADA2963C4 /* TAAnimatedDotView.h */, - F8E0F9310F8F3E8573FC448EDC98B78C /* TAAnimatedDotView.m */, - DBB07160DFB218EECCC7DBA7F12212BD /* TADotView.h */, - 17FF6580767902B4011A015F2B07A578 /* TADotView.m */, - 6A82911D5CB0F6C7A32A79C0374FCDBC /* TAPageControl.h */, - FC4E893F753ADB394FE8F1C9F855C83D /* TAPageControl.m */, - EA293B714E3EFFF2B4E110D6741A5097 /* UIView+SDExtension.h */, - 4AB6CBC4746778086E329DD344D09063 /* UIView+SDExtension.m */, - 7B1FDE28B5BF6553429E7FC2CFAB3163 /* Support Files */, - ); - name = SDCycleScrollView; - path = SDCycleScrollView; - sourceTree = ""; - }; - 3DAA87A8620CF6996E21D4944FCC4EF8 /* Support Files */ = { - isa = PBXGroup; - children = ( - 660B0D3207CDA50941350787E807EBF9 /* AMapLocation.debug.xcconfig */, - 3AC0F3EEDD22751DD4EF0DA40250DC07 /* AMapLocation.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMapLocation"; - sourceTree = ""; - }; - 3EAC53B0FD10D8BEA680859F029696DC /* RxSwiftExt */ = { - isa = PBXGroup; - children = ( - 44569C2887381E8BB6BAAEC55A9774F2 /* Core */, - 61C5249FDF751F004C93823AE354DDE0 /* RxCocoa */, - 390D6C41E231B4F2FB55A27601653A77 /* Support Files */, - ); - name = RxSwiftExt; - path = RxSwiftExt; - sourceTree = ""; - }; - 4178D8EA87022F419C02300A214DE0D7 /* Resources */ = { - isa = PBXGroup; - children = ( - E90211449D1194D31D1BE906BFB6FEBB /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 4275D96115AA00916CE1FD010F0ACA4A /* Support Files */ = { - isa = PBXGroup; - children = ( - 9C4BD1FDD57389DDABA93B25B1F33C60 /* ResourceBundle-RxSwift_Privacy-RxSwift-Info.plist */, - B239ED9649801435305F59AF6D6AE50A /* RxSwift.modulemap */, - 40FD25DC1921B871C7F788075D01E4BD /* RxSwift-dummy.m */, - A120227F9F4B625771EBD96F015D8008 /* RxSwift-Info.plist */, - 74108890315A63C8D0AA1EAC2AA753B1 /* RxSwift-prefix.pch */, - C8AD3E343425805782DD3A683C4AB359 /* RxSwift-umbrella.h */, - 1390CC8E3CD88975425399A7BD6E60F3 /* RxSwift.debug.xcconfig */, - 8CA76143A5698109811F6465625A7D19 /* RxSwift.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/RxSwift"; - sourceTree = ""; - }; - 43DDE9F3971026A744DF261023296BCF /* Core */ = { - isa = PBXGroup; - children = ( - A30F967339486C931FF72A91349018AC /* IQBarButtonItem.swift */, - BB38A21B400317176AA9BC8FFBF61A5E /* IQBarButtonItemConfiguration.swift */, - 750F89B19E3F2994003AEED155F64886 /* IQInvocation.swift */, - 52DFC3D116D363CE880108238BB7C1B9 /* IQKeyboardToolbar.swift */, - EC0B5B97AEDE09AD78D399CF70F6468F /* IQKeyboardToolbarPlaceholderConfiguration.swift */, - 993FD35E999A7AB78E66C8B6CB9FDB35 /* IQTitleBarButtonItem.swift */, - B7FD01CF991B2947E8743F34F758F00A /* UIView+IQKeyboardExtension.swift */, - ABDDA2F98E6FF243C9EAAF78BE220BA3 /* UIView+IQKeyboardExtensionDeprecated.swift */, - 886EDE3EF4D2E04DC332BE8E363F892F /* UIView+IQKeyboardExtensionObjc.swift */, - ); - name = Core; - sourceTree = ""; - }; - 44569C2887381E8BB6BAAEC55A9774F2 /* Core */ = { - isa = PBXGroup; - children = ( - EF6DF531579CE69496EA3326B6B5AB0C /* and.swift */, - 99DBBEE27AA60246E2BFF5947C21C49F /* apply.swift */, - 326281CC28396A68E89160486CB6C8EF /* bufferWithTrigger.swift */, - A0A2D3C3FF94DFA55B6240A4E3F7EF71 /* cascade.swift */, - CF1A17DE9613A991E0CA0C68744B81D6 /* catchErrorJustComplete.swift */, - 4912A79A08146F11C569FC6DA4735C57 /* count.swift */, - C107644E8F1B43B9190403B7575902BF /* curry.swift */, - 4A695E041567399C0A6E1B8B2BB5790E /* distinct.swift */, - 871E714FD37A86D38B34456ADD948A3D /* filterMap.swift */, - 5581B1DE9E573F96230513861EAC652D /* fromAsync.swift */, - 7C734560368C98DD1126AAEE26285B2F /* ignore.swift */, - 4A86205BBD9A0C0A9ABA8E148F66C648 /* ignoreErrors.swift */, - 0D84E9F9F6E555A1543E50A0B611DEE8 /* ignoreWhen.swift */, - 986D3638256A93D202D509D2EA916718 /* mapAt.swift */, - 59AB42D5F7656B8882D8F442ED7CC8B8 /* mapMany.swift */, - 58EB1FF15EF91274F887D47E933DE7AF /* mapTo.swift */, - 8C69CF0F0BF608B7192C8C2D478D58D4 /* materialized+elements.swift */, - 03AF9077A88CE3FDD85D74403482C1A5 /* mergeWith.swift */, - 7BB619052F7DA53A970B433F53AAEA9E /* not.swift */, - 3D5CC7490D18D68B024892F6BD86A7B6 /* nwise.swift */, - 79397AC7344C5EAFB7C39EC8AC865589 /* Observable+Alias.swift */, - 7B95BC3382D56B69F02F01E003F03796 /* ObservableType+Weak.swift */, - 42C932923F54BF07D5682A760F4539BF /* ofType.swift */, - 705E874F6D90A41BB91F8827850D08E5 /* once.swift */, - F491CDC277C6297CED0F4DB7FDB3B7D1 /* partition.swift */, - 64219E8625D4757F4535A81DE9CC4D2F /* pausable.swift */, - 09BF0462A5A73BDAD46E8893D422BE0F /* pausableBuffered.swift */, - 22AAC60424375432315859887EDB95E9 /* repeatWithBehavior.swift */, - 414EA10691F9648F2A822D776442BEE8 /* retryWithBehavior.swift */, - 31E78FA0D84F351E9823CE5E2062575E /* toSortedArray.swift */, - BC43992A1CEA954A9FF7EAFBFE2123A5 /* unwrap.swift */, - 500A5FEB2506800042D1146A691F3EAA /* zipWith.swift */, - ); - name = Core; - sourceTree = ""; - }; - 4488B0D9649AF3F5F70FA1186039A325 /* Support Files */ = { - isa = PBXGroup; - children = ( - 1CF8E6F541077AC2F8784FCFDE14C12A /* ZXSDK.debug.xcconfig */, - 0D7269015D795415C30E6E7FDA887D10 /* ZXSDK.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ZXSDK"; - sourceTree = ""; - }; - 45E0ABCC560E63CCDC698046D2CECAC8 /* Pods */ = { - isa = PBXGroup; - children = ( - AEF8663A15DF8CF8A388BC4C30E322BB /* Alamofire */, - 922C4D794D5DA21F27DE371A32C81DC9 /* AlipaySDK-iOS */, - B61AC084DCC6C390EBDE866B52662BAC /* AMap3DMap */, - 7A5773BE75C2857E4292FEA4F45F9E2D /* AMapFoundation */, - AE36DC85671F639195920D649C814426 /* AMapLocation */, - B7D0F0451498E39540F43B4DDEAD0C16 /* AMapSearch */, - B8E0F5D7A2B95FFBDDFDC37C469BC5EB /* CocoaLumberjack */, - 09B81D7CE8836E15B560B259E1F4AEB3 /* Differentiator */, - F92D38EEB283873DE3BC6F7542FD9F5C /* GTCommonSDK */, - 8DD960C6BAF6200C0F8AC067AF5A4C83 /* GYSDK */, - 8D0F34B7C644039F8828C76FE8328485 /* HXPHPicker */, - 2B8B8B2850D43FFA2121E925FA9D97A7 /* IQKeyboardCore */, - FA3643B9EB0DC348D5E145744C5C997D /* IQKeyboardManagerSwift */, - 08E09B5ABD3FCE71D53961FFCF94B214 /* IQKeyboardNotification */, - B5889D6F654B473CDBFF2CF8681A3584 /* IQKeyboardReturnManager */, - 82F85F900EBAB66976B458FBAC8F5FCA /* IQKeyboardToolbar */, - 8A848EB67D0A89E7BC70198D9A75F857 /* IQKeyboardToolbarManager */, - 566CC6A3EC260171A8FBAEA09BFF55CE /* IQTextInputViewNotification */, - 840CD23F46524B69F4F4B6D47FB84919 /* IQTextView */, - 609116DC7A2BA0263416EFDAF019810A /* Kingfisher */, - 6B08B74A389EBF7A9C550C3097EC1C9B /* KingfisherWebP */, - 78842ADE4139DB0C6164E6B45B78B68C /* libwebp */, - 184104BE580B9AD33844D3C3137BD7DF /* lottie-ios */, - 4A894EC0AD009DA1A763159D3C7411AE /* MarqueeLabel */, - 5C0E6D6169A820864A2D9A306561E746 /* Masonry */, - F456D54BFDB45606FD2826FBEEC75A16 /* MBProgressHUD */, - A21F7BF51B43F3776F3DE3D773340DFE /* MJExtension */, - 68A769A6E27CDF42F6D607017780F5D6 /* MJRefresh */, - 1B64ABA8F436EE83F74E37C2167D564C /* Moya */, - 4B455CD6D951F3EC367FB3AB3CE3C165 /* ObjectMapper */, - 0519FD4567FEF5F75311774168A5E6D3 /* OpenIMSDK */, - 81191C65D2D480F4497CBD765FC7846C /* OpenIMSDKCore */, - EA761952229FF5E736A9D51024E3B26C /* Popover */, - 6B80073677AE375026360827C4C7760C /* RxCocoa */, - 2FD4164449FB5747C85C9C31E81DE2C1 /* RxDataSources */, - 38344D8DE159517DCEBA9F6784602714 /* RxRelay */, - 6356E43B41589558755AE4C5507D1720 /* RxSwift */, - 3EAC53B0FD10D8BEA680859F029696DC /* RxSwiftExt */, - 3C982D2C8B65ED186C10F67411894FEC /* SDCycleScrollView */, - 8C5931FD55311A7709205B34F5C00512 /* SDWebImage */, - 9F23C9A2C862A7761153F64FC8E53794 /* SGQRCode */, - 1E8F7BE6175C1532BFCBD66DDCE82460 /* SnapKit */, - 5055DB441F1704A906957742BCED1440 /* SwiftDate */, - E2A7FEC7F567EF8BD435292F80BDC7E8 /* SwiftKeychainWrapper */, - 4BB7C0154E46DCC2E9593D7827BCB5C3 /* SwiftyJSON */, - 010A71F4BB02A46FC706439881A18810 /* SwiftyUserDefaults */, - 47D23715B90AA6C74FC7A1B149AE2909 /* TagListView */, - 2C4CCEE85247151B2A47A9EB0FBE6349 /* URLNavigator */, - 2593E1DD2DC47C75EF3A0CE509D4C1AB /* WechatOpenSDK-XCFramework */, - 6028094BC34E181454B871B6D6A83CFF /* YBImageBrowser */, - A72913F8546147BA91D824527DC723A4 /* YYImage */, - 6F410325126C659B7B795978916FCE77 /* ZXSDK */, - ); - name = Pods; - sourceTree = ""; - }; - 45F0B9ECB870C481059FDD419A46F91D /* Support Files */ = { - isa = PBXGroup; - children = ( - 42F1702D21C1AAA9E33E2984581D4FCA /* AlipaySDK-iOS-xcframeworks.sh */, - 1098D704D51AA0E2DEDC327834F7740C /* AlipaySDK-iOS.debug.xcconfig */, - F7FA543E892B922765067621A07C87FE /* AlipaySDK-iOS.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AlipaySDK-iOS"; - sourceTree = ""; - }; - 473006755050AAF82ADE32D6DCD56438 /* Support Files */ = { - isa = PBXGroup; - children = ( - 22EDB49EB35BB9C086E37ED89EAB052B /* YYImage.modulemap */, - E3B2CD25D2368F0AD91857FAB79E8FB1 /* YYImage-dummy.m */, - BE1897BB0C9F910694FC61F30214A0EE /* YYImage-Info.plist */, - FA40745829B66EE3DC8E5C60D9CC9BEE /* YYImage-prefix.pch */, - 816BB0C72A261BD1EB7BD6894E8AA38F /* YYImage-umbrella.h */, - CF3E1C0900F540641D8FE98FD89E3640 /* YYImage.debug.xcconfig */, - BC7E39CC063AB41D123D508DC96ED3C7 /* YYImage.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/YYImage"; - sourceTree = ""; - }; - 47D23715B90AA6C74FC7A1B149AE2909 /* TagListView */ = { - isa = PBXGroup; - children = ( - 0D70F2602168F1347FB7D9F6E7603D10 /* CloseButton.swift */, - 4D51AEB7941D5096807E59C7B4F7596A /* TagListView.swift */, - A3789559DC432ABA817A4958988A7DE5 /* TagView.swift */, - CD0D9A28EB7FA8BDD8B46AECDC9967E8 /* Support Files */, - ); - name = TagListView; - path = TagListView; - sourceTree = ""; - }; - 4804C5A011C353043D9438F1BC53644D /* WebP */ = { - isa = PBXGroup; - children = ( - BC3F664E09F2AC1761DC4ECE861F83C7 /* Frameworks */, - ); - name = WebP; - sourceTree = ""; - }; - 4837C1DDFDECF77E1AAA1C217E746E6C /* Frameworks */ = { - isa = PBXGroup; - children = ( - 6006D4E765AEC9D031BC10150FC24B63 /* ZXSDK.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 48D9D43C4F7A7EF73D3AC8DA613BAA8E /* Utils */ = { - isa = PBXGroup; - children = ( - EE4A4FAAB99051ED36282D6DBBCEA552 /* OIMDefine.h */, - 63E347ABA937E1A86307E97B31D7E50C /* OIMReachability.h */, - 6777B5B9C83F2B2289CF20ACC0542106 /* OIMReachability.m */, - ); - name = Utils; - sourceTree = ""; - }; - 4A894EC0AD009DA1A763159D3C7411AE /* MarqueeLabel */ = { - isa = PBXGroup; - children = ( - 938E1CDDDC030960A63016E0B7190652 /* MarqueeLabel.swift */, - FA8BC2C4FFD28ECB131D96288CDC922C /* Resources */, - E08F64891F9C2915133647F92424EA3A /* Support Files */, - ); - name = MarqueeLabel; - path = MarqueeLabel; - sourceTree = ""; - }; - 4B455CD6D951F3EC367FB3AB3CE3C165 /* ObjectMapper */ = { - isa = PBXGroup; - children = ( - 87DDD42375DF8D0404926440BA144451 /* CodableTransform.swift */, - 1643B1405173B32A64A5AB78741EBA0B /* CustomDateFormatTransform.swift */, - EE530A41C456C8942C48BEE1BC4ACB0A /* DataTransform.swift */, - 046756EDF821762DDB9FCB12B7D5EF28 /* DateFormatterTransform.swift */, - 5DA8B2B1E25EA9FC5AD2833490B8F5C4 /* DateTransform.swift */, - 78E82B74D1377FBBEC130E8053016A10 /* DictionaryTransform.swift */, - 41FAE3704616441F385176547E15B85F /* EnumOperators.swift */, - 577E69204BACD94290D8AA0F05255858 /* EnumTransform.swift */, - E4E622365146682D7E08A6242B2B73CB /* FromJSON.swift */, - E60749802573F5E98F0C09AA9D2F3812 /* HexColorTransform.swift */, - 5001850E080A2D52833E20CF7C699547 /* ImmutableMappable.swift */, - AD14CB3A9622BD754B4DDE7ACDA1BA7A /* IntegerOperators.swift */, - 889EAD92A301DE400B16BA95A2544CF0 /* ISO8601DateTransform.swift */, - B47068467C61A7C35C481F7855A87237 /* Map.swift */, - 227FD73B3C6B806CCAF3C3B7499D12D0 /* MapError.swift */, - 845BD000FE8A9E1EB45F78DC1E70E618 /* Mappable.swift */, - A70FED667384419D528193F57E48A8F1 /* Mapper.swift */, - A852BD96FBC53D4DB881E0209211A72C /* NSDecimalNumberTransform.swift */, - CE864E35FBE5668BF392096A7DF58B8C /* Operators.swift */, - 3D01AEE6FEB31BADC6ABBB964F92BFA6 /* ToJSON.swift */, - 7CFD834B07B9BC8B466E8ACB23CF66F7 /* TransformOf.swift */, - 0D6CE6CF210C12D6787846819CB8D3B1 /* TransformOperators.swift */, - 26EE58E648FD163D54D97151C69A93BA /* TransformType.swift */, - DBD1A131E0B3DB38642A84F2E5057152 /* URLTransform.swift */, - B0262CF67135F1713BB90F3C8B3C05E6 /* Resources */, - 04B06F8FFFF140427FD2BA930A50ADDA /* Support Files */, - ); - name = ObjectMapper; - path = ObjectMapper; - sourceTree = ""; - }; - 4BB7C0154E46DCC2E9593D7827BCB5C3 /* SwiftyJSON */ = { - isa = PBXGroup; - children = ( - 781602548FAD9A55430D9ACCCB6098CC /* SwiftyJSON.swift */, - 4178D8EA87022F419C02300A214DE0D7 /* Resources */, - 8D190C4888D13FCFDBA0427CA2C62633 /* Support Files */, - ); - name = SwiftyJSON; - path = SwiftyJSON; - sourceTree = ""; - }; - 4E52EC198AFBBF2895A04ABEF28131C8 /* Support Files */ = { - isa = PBXGroup; - children = ( - FBE3F550FE18AA6D139CD1B842365721 /* OpenIMSDK.modulemap */, - D6B2C759FB92C7CAA19BAEA2B83D076F /* OpenIMSDK-dummy.m */, - D32609E1BA7CBC157907FAC2FA760E85 /* OpenIMSDK-Info.plist */, - DD64D1E7E04C06593281056370568625 /* OpenIMSDK-prefix.pch */, - 20659E5169F93017F52987EB322E311C /* OpenIMSDK-umbrella.h */, - 7DCB1E01613F7B40578A36E6266BC0B7 /* OpenIMSDK.debug.xcconfig */, - BFBF528C9DC2F22EF9166D52B4955E30 /* OpenIMSDK.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/OpenIMSDK"; - sourceTree = ""; - }; - 4F0CDE059BDFC8D56B1C035A7A27130C /* IQKeyboardToolbarManager */ = { - isa = PBXGroup; - children = ( - 43FB9E973A47305B19D631375B80A59A /* IQKeyboardManager+ToolbarManager.swift */, - C5A5182C75AEAD0F757530B825BB3DA6 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */, - ); - name = IQKeyboardToolbarManager; - sourceTree = ""; - }; - 4F89238B91B8EC63E038E27A33985BD5 /* Support Files */ = { - isa = PBXGroup; - children = ( - 7631896C502615B6F84E4C67DA4FFCD8 /* libwebp.modulemap */, - 5D7E275A9F465A83ACE378819BCFC362 /* libwebp-dummy.m */, - 4AC41A04D19C36C0AA63528AA7AFDC61 /* libwebp-Info.plist */, - 20831C4464FC6DB5647CA8FFB3BB782D /* libwebp-prefix.pch */, - 49B0BA1B9007316089950248F030BD49 /* libwebp-umbrella.h */, - 615A84F5D6E75DCDEE4DE6130DF59E85 /* libwebp.debug.xcconfig */, - CE5309C36CA7E076181ADB8990797A85 /* libwebp.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/libwebp"; - sourceTree = ""; - }; - 4FA4E6AD15A0774E395365FBB07F4357 /* Resources */ = { - isa = PBXGroup; - children = ( - C53081C00C8A2D5E4DDB3C986037310A /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 5055DB441F1704A906957742BCED1440 /* SwiftDate */ = { - isa = PBXGroup; - children = ( - B893A474C858F5C4E36D48E3A0D8C038 /* AssociatedValues.swift */, - 85D1B0A1709FD35727940D11722F80FA /* Calendars.swift */, - 7F851682E599767E9AA044FB11D2D5E4 /* Commons.swift */, - AC74A3DD06D0A473754208FC64517B43 /* Date.swift */, - AC806792CC71E85249287A955EF3507D /* Date+Compare.swift */, - DC143A0F924BCC3BADED1EC0C737709E /* Date+Components.swift */, - 393D78DFF9D51838A2054D5FB8A454BE /* Date+Create.swift */, - 12A7038866A941BC4F3263821D30DE6D /* Date+Math.swift */, - 6D36685DBD069796D57F250F298F4E12 /* DateComponents+Extras.swift */, - 6661F713463BAE855AF1063C2C8C4ADB /* DateInRegion.swift */, - 7C22CE4CD1F8C21C3216ED7B7D0E2880 /* DateInRegion+Compare.swift */, - 5C6097CD51385779D9DD1CD30E169A70 /* DateInRegion+Components.swift */, - 4A843D530EED2334A0CD6860F27AE9F7 /* DateInRegion+Create.swift */, - 7E28567FB181BF2D15FA053910918A9B /* DateInRegion+Math.swift */, - 8F5DBC544730FD8223729C38F6CB1F5B /* DateRepresentable.swift */, - B60F33DE3FA740B4B9EE0AD8B0619BC0 /* DotNetParserFormatter.swift */, - 65EEC6191682ABA20B8A0411040B8329 /* Formatter+Protocols.swift */, - 0DE992B84532B2F0319D59578C0E1B8A /* Int+DateComponents.swift */, - B4C026C1C0C1FF7FEE5FF1768B7C1F9D /* ISOFormatter.swift */, - EC974D5440D46C2475A13210B5072DF5 /* ISOParser.swift */, - 1A84325CE3F960B48B1C19244D0063D0 /* Locales.swift */, - 5751CB4FB7042A2EF15A1E430570581E /* Region.swift */, - DB8309D96FCEC99B33E677AF7698B74F /* String+Parser.swift */, - 93EAA2A959A3EA70624A72F2FB588943 /* SwiftDate.swift */, - 52DBEA1CC4EF7DC089E199B3B942A583 /* TimeInterval+Formatter.swift */, - 533D9571D1EC332BF0EBA2C3A4F8E994 /* TimePeriod.swift */, - 6B34EDD0EC5E729369F40418B69FA49F /* TimePeriod+Support.swift */, - FE42C469235FE439145DB1ED23358021 /* TimePeriodChain.swift */, - A468180CC8FED21C9CBCF714A602BA70 /* TimePeriodCollection.swift */, - CCE90CA40DDCE3B2A7557F7300F48BDA /* TimePeriodGroup.swift */, - 8B02944BAFEBFE6942DBA3EA87B8E5AF /* TimePeriodProtocol.swift */, - 5C26C5D03455E309DF3A4CCB403C5CB1 /* TimeStructures.swift */, - FE27247B0F48B326AF1DDFF5E52E4127 /* Zones.swift */, - 77CF13DDDF26C9E4E6E4540F1931B8F2 /* Support Files */, - ); - name = SwiftDate; - path = SwiftDate; - sourceTree = ""; - }; - 53B93844EBCF80417E7E1D4E3018F18B /* Resources */ = { - isa = PBXGroup; - children = ( - 3702CCA67B68183FAC858084EE553452 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 566CC6A3EC260171A8FBAEA09BFF55CE /* IQTextInputViewNotification */ = { - isa = PBXGroup; - children = ( - C727B0032405B20871145670E76F6A35 /* IQTextInputViewInfo.swift */, - 0654D9122788EE00CAED6C0FFEE73F77 /* IQTextInputViewNotification.swift */, - 8C838B4F0C1E0AF68E1BBEB1D7486F72 /* Resources */, - 58C963E516427F24AF5ECB05B9C7320B /* Support Files */, - ); - name = IQTextInputViewNotification; - path = IQTextInputViewNotification; - sourceTree = ""; - }; - 57681D8DCFCD935A4581C91E6E877085 /* Resources */ = { - isa = PBXGroup; - children = ( - EDE1FC37AA6F040B0AF72E17C31A9E4D /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 579600557A8818FE806DB3940CD84BE1 /* Resources */ = { - isa = PBXGroup; - children = ( - 13E5190A07461E9AA35ECDE444AE8025 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 58AEBDEE0FD26AA73906FD316397D0D1 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9529091C803AAABDBA7281A7BC067C73 /* IQKeyboardToolbar.modulemap */, - 7BA4DAE10AD47725EEC376152E05E20C /* IQKeyboardToolbar-dummy.m */, - D841D091A56096AAE13A8CF138CE6130 /* IQKeyboardToolbar-Info.plist */, - D82B68410AFC0685799BD4FFEDAEDDEB /* IQKeyboardToolbar-prefix.pch */, - 7BEFF4F4EB8D45BF83AE2F386D71FE70 /* IQKeyboardToolbar-umbrella.h */, - FDF694330205FA2699A346C81F89D14B /* IQKeyboardToolbar.debug.xcconfig */, - 1DF1E44CD5D56F8194F2390A6116F36D /* IQKeyboardToolbar.release.xcconfig */, - 28DA339E778E6063A58C7ED7DB35705C /* ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardToolbar"; - sourceTree = ""; - }; - 58C963E516427F24AF5ECB05B9C7320B /* Support Files */ = { - isa = PBXGroup; - children = ( - F66066C78D6415B17CD2A32354EDC61D /* IQTextInputViewNotification.modulemap */, - 080BA283B9623B19CAC631DFF76437E6 /* IQTextInputViewNotification-dummy.m */, - 8F37D52910A532640524D149440D7052 /* IQTextInputViewNotification-Info.plist */, - EF11D95E8530B336C22B28260B2E1056 /* IQTextInputViewNotification-prefix.pch */, - E67302D9EB7537412F3092EFC7E74F0F /* IQTextInputViewNotification-umbrella.h */, - 93608F9DC483D379F667A4F03EDE2D96 /* IQTextInputViewNotification.debug.xcconfig */, - C6EED8EF1941D023328AEA4B21A95EFF /* IQTextInputViewNotification.release.xcconfig */, - F176357BA383DB166EB1ED8951BA321C /* ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/IQTextInputViewNotification"; - sourceTree = ""; - }; - 5A8F097FB03106C24F8891D77A6761F6 /* CallbackProxy */ = { - isa = PBXGroup; - children = ( - 69F0240DF73AE0C77CD3F808BF400356 /* CallbackProxy.h */, - 56B8A080F84269FEB98617E83C0454DC /* CallbackProxy.m */, - CD009445A239BEED49369C3E6069079A /* SendMessageCallbackProxy.h */, - 155E20CA6BEFC121FE0CABBBC97155F2 /* SendMessageCallbackProxy.m */, - 3C0CF0C62F67692E4295190EE91E610F /* UploadFileCallbackProxy.h */, - 13CFBAC771749F005DCDC9210BE8D854 /* UploadFileCallbackProxy.m */, - ); - name = CallbackProxy; - sourceTree = ""; - }; - 5C0E6D6169A820864A2D9A306561E746 /* Masonry */ = { - isa = PBXGroup; - children = ( - B8BB502A0A93569100EFA0D73E3A13AE /* MASCompositeConstraint.h */, - AAED5794D1814F1E87DB3BBCE6FBE1B2 /* MASCompositeConstraint.m */, - F00857D4A1176AE49F933BBAE966C775 /* MASConstraint.h */, - 54D4326B12078EADA37433D8A7688F45 /* MASConstraint.m */, - 003BC8561F8A2CDBE8792BA3D972D3B4 /* MASConstraint+Private.h */, - 0211CECFDC73CE25407A46059C53DB42 /* MASConstraintMaker.h */, - 6261B6AFF7CE8B3C5FCA2DA3C060B8CA /* MASConstraintMaker.m */, - 38E3AB8EB5CD905844D10DD03E94B4F6 /* MASLayoutConstraint.h */, - 73AAE64514CF9375B037045D901E983C /* MASLayoutConstraint.m */, - 8C0385510E7B13F5AF7511624C9E5C9F /* Masonry.h */, - 2CA207F1841764F2BDB2505E309C0D98 /* MASUtilities.h */, - 780859E89AEFB4AE5934635E23DD9F9E /* MASViewAttribute.h */, - 5BFD69CA959D1A9B459B375E711D2513 /* MASViewAttribute.m */, - A5579C794B8B2149F7FF896EA599A88A /* MASViewConstraint.h */, - 91E03E21D00A0CFC8BB4829B9104C22F /* MASViewConstraint.m */, - 35E8846F57F00F87FD95FD897542C502 /* NSArray+MASAdditions.h */, - B8435CCF2311680F3ED5C6D68A7DB889 /* NSArray+MASAdditions.m */, - DFFB232AA60913FE340369D4DA3F470F /* NSArray+MASShorthandAdditions.h */, - 5C82451206DF153E55585157CFB2164B /* NSLayoutConstraint+MASDebugAdditions.h */, - D2F6C3141B01558E41612E3CB9A5B3F5 /* NSLayoutConstraint+MASDebugAdditions.m */, - 111E59CE836AAFABF981BB302BED14EC /* View+MASAdditions.h */, - 3372B0460260FFF150042F100790D87B /* View+MASAdditions.m */, - F214D9285BDD834DE0F15BEBB695D5E9 /* View+MASShorthandAdditions.h */, - C7047394005D22EF48C06D0F8CD2813B /* ViewController+MASAdditions.h */, - E9EAC640CE6D964C3A01D2AD0D9CA661 /* ViewController+MASAdditions.m */, - BC6AE7D0ED3FEE3FC0A3BB6704C3832A /* Support Files */, - ); - name = Masonry; - path = Masonry; - sourceTree = ""; - }; - 5C6354E910C26010E6650204C68A6B1B /* Resources */ = { - isa = PBXGroup; - children = ( - CB4260D2F04BDE7B69E9332D05E23C54 /* YBImageBrowserVideo.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 5F726C3754EEA0BCB582C4A55E735D16 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F6537FAA9BB9B73F701513A06F3F030E /* MAMapKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 6028094BC34E181454B871B6D6A83CFF /* YBImageBrowser */ = { - isa = PBXGroup; - children = ( - 29BB9916C4BD6341ADCF265DBFF6E4DB /* Core */, - 03FAA533C0E49FB41631ABB12321A6A2 /* Support Files */, - 2FEEEE07FF0A91834891F9CC2A86EC56 /* Video */, + 3999BA7BC5D3C7658CCCB2D544E611B4 /* Core */, + 745A4C25FE9F7A927352F897E4FBED48 /* Support Files */, + E67F28A7BFC2D0A10F4A859FF3252BD1 /* Video */, ); name = YBImageBrowser; path = YBImageBrowser; sourceTree = ""; }; - 609116DC7A2BA0263416EFDAF019810A /* Kingfisher */ = { + 2D59480D417D31C1242C59A486BFA4CB /* Support Files */ = { isa = PBXGroup; children = ( - 3FFB55FA3F07B1F7CDEF3C5945A8B171 /* AnimatedImageView.swift */, - AD658EEF20E9119CE663C6D7FC68A348 /* AuthenticationChallengeResponsable.swift */, - E3A95178FB209B1FAE668822F7A4DEFC /* AVAssetImageDataProvider.swift */, - 598A7AAC951814B1308789BB200D8911 /* Box.swift */, - 9BC0A20DD2D47C97E991C418B88BE2C5 /* CacheSerializer.swift */, - 7A4F33BE715AF8213D74710FD0599549 /* CallbackQueue.swift */, - 054BFF3B2D649118B2DCBE549463B70B /* CPListItem+Kingfisher.swift */, - D68BEDC9751B141065CF1027FED503E6 /* Delegate.swift */, - D1C5BEE9A50F34D3FE4396E083ABA3E4 /* DiskStorage.swift */, - 5481E8B55B3E97A187B601A410FD66DB /* DisplayLink.swift */, - 1B3C11BF7CD9B3366062CA6E41292DCD /* Documentation.docc */, - 19008898D15EB1FBBCD1A15590CF8625 /* ExtensionHelpers.swift */, - EE8173DD24489D8BFB8A788C54567E2F /* Filter.swift */, - 01B81C446E6D0311D5E6B347C63082D5 /* FormatIndicatedCacheSerializer.swift */, - 4298E753B82537A2B8C44313CCC2E168 /* GIFAnimatedImage.swift */, - E1490DB57DB8A1ECD1F3411B7761EAFD /* GraphicsContext.swift */, - 9B38CA1B256C4DC4578E9BED9368B736 /* HasImageComponent+Kingfisher.swift */, - E98072F9E435CA10388C986C4EAA96F6 /* Image.swift */, - 773911D3EAAE3F33A663F7CC1EC09005 /* ImageBinder.swift */, - E0611803A1D39F6DB0A37D8FC405B3AA /* ImageCache.swift */, - 83FC585A2073635F19A93B8712ADFCDE /* ImageContext.swift */, - FB7A47E1684EE076EE4D20C87EA82A15 /* ImageDataProcessor.swift */, - D460BB20DEA54F4F1227BF8309D4153C /* ImageDataProvider.swift */, - BD4667C302EAFF74DF30B4071AAC48CA /* ImageDownloader.swift */, - 3C0DBF3930B6D9B41590221ED28D0ABD /* ImageDownloader+LivePhoto.swift */, - F2208D0296FB7B05852D116F0936A6DE /* ImageDownloaderDelegate.swift */, - CB58640348852BF733D2F0BD5379DDE5 /* ImageDrawing.swift */, - 037D39577B12B91D443CB163F5B8C2BA /* ImageFormat.swift */, - A7E6A17940D1B64025EF4866E44EB716 /* ImageModifier.swift */, - 7C809857309C827761D59B9706AD5589 /* ImagePrefetcher.swift */, - 3359376B97F44EDE8A748CC630F6B455 /* ImageProcessor.swift */, - 7375C57236DEA3235E0F2EEB61FA4BC5 /* ImageProgressive.swift */, - 54B4A854479D2A862E4A10285D168D0F /* ImageTransition.swift */, - 716510DE893831EBA6423B0D86C62DDB /* ImageView+Kingfisher.swift */, - AC5247F475E31AF3FCDD129E145E5EA2 /* Indicator.swift */, - 1923C5F56BFC83403AE09CB6E7168D18 /* KF.swift */, - DDA8392764223ED541726AFFDD11B807 /* KFAnimatedImage.swift */, - D7BCE18E08BCB73003FA4EAB713A67F6 /* KFImage.swift */, - 1FDD4EA270A2514B7D7491E50CF6BA4B /* KFImageOptions.swift */, - 7CA4413BD540BFE68830E04D0B5F80B6 /* KFImageProtocol.swift */, - 3ACE2A2FCD1CB79DDBD88BFB0583269E /* KFImageRenderer.swift */, - 185E9EEEEA7B324631291ABE87B55BF9 /* KFOptionsSetter.swift */, - F49C1B5C54E03ED988C89B6FA16BDB5C /* Kingfisher.swift */, - E9C22CBBE02969A90F816D150A20E9FF /* KingfisherError.swift */, - E6C43FEBD18CE9598FA1A74938867514 /* KingfisherManager.swift */, - E16FC8EC2290249207E00023113CA596 /* KingfisherManager+LivePhoto.swift */, - 76A218800E579334BACA61C598A34ED7 /* KingfisherOptionsInfo.swift */, - D5E02CC1CDA6213ADD2D3A5455B1CAA1 /* LivePhotoSource.swift */, - FDE553DBFD8986CB772D81F3EA41D6F1 /* MemoryStorage.swift */, - 622275BE3CDED43E4D4D52732AFB6ECB /* NSButton+Kingfisher.swift */, - 835D71EFA384E013530022C4ED5D6DED /* NSTextAttachment+Kingfisher.swift */, - CBBF1F672E38253186ECF2C0972D5FC1 /* PHLivePhotoView+Kingfisher.swift */, - D64F41A2745AE91DEE1543DBD286390F /* PHPickerResultImageDataProvider.swift */, - 5BDC964E4BDB8D2FC07223D96BD59013 /* Placeholder.swift */, - 1FF7131C55E627FF8ABFED611ABA66AC /* RedirectHandler.swift */, - DD52698FB0F645D5FEACA1C0F6F5C222 /* RequestModifier.swift */, - 9923D74C7DCC4CC752F4502C4B9F4AB3 /* Resource.swift */, - 5267B7BCFE0BDC27381D9A3718337CFC /* Result.swift */, - 0A758E01A5342DD85FC47B3EE4BABF79 /* RetryStrategy.swift */, - D22A61EEFB555B9222253E7202D107B0 /* Runtime.swift */, - 4829363F4F1E0B4952D62D858E19E4AD /* SessionDataTask.swift */, - 4183C044A4BC7762B0A05245AEA4D915 /* SessionDelegate.swift */, - 203E00991678D02363AB9B6B65D253A5 /* SizeExtensions.swift */, - 5A9024578942964BD08F0109992B3280 /* Source.swift */, - 6FB9C7E464A314BD63D92538B44F8A6D /* Storage.swift */, - BE7DEA50FF25BDE8F47C9A4C55418AD1 /* String+SHA256.swift */, - C5033298D1CA93A7865AE65144ECEDB7 /* UIButton+Kingfisher.swift */, - 53B93844EBCF80417E7E1D4E3018F18B /* Resources */, - 72B22C1993413CD79F77C6ECE7A6B83B /* Support Files */, - ); - name = Kingfisher; - path = Kingfisher; - sourceTree = ""; - }; - 61C5249FDF751F004C93823AE354DDE0 /* RxCocoa */ = { - isa = PBXGroup; - children = ( - EA9CEA59AF7E8F2341E1A92B8FB97E66 /* distinct+RxCocoa.swift */, - 2131626EC27604913E004ACB3CBC060A /* mapTo+RxCocoa.swift */, - B256BABEEDB82B55BD4DFCE193D4745E /* not+RxCocoa.swift */, - F4DE10A108C2BBBDF4265A2B0E9396B5 /* partition+RxCocoa.swift */, - EB9F979185CFD56D1A727A76434687D2 /* UIScrollView+reachedBottom.swift */, - 9CF168F773685B0F062B7011CD49245B /* UIViewPropertyAnimator+Rx.swift */, - 3363755C6A144FD04CC1F79B7234245C /* unwrap+SharedSequence.swift */, - ); - name = RxCocoa; - sourceTree = ""; - }; - 6356E43B41589558755AE4C5507D1720 /* RxSwift */ = { - isa = PBXGroup; - children = ( - 83EDBA00E11125390D155B70ADD10B3F /* AddRef.swift */, - E102058F9539D17E8EEB15112A058EEF /* Amb.swift */, - B29F79281A6FD2F1AB20A45A56FF699F /* AnonymousDisposable.swift */, - 829687B94722C4B27AE1F6A929C38A8A /* AnonymousObserver.swift */, - EB3C8E0FE0025F189650168E3AF6C6BE /* AnyObserver.swift */, - BBF5747CA453C4BA37E67B413EF9E878 /* AsMaybe.swift */, - C19DD6665A13D1B7549BC7D51C85D9EF /* AsSingle.swift */, - 47F4417E91DBF2662F9F10B3EE2F3C18 /* AsyncLock.swift */, - E653E3EC2CFFB240C0B26C63037A8603 /* AsyncSubject.swift */, - E50D3CE2D0594CBF14EB8467CCA02548 /* AtomicInt.swift */, - 443DB1392864611F254C77FA4329F1D1 /* Bag.swift */, - 66F6E82115C5A0AA962FAE21C21F7884 /* Bag+Rx.swift */, - 2ACC2D2851101B7855064121BBFD5564 /* BehaviorSubject.swift */, - 576B79FED5EC1392CFDE58BFFB2CC4A0 /* BinaryDisposable.swift */, - 486DBFE0E0D4096F665E6499011A443F /* Binder.swift */, - 421FF5F39905655DDCE1A5F2FF2176D9 /* BooleanDisposable.swift */, - 2DE4D17C8433A44E4298C409C0D34F11 /* Buffer.swift */, - 1E3D74F7DD766B0FCCC2830BEE031A12 /* Cancelable.swift */, - 5EF97943C0E85B351106FE78D20CD5F9 /* Catch.swift */, - D551093E45236015C327AE4B9BEA862F /* CombineLatest.swift */, - A124C9F3769D0065B20BB49855542106 /* CombineLatest+arity.swift */, - 60011C2C50FFAEAC7F35E0F62890FDD6 /* CombineLatest+Collection.swift */, - B27D930CCDFA0E100210ECA696F0A212 /* CompactMap.swift */, - B613575929F9CDC08E3D012506899530 /* Completable.swift */, - A59E29643218DB83EB446596CF3A4210 /* Completable+AndThen.swift */, - 6F1D204D6DDAB229B632C8DE0C49CE0B /* CompositeDisposable.swift */, - DE111CCED1194464F57087895D162857 /* Concat.swift */, - 390E8573959FA2A886CC5567D09B09F6 /* ConcurrentDispatchQueueScheduler.swift */, - 8F42F145897CD3CFBDA60FB0264DB501 /* ConcurrentMainScheduler.swift */, - 22391A5817E334075345521FE1174BED /* ConnectableObservableType.swift */, - F553CBDEE22BDB07390A5A1890961940 /* Create.swift */, - 4B65AF04777A2385E03DD8913EFAE5D7 /* CurrentThreadScheduler.swift */, - 036352F214EB5A26251C99D81D7BF15C /* Date+Dispatch.swift */, - 23B24E42476EAEB449B42C368E04FEBE /* Debounce.swift */, - C13FACFBC79FA95702703916C3A64ECF /* Debug.swift */, - B0141EC31CE079520632B9192FA59C41 /* Decode.swift */, - B0C85E19DE72AE17DD1F8E275523B4BF /* DefaultIfEmpty.swift */, - 67E975FB8AAE5124E00FDEC64DB28529 /* Deferred.swift */, - 03EBA45F8498DF53F666FD4E75823E8C /* Delay.swift */, - BD65B01FFFE710531CEAB6814557AA61 /* DelaySubscription.swift */, - C2AC64CAFEB6D49E57D7FAA016865BC3 /* Dematerialize.swift */, - 3439F956E2BEC0F71B3AC96FAE151B38 /* DispatchQueue+Extensions.swift */, - B194F603A90189ED3671958DAE609175 /* DispatchQueueConfiguration.swift */, - 8E3FE23EA4FA88C546AC8A32561D0DF2 /* Disposable.swift */, - 5DB2942177243632BB63FE27659B24D9 /* Disposables.swift */, - A5C635E55F5A6DFE07FD9D482A1443A7 /* DisposeBag.swift */, - CC4D4B98E55AECCD92A3E8F03E8B4975 /* DisposeBase.swift */, - FAB4CD456F6B33E249E6EA4B26455EBE /* DistinctUntilChanged.swift */, - B2156C5852C3ECAFFA155D714B6C5139 /* Do.swift */, - B32EBE3B8C04AA6B4171868801375329 /* ElementAt.swift */, - 87ACE2C6A3A01ED7E5CD2D9E5B2B24CD /* Empty.swift */, - 643E20DC003F67757DE48602D2A7C2B6 /* Enumerated.swift */, - DFE14717EDAB4A6C917DC1DC5F037922 /* Error.swift */, - 6B06A8830BD9CA33C77A2D4E10375DDC /* Errors.swift */, - C4B4AB0B79C4A577880AC965914ABDBB /* Event.swift */, - 6EEA47533FC8C4392A59226694906812 /* Filter.swift */, - E1DB25C161114385C7539D92C70848E7 /* First.swift */, - 89242402665F619FFC3F3B24AE76ADD2 /* Generate.swift */, - 9AFF3A2C20A0878A9F0BD547D0C6006C /* GroupBy.swift */, - 1EFFF31201EE4BC724B9C92EB8A90677 /* GroupedObservable.swift */, - 8A28EAFBBFB2489AD46E0091B00B767E /* HistoricalScheduler.swift */, - 587526430D6035E65DAF5B13CA90B45D /* HistoricalSchedulerTimeConverter.swift */, - 748290F58F89C4842B47E1474CAA8B3D /* ImmediateSchedulerType.swift */, - 1F6D81725FC20BBBDBDAE2433DCC141F /* Infallible.swift */, - F3D8BAD44D231ABE9E2CF363728BB827 /* Infallible+CombineLatest+arity.swift */, - 9CB8B56D6AF6C0096630403D14A6A2F8 /* Infallible+CombineLatest+Collection.swift */, - F584805C537CD1CBA84D5491040BA7C1 /* Infallible+Concurrency.swift */, - F7C68D1AD25BE9E3B11FE53E50D39163 /* Infallible+Create.swift */, - 5B96C38EC76CED40A0CD2DDF5B1DB12A /* Infallible+Debug.swift */, - AFCDE5AF3EB4961DEC846A4D7B35E777 /* Infallible+Operators.swift */, - CC62DE620BE171E4861A660B5110C9F4 /* Infallible+Zip+arity.swift */, - D73E24376EF4CAD3A86EF871E59DA6A1 /* InfiniteSequence.swift */, - 8871BF84E79608846B442F26D2DED761 /* InvocableScheduledItem.swift */, - 3BED3A0B0A00EA2FA5675D1740AB8EBD /* InvocableType.swift */, - C71982C9D407CCE05012DF8D73A62516 /* Just.swift */, - E66DA86ED33D4956EA0F327875149B12 /* Lock.swift */, - F7B20090C59B33E3BAD85392BE2A2BF9 /* LockOwnerType.swift */, - 9CECC955C1BC5B80B4C9603E67AF9B13 /* MainScheduler.swift */, - 97A7803B1238FF4874E59DBF1A7ADE7E /* Map.swift */, - 5FD85B1B451A0D803EAE3B5FA0006115 /* Materialize.swift */, - 23BCD448D0D59E19E3DE5D1D80437EB0 /* Maybe.swift */, - E32BDB5F008E014DF2899A52778B0534 /* Merge.swift */, - 91FB2EE0D18C43ED23BA513E80509BEA /* Multicast.swift */, - 84934C95F8FF400D99A7515B8C780AAE /* Never.swift */, - 42B114F0B8206EEAB6F552D7C4F863ED /* NopDisposable.swift */, - 06EE3D85DB7CA93CAA94FA29AE45BFDF /* Observable.swift */, - F78512BDAE7DFEC4E0557ABA5FBC074A /* Observable+Concurrency.swift */, - C2F7D06A790CB3DE1726D6C0C304807A /* ObservableConvertibleType.swift */, - 05B1D3E92EC969DE3979A664DD430938 /* ObservableConvertibleType+Infallible.swift */, - AD4BBD0CD593005DCB8ECA0DEAF875E4 /* ObservableType.swift */, - 5C92449F72A6498CADEADD96E8DC26B9 /* ObservableType+Extensions.swift */, - 5B1E426822FE7CAA3703A573A0281F51 /* ObservableType+PrimitiveSequence.swift */, - EF3C657C177D6F9668EE4037A7757222 /* ObserveOn.swift */, - 01D238240F648EA7EA5C6EBADC6F1FC9 /* ObserverBase.swift */, - 73BD189B4E00DFEAEDCFD2ED648BD5A6 /* ObserverType.swift */, - FEBCF31BB53A7A17C21471A5D93034A1 /* OperationQueueScheduler.swift */, - E4F5EC1C754116115B07C3500772FE8C /* Optional.swift */, - E8DA1971C85095100A5EE182440E27A2 /* Platform.Darwin.swift */, - E2CFE83EA77120219C5AB316D4F80D4D /* Platform.Linux.swift */, - 580691100EB70A5ACF290F17FF4D84F6 /* PrimitiveSequence.swift */, - E1455F488C0E919D87D16AC66AD04C9B /* PrimitiveSequence+Concurrency.swift */, - 04FC9167B623F82556D7A2A397717795 /* PrimitiveSequence+Zip+arity.swift */, - 49053A2947EE78436A16A7AA161489FB /* PriorityQueue.swift */, - 1B4EA8A05D522735104DD7E10130C37B /* Producer.swift */, - 3DA7C83A39038CA118B3CB12DA8280B4 /* PublishSubject.swift */, - 40AA1A10068FA06843F9B866D1548021 /* Queue.swift */, - 164C4FECB95EA7C55B2E7FD4257F2960 /* Range.swift */, - 4A094F4CEA1C525291A1DA9D1530B5BD /* Reactive.swift */, - B99344DA0C98D4C009A4E1AECCDF9459 /* RecursiveLock.swift */, - 3F91D8352B875D35E55568B695E6F368 /* RecursiveScheduler.swift */, - DC59F0F7B131E5DEDB3606A093622755 /* Reduce.swift */, - 433934F1DC56FCF3A68958D44ADBFE90 /* RefCountDisposable.swift */, - ABDF1BFBE98F3670973FDD3336644BFE /* Repeat.swift */, - CAAF2B1865A817D3B34BE0FED63702E8 /* ReplaySubject.swift */, - BBD10C64367048249EB3CCA3A4728FF2 /* RetryWhen.swift */, - 76F771CC8FF3EE94CAD251B016704D2B /* Rx.swift */, - 8EAE8C6CF498E05099DE24B18C3560DD /* RxMutableBox.swift */, - 64475ACC13391CED0E8F1895DFDB3F0E /* Sample.swift */, - CE89B0E952C22E11B64A894D84F8DB83 /* Scan.swift */, - AE5ABD4016BF6AACDBB92D0B961EFB06 /* ScheduledDisposable.swift */, - 37C4D8AE7174BB9A4533DE44B3F11254 /* ScheduledItem.swift */, - EE79DEFA3AD3E0BFEA7198576E92711C /* ScheduledItemType.swift */, - 7CE5A9E99CE471E9A158B19E7DA75F2C /* SchedulerServices+Emulation.swift */, - B403F5A8513C8A0A4EEC0650F17063FB /* SchedulerType.swift */, - 3B1FD911A7C53A5154FB7647CA6EFC70 /* Sequence.swift */, - 2F630C8FCE62218432F68271134AD87F /* SerialDispatchQueueScheduler.swift */, - D8E122838BA266BA2FC542DB6D6CA7FC /* SerialDisposable.swift */, - 0CD8F90D2331966421E416907B75E2FB /* ShareReplayScope.swift */, - B790DFF0E902BF9AE4692A51D0DFC77D /* Single.swift */, - A9B1C90D6A160806DBC532F191101F7B /* SingleAssignmentDisposable.swift */, - 76F5FB9F41D1AC5CB74A20A5F1BCAB11 /* SingleAsync.swift */, - 1C029410FACF307A2410FE68E0C0FBB4 /* Sink.swift */, - 2A4FC0DEB2145AEA826609AB69FE096B /* Skip.swift */, - 094C71050294A146BB656949DAC3B8D6 /* SkipUntil.swift */, - 1C8FFE3A4542A54D17DEA4F0A0654EDE /* SkipWhile.swift */, - 7F1D4C539840D1E04C5FFAAA34A578BC /* StartWith.swift */, - A746BA66E73C424E8AAAA83B4F93FEBB /* SubjectType.swift */, - 50577F76F9EACE83C1F8DB7EEEED065B /* SubscribeOn.swift */, - F425869866B28E3E578068ABC712AA7D /* SubscriptionDisposable.swift */, - 3D9CC311816278CAC539F9972CCF9467 /* SwiftSupport.swift */, - 9FBB552DBF10EEAB3DC15F5C4727EF3D /* Switch.swift */, - 76B335F9C1074A16DC6C649D6F834E5F /* SwitchIfEmpty.swift */, - 22B0FE7857A3947DF75F30B19BA05CBD /* SynchronizedDisposeType.swift */, - 0788BAC406F45A6FC2BF3C22638DAB6C /* SynchronizedOnType.swift */, - 6D432C2ACB4146286EE959013FE5D35A /* SynchronizedUnsubscribeType.swift */, - 0D117580563C690B3B6D37BB9C3A3CEE /* TailRecursiveSink.swift */, - F8DAD8511E44DA440DA3B2E026B7BB11 /* Take.swift */, - 50D8313D8270CA25B860F255BE28A21D /* TakeLast.swift */, - BBC4752255378F245AD160803FB5186D /* TakeWithPredicate.swift */, - F9211F2F8ED853FD416D5AE344C4B2BA /* Throttle.swift */, - 61262011F1BCB5A4C30594748F8200D5 /* Timeout.swift */, - CD572E7B11147DD4A8222AA6C45D15D7 /* Timer.swift */, - B6641FA3ACADA3576F1D309E21FC9447 /* ToArray.swift */, - 30AA8EAC742EC556E68712FF9D8F74D3 /* Using.swift */, - BD1690BEAF90622CE6B9A176205DB662 /* VirtualTimeConverterType.swift */, - 91FDF1CAA6188BB76D061C1A1A292B80 /* VirtualTimeScheduler.swift */, - 64955DB2B6BD9D4B02B1D00905645B96 /* Window.swift */, - EBC3EFE6841863A2FC0E1F280D5E0C18 /* WithLatestFrom.swift */, - 46C3470E48B1D31E09FFD503615D9BB6 /* WithUnretained.swift */, - 3341A7FC89EF4648B74656D78B47F6E2 /* Zip.swift */, - C1C36DF3BE0882BE0A7E5CD447CBEF2B /* Zip+arity.swift */, - BE6F22872D0C90A564CE9655853DB065 /* Zip+Collection.swift */, - 0FEF784F0E246EA0D076701814EF5835 /* Resources */, - 4275D96115AA00916CE1FD010F0ACA4A /* Support Files */, - ); - name = RxSwift; - path = RxSwift; - sourceTree = ""; - }; - 63B6E43D8C8F44FC7FF576C4DACA554F /* Resources */ = { - isa = PBXGroup; - children = ( - B531F280DBAEF942F4FE6A28535EBE76 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 640AC1DE4D70B8B55EFC3769C542ECD1 /* Support Files */ = { - isa = PBXGroup; - children = ( - 4B030D7D5D8F6147979F920E9EDD6CB0 /* IQKeyboardReturnManager.modulemap */, - DC56A5F60C8E478C362670C1A1CA774C /* IQKeyboardReturnManager-dummy.m */, - 0A8CCBE60DB666E1F9638503CEF4375A /* IQKeyboardReturnManager-Info.plist */, - AB564C754205CD3493687FA26FF26303 /* IQKeyboardReturnManager-prefix.pch */, - 9BC42012201F6578E940392397D5E5F8 /* IQKeyboardReturnManager-umbrella.h */, - 46A9779C47951687DB62763E0DD55E55 /* IQKeyboardReturnManager.debug.xcconfig */, - EB451DC015F96BFF40FAA681B9B222BD /* IQKeyboardReturnManager.release.xcconfig */, - D810C9646E8A55330552D3614E8D58E3 /* ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist */, + C6D1A8F44FA7834D7AE24263F75B667B /* IQKeyboardManagerSwift.modulemap */, + ED2169A587A329F11F373D2C50FD832F /* IQKeyboardManagerSwift-dummy.m */, + B68CF9A7198B8A74CD8CB8FDCDC2B8BC /* IQKeyboardManagerSwift-Info.plist */, + CACCF45640195EFFB1603F926C73CFA3 /* IQKeyboardManagerSwift-prefix.pch */, + 852A16226F156C32AEDD3A6649B83421 /* IQKeyboardManagerSwift-umbrella.h */, + 0A9E8211F029EBA42EEEE2CC2901AFBC /* IQKeyboardManagerSwift.debug.xcconfig */, + 01A603880B3B6DF6C5D80FA552A3A479 /* IQKeyboardManagerSwift.release.xcconfig */, + AF49723DC4972AEC4D4BF0627D0F329A /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/IQKeyboardReturnManager"; + path = "../Target Support Files/IQKeyboardManagerSwift"; sourceTree = ""; }; - 664BC4CA91B624D07D74DDCF1A40A63F /* Support Files */ = { + 2D93BC648B5505323C66BB5B12A8A51B /* IQTextView */ = { isa = PBXGroup; children = ( - 8725CA960AAD21EBB246DB58314B33CB /* ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist */, - 7F0F6780D0E884D4DD549CB1A7C14CCA /* RxCocoa.modulemap */, - 294F945132A96401D8BB6AF1EE6285E1 /* RxCocoa-dummy.m */, - 40AB53811E5578E0AAB0E63564BD139D /* RxCocoa-Info.plist */, - 7A63F0A1DA3294431A4B78D09A498914 /* RxCocoa-prefix.pch */, - 309006C332A939D8335F54EDC23F48A6 /* RxCocoa-umbrella.h */, - 74ED30CF01D00C8356D9811523C8FB36 /* RxCocoa.debug.xcconfig */, - BECB67C4910C284EF8C311E0AF7A187D /* RxCocoa.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/RxCocoa"; - sourceTree = ""; - }; - 689E3BC05147113E2447E7EF5DE6ACB7 /* Core */ = { - isa = PBXGroup; - children = ( - BD4ADD434EFB26616EA32E6982267301 /* CLIColor.h */, - CBCF16C1D8B08EBF7F70BEF64DE8914F /* CLIColor.m */, - E70DEF2275BA1DE435D81CA32E5E7FB6 /* CocoaLumberjack.h */, - 8062C80A2CDAA60C796028D49DDD5B04 /* DDAbstractDatabaseLogger.h */, - 8EF5D80D80065619CED3075AD992270A /* DDAbstractDatabaseLogger.m */, - DC26BBCF312733BE82EE83250C2C92A3 /* DDASLLogCapture.h */, - A9717FEB35D2D2F9A59EC9D64C1C3CAE /* DDASLLogCapture.m */, - 779A45EE4D8A55285225137A022FF947 /* DDASLLogger.h */, - 80A87EEF8234577813707C2B05EA16DC /* DDASLLogger.m */, - 7E04BB4D8359BD5A95AAD8B56BFE57B6 /* DDAssertMacros.h */, - 4C27FEE1D4334F4976A5F419C24858EB /* DDContextFilterLogFormatter.h */, - CAE3B4042285FE77961E90A1CFBB8D5B /* DDContextFilterLogFormatter.m */, - 959731C5E318724CF5BC5D4444F684D1 /* DDContextFilterLogFormatter+Deprecated.h */, - 6EE4B63201F50240A5E467DFB9D59047 /* DDContextFilterLogFormatter+Deprecated.m */, - 33E53F7946D28A4A15CE8D0B0AF85E2C /* DDDispatchQueueLogFormatter.h */, - 5D7C53CFA21D0B65B5810275F9B1B2F4 /* DDDispatchQueueLogFormatter.m */, - 52E0374CED5B77EA1A9488888C3A901E /* DDFileLogger.h */, - CB04A3F038AB5357DF6579E119AC574D /* DDFileLogger.m */, - 02295F2192B333D5143DEA4CAEEBEAEE /* DDFileLogger+Buffering.h */, - 7CCC9D719AB7E41B97FDF91B409B1579 /* DDFileLogger+Buffering.m */, - 1FC105F4B4286E65A9A821818A51A5FB /* DDFileLogger+Internal.h */, - E0DFBFFC4098538E3CF30773ABBD972C /* DDLegacyMacros.h */, - A7B95A9E68D6B1BFC0187CCA4BC88B13 /* DDLog.h */, - 5481AA91905207DFC89661643C0EFD89 /* DDLog.m */, - 8FFDD175562EA9E04F00CB58EBF9A6D7 /* DDLog+LOGV.h */, - 28504FCCD451928D39B76F37745A0206 /* DDLoggerNames.h */, - 8071246364071191EF7E463371025B98 /* DDLoggerNames.m */, - 384D8E218EB66167C5F83EADB6F99879 /* DDLogMacros.h */, - 661FEE91FA7BA21B21CE0C49E062F54B /* DDMultiFormatter.h */, - 3E17ECF721B2913CE636674C037654C6 /* DDMultiFormatter.m */, - A63CABC0DE1372702B329D3C31A8F207 /* DDOSLogger.h */, - 12EE9646A1EE8B5F4F5EABA208A9045D /* DDOSLogger.m */, - A3F2F6B8CB2B809BBF697237FB094086 /* DDTTYLogger.h */, - 82DA9A393789D615C04307DCC37C663F /* DDTTYLogger.m */, - 579600557A8818FE806DB3940CD84BE1 /* Resources */, - ); - name = Core; - sourceTree = ""; - }; - 68A769A6E27CDF42F6D607017780F5D6 /* MJRefresh */ = { - isa = PBXGroup; - children = ( - 22363CA9E38F55410E8D888D617320B3 /* MJRefresh.h */, - 01A81FDDCFBF4399353832963143DC0B /* MJRefreshAutoFooter.h */, - C62129F292FE4AAAD3B0854D292C8412 /* MJRefreshAutoFooter.m */, - E97AC31A9AC2AFCB0774AC162D89D243 /* MJRefreshAutoGifFooter.h */, - 4E2DA31BB5B71385C2113C242EC8B930 /* MJRefreshAutoGifFooter.m */, - 6675C0D3C3E1B217343679BB2C28AF0F /* MJRefreshAutoNormalFooter.h */, - A2333B9AC870862E2D29C8F94BF1F89A /* MJRefreshAutoNormalFooter.m */, - D6C77430014C62956E5C73E7FC9DBD96 /* MJRefreshAutoStateFooter.h */, - 65CE898D2BC17EA493AD82D9EBA94F4E /* MJRefreshAutoStateFooter.m */, - DBD2F1627A06A8B9964D885414ACF5C5 /* MJRefreshBackFooter.h */, - 3B194370CEEC58191F152D61913EAED0 /* MJRefreshBackFooter.m */, - EC5B534FF1A78D5C2AC189C51939C944 /* MJRefreshBackGifFooter.h */, - 4D15A1A1C3D45C5DBC427A6AA27A1645 /* MJRefreshBackGifFooter.m */, - 456E97C9FEB89B1B0A86B831368F12E0 /* MJRefreshBackNormalFooter.h */, - 95FBC83924660AF9550D968A6631AD5A /* MJRefreshBackNormalFooter.m */, - 62F44A98B2397C9F6E5B8CFED65CE453 /* MJRefreshBackStateFooter.h */, - FD486E62809B39EA2FAE17E7977B3C8B /* MJRefreshBackStateFooter.m */, - C59EC7A1C6159115643B175BCBF65033 /* MJRefreshComponent.h */, - FFC1B522A7D474FA4DAA6C62A6BEFB3D /* MJRefreshComponent.m */, - 7A5CF121F3B617D5C4A09D9BDD4D5011 /* MJRefreshConfig.h */, - 2F523AE274FF96B23B5AE0188D46239B /* MJRefreshConfig.m */, - 71DF2431E6CA3D1CAA83A2C349EEFD5D /* MJRefreshConst.h */, - 84F2C96DF432D64FEF247DDD154D10AB /* MJRefreshConst.m */, - EB19BE65B98A0E3ED0F4558833C481CC /* MJRefreshFooter.h */, - C6F4420A9FB2F691DC1A5C98FBAD4EB4 /* MJRefreshFooter.m */, - D86F8CB933244DB4129321F3F634F3F6 /* MJRefreshGifHeader.h */, - 1E168DF5E47CB8A301BCB3993A623844 /* MJRefreshGifHeader.m */, - 7D2727537199FB03475AF85FAF421215 /* MJRefreshHeader.h */, - D09EEE16CE8246F2F7548E87067C664C /* MJRefreshHeader.m */, - 09772666C0AEFD8BB25B0463F2F3934F /* MJRefreshNormalHeader.h */, - E335BCACA8215B4F832B6972CE0B45A4 /* MJRefreshNormalHeader.m */, - BF48EC27DD64ECC464ACB1471E51E2EB /* MJRefreshNormalTrailer.h */, - 9C6F8597CB530F782630CE04406C2C19 /* MJRefreshNormalTrailer.m */, - 64B047E4298457A88A20E186EB03E519 /* MJRefreshStateHeader.h */, - E1470F23022327507435AC5D5E2E0048 /* MJRefreshStateHeader.m */, - 647F3A21C303D1F7A42AF9434D203869 /* MJRefreshStateTrailer.h */, - 3AED09C9DE5A12779617977F55045734 /* MJRefreshStateTrailer.m */, - 1EE98E60968603D5FA63AA72697BD268 /* MJRefreshTrailer.h */, - B68BC94B42D3E5F9AD397EA16BE5DD3A /* MJRefreshTrailer.m */, - 956D08303C546C8822DB0DCBD148CF06 /* NSBundle+MJRefresh.h */, - D3DF20CFF93070089A3F83A2130C4121 /* NSBundle+MJRefresh.m */, - 27E55D0F439ED92B9740583CD3291EC1 /* UICollectionViewLayout+MJRefresh.h */, - 8F9DAB514C5BF79351540417F249261B /* UICollectionViewLayout+MJRefresh.m */, - D27C029A21462E439909BC6A1460A0D3 /* UIScrollView+MJExtension.h */, - ECDCA6BEAFD67BE73F5C9BDE8C1B4D50 /* UIScrollView+MJExtension.m */, - B15D37276FF9888DD3E00DD6F5196E38 /* UIScrollView+MJRefresh.h */, - 62991FC09198149F6AADD3A172559A80 /* UIScrollView+MJRefresh.m */, - 45AEBEE9E3F79E4CDD32A46B927067A9 /* UIView+MJExtension.h */, - D7B4BE25B675D9E62A4F73B632D2FA4E /* UIView+MJExtension.m */, - 1A9319BF8FA8992A9F1BE19B24A88C2B /* Resources */, - EB2539048E7BDC98365D91AB0A1E942E /* Support Files */, - ); - name = MJRefresh; - path = MJRefresh; - sourceTree = ""; - }; - 6B08B74A389EBF7A9C550C3097EC1C9B /* KingfisherWebP */ = { - isa = PBXGroup; - children = ( - D477BCCAE115C780D1F45A92E5F3BE15 /* CGImage+WebP.h */, - 2F6640032ED9681A09BA524C5F3EECC6 /* CGImage+WebP.m */, - 17B31F06E373829C72507245A444656C /* Image+WebP.swift */, - 6AC42ACAF533936A9C6D02A3B360662A /* KingfisherWebP.h */, - 3B254E7B7EBE8EE0B7A1BB6FEDE08103 /* WebPProcessor.swift */, - 045476BD81F43A7E4D35CFDD204660D7 /* WebPSerializer.swift */, - 1478CB67C405C2641DB2E3E2AB7A31B1 /* Support Files */, - ); - name = KingfisherWebP; - path = KingfisherWebP; - sourceTree = ""; - }; - 6B80073677AE375026360827C4C7760C /* RxCocoa */ = { - isa = PBXGroup; - children = ( - 75AB146FA8EACB2D7B8898EDB3F75A16 /* _RX.h */, - A70960A456CC7B878B6BE0A13B941DBE /* _RX.m */, - 88004E06395845BEC822BA9C445BA387 /* _RXDelegateProxy.h */, - 0E299BEB764B9A1DEC98EA66D620ACA5 /* _RXDelegateProxy.m */, - A96C05B637BDA477BEE511BDBAF925FE /* _RXKVOObserver.h */, - C3DC42E9BB7BC32F274FCDB40EC61371 /* _RXKVOObserver.m */, - 0BB2D04A41EC4109E190F3E4A1309236 /* _RXObjCRuntime.h */, - 4606C2115D48BBA83BE7F9CC386AB737 /* _RXObjCRuntime.m */, - 3CC8BB6787C7BA9EA081B229A0B0AB07 /* Bag.swift */, - D862D8002783A98CA4298CD944721078 /* BehaviorRelay+Driver.swift */, - 57ECE45D936904EF5023F94ACECA8520 /* ControlEvent.swift */, - 65D71891D845159664180BE4751EE547 /* ControlEvent+Driver.swift */, - D3CB5318B015CED596B8976F167CB700 /* ControlEvent+Signal.swift */, - DA420F3649A7C98C2CEB39098100D80B /* ControlProperty.swift */, - CAC75994F054E5C98A812D17C7527B6E /* ControlProperty+Driver.swift */, - 1DEC4D97314748FED89C51384E90F8BB /* ControlTarget.swift */, - D16E2301CBCEED8AA04536AFC22CE901 /* DelegateProxy.swift */, - 9E519B15CCB12F735F0129579FF286E3 /* DelegateProxyType.swift */, - 43601022A470E6D853FE16759BDC655E /* DispatchQueue+Extensions.swift */, - 25C66D833F862144506D82243BC20CBC /* Driver.swift */, - 74E963FDBB2A72AA3EB7D60BB0724666 /* Driver+Subscription.swift */, - 9D5ECA710EB149367627C0ECCCD88F67 /* Infallible+Bind.swift */, - FAE83CBDB804481CBE1626600EB92085 /* Infallible+Driver.swift */, - 2D6F3E223EDDA7BB3F9C466B9984E79C /* InfiniteSequence.swift */, - 709352A78011CC2D4BE14AD43BFD8505 /* ItemEvents.swift */, - 6A737601D8BFA149FD0B9B4EA32208D4 /* KVORepresentable.swift */, - 8F139EC6DC9A823AD2A7358AE25AA685 /* KVORepresentable+CoreGraphics.swift */, - 3F8733BFF5C1688EA0DA6F27C8A71E52 /* KVORepresentable+Swift.swift */, - 2A33292F139F4D03763C451D174D6627 /* NotificationCenter+Rx.swift */, - FCD3A21323E36012C189C0952F31DAE8 /* NSButton+Rx.swift */, - F31120DF2E5C142AB737BF64F301D994 /* NSControl+Rx.swift */, - 22ADD96CD00B989B7126ACA192406A98 /* NSObject+Rx.swift */, - 9EB164560DE3677F1DA177D4DC5B5447 /* NSObject+Rx+KVORepresentable.swift */, - DF9583AFB17055B420C08DE15E843EE4 /* NSObject+Rx+RawRepresentable.swift */, - 07082B8A4C4290E5D4C81099E14B1045 /* NSSlider+Rx.swift */, - 160A8AF75E876201D8C20CE7C39BEC82 /* NSTextField+Rx.swift */, - 3C30CD98BDFEAFA1281C881CB316CD95 /* NSTextStorage+Rx.swift */, - 5E2D9445ABDD01E2EAF6BCF2874BCAB2 /* NSTextView+Rx.swift */, - 0FD8E3AD2D74BE680D34541310F348A2 /* NSView+Rx.swift */, - AF349643C3A63B3C5D763016F77EF7F5 /* Observable+Bind.swift */, - E535975A1E831BDA5977960E97506533 /* ObservableConvertibleType+Driver.swift */, - 896804512E5A54D3F12A3A1AE837AD8B /* ObservableConvertibleType+SharedSequence.swift */, - F3898027613E6C50E0078414D3DF1BE7 /* ObservableConvertibleType+Signal.swift */, - C2E26E78C920199D48C95A6E28FC1791 /* Platform.Darwin.swift */, - 40B3777A774404758AB6FCB677DE0654 /* Platform.Linux.swift */, - C9DCB3383235EDBA4F3C971A96B27409 /* PriorityQueue.swift */, - 40F6DF23FC61D59800559E8381531BC1 /* PublishRelay+Signal.swift */, - F02E19AB613C5B9E4A3BC77C82DD4D93 /* Queue.swift */, - 21AA7EE52A3DAD218EF3EAB7703979AB /* RecursiveLock.swift */, - E33CB738E9BEF4C5E064BEB48D7C52D1 /* RxCocoa.h */, - F1B1B6D7D2E92F184F846249072A1E0F /* RxCocoa.swift */, - 8A5BAB2182C418AA259E530EC867EDDB /* RxCocoaObjCRuntimeError+Extensions.swift */, - 631D1F2FC1CAC25B4FC1DC7C9550FC6B /* RxCocoaRuntime.h */, - 5F09681D932FC2A10A110AE909ACFCC0 /* RxCollectionViewDataSourcePrefetchingProxy.swift */, - 01AEFB1EB3A914C86593584A77C0FA77 /* RxCollectionViewDataSourceProxy.swift */, - 7D50688D55F92F226672A561EA59EFC4 /* RxCollectionViewDataSourceType.swift */, - 6E5634D8FC150EAF451F26D4D2ACDD62 /* RxCollectionViewDelegateProxy.swift */, - E030B9BDBBA82F74D1F392D96C6B1A31 /* RxCollectionViewReactiveArrayDataSource.swift */, - 9CCA7A792E4A6A2B6109301CC66A69A9 /* RxNavigationControllerDelegateProxy.swift */, - A2AAA811CAAF000CD5110DE8E1FF8B85 /* RxPickerViewAdapter.swift */, - 37195C83073D00C327F9B6C8E49E6096 /* RxPickerViewDataSourceProxy.swift */, - 08050C89BDBFDA62A3F6EF30F6743FD6 /* RxPickerViewDataSourceType.swift */, - 2C6E0BBACCC2ABD7E1753510C4D994B7 /* RxPickerViewDelegateProxy.swift */, - 1FD460C65311A9B6AD426570D30A2EDE /* RxScrollViewDelegateProxy.swift */, - C508E91145FD5398716837106BE87EED /* RxSearchBarDelegateProxy.swift */, - 2778EBCEEC14C4833D44342D5C11AD81 /* RxSearchControllerDelegateProxy.swift */, - 7D915E50F6FCDF1F827027D737E68CB8 /* RxTabBarControllerDelegateProxy.swift */, - C88A87AA6AF553A2EB67FF48CC974717 /* RxTabBarDelegateProxy.swift */, - EE9E03A2577727310935A5A9E4A2B30B /* RxTableViewDataSourcePrefetchingProxy.swift */, - C78AE96DEEB3AE3D220D176418FF4438 /* RxTableViewDataSourceProxy.swift */, - E717BD781EB091185A79C355C520A67A /* RxTableViewDataSourceType.swift */, - EC839CBDE62FBDF1FB0A9B6E583E159C /* RxTableViewDelegateProxy.swift */, - CB06F3844E78B224186730DD60CA0865 /* RxTableViewReactiveArrayDataSource.swift */, - 059A00052A1FE8803E236797E5854769 /* RxTarget.swift */, - A28212BF67021DCC567895F90F42F3B3 /* RxTextStorageDelegateProxy.swift */, - 93EB8108EBFD809D4BA7DD0D01AC8F2F /* RxTextViewDelegateProxy.swift */, - E5000C74964362967707C8378D889444 /* RxWKNavigationDelegateProxy.swift */, - 92F5E3708E512F20F2F3931DF742408D /* SchedulerType+SharedSequence.swift */, - 38CA5BA20DA63D05E0C03D744AEB70E8 /* SectionedViewDataSourceType.swift */, - 5437C08DBD79B497818F7354E847A2DD /* SharedSequence.swift */, - 006D228E2E6F8BAA07DB7CE17AB8A953 /* SharedSequence+Concurrency.swift */, - 7AD087C00AE0A2CB66E870C10681C588 /* SharedSequence+Operators.swift */, - 1E76BF6D7E4423019EBAB88941DBFA91 /* SharedSequence+Operators+arity.swift */, - 8217A6F4149F4322FC3BFDAF3B20D784 /* Signal.swift */, - D63215EDBB31AA1C7927001384586CCD /* Signal+Subscription.swift */, - E37A739569DBBD3BECE189F4986936E1 /* TextInput.swift */, - 4E167799FA0AC9BA04FEF298D51921F2 /* UIActivityIndicatorView+Rx.swift */, - B5C77BBEF52E60A948A676A9BDB60109 /* UIApplication+Rx.swift */, - 08B73798103120C7A3AF0D936520F1C0 /* UIBarButtonItem+Rx.swift */, - 2ADF97EACA948B2C7006B53AEB1FEF8E /* UIButton+Rx.swift */, - E4C25CF77476705A8727ED57006FDCA2 /* UICollectionView+Rx.swift */, - F4F73FE9E51AC36245FC54A1CFE8E872 /* UIControl+Rx.swift */, - 6ADFC7217C94A6A33AADBE2C889E258A /* UIDatePicker+Rx.swift */, - 3371BF35BC76F7D9FEB483B31F4A8082 /* UIGestureRecognizer+Rx.swift */, - 41249D28A0A1532043F7069D1A9E3DEB /* UINavigationController+Rx.swift */, - 27137F8A01D16088D332E2DBCE90D361 /* UIPickerView+Rx.swift */, - 356B08F72A46EBDA220703321CE1814C /* UIRefreshControl+Rx.swift */, - BA95F4A4BFFFE59FACF449B9D2D50CE3 /* UIScrollView+Rx.swift */, - D2596C6DAC2A8B615E67D865765BA5EB /* UISearchBar+Rx.swift */, - 763E77216C850D70057D326B4A6BA473 /* UISearchController+Rx.swift */, - 0A86E5B1317FA3F4A9D3EC10B4842235 /* UISegmentedControl+Rx.swift */, - 2D48CB3120F622B1DC4E9B3AF51D0A7F /* UISlider+Rx.swift */, - E66C33D1549606616E2570F9CA08627C /* UIStepper+Rx.swift */, - 83CB43A9B03D8918FD5DE9A913C744DE /* UISwitch+Rx.swift */, - C08DCD50DDA4F71C414AA7077CC96A96 /* UITabBar+Rx.swift */, - 0B4B93F368A61449309541689291E7CE /* UITabBarController+Rx.swift */, - F3911F180E1B0182AC1A84D0FE3E4A4B /* UITableView+Rx.swift */, - 30EC231840F6732A56ACD926EEC9A53D /* UITextField+Rx.swift */, - 2DB8DC9169D71A0D31807029AF82F168 /* UITextView+Rx.swift */, - B9813C135DE125969EAF42F73CC20580 /* URLSession+Rx.swift */, - 4FD48EA2FBFB0058F98D944DAAEBE7C6 /* WKWebView+Rx.swift */, - CAAC540835A8357860D729CE16909F61 /* Resources */, - 664BC4CA91B624D07D74DDCF1A40A63F /* Support Files */, - ); - name = RxCocoa; - path = RxCocoa; - sourceTree = ""; - }; - 6F410325126C659B7B795978916FCE77 /* ZXSDK */ = { - isa = PBXGroup; - children = ( - 4837C1DDFDECF77E1AAA1C217E746E6C /* Frameworks */, - 4488B0D9649AF3F5F70FA1186039A325 /* Support Files */, - ); - name = ZXSDK; - path = ZXSDK; - sourceTree = ""; - }; - 723AA820749703E5B4ECDBB6CADA36D4 /* Resources */ = { - isa = PBXGroup; - children = ( - 02DBF5316B8E0D522ACE204CE91F2E5C /* HXPHPicker.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 72B22C1993413CD79F77C6ECE7A6B83B /* Support Files */ = { - isa = PBXGroup; - children = ( - 8197324FD9D31411E29F1E332EA7C8CB /* Kingfisher.modulemap */, - AE5897611BC8BD2C214F2E90A0320833 /* Kingfisher-dummy.m */, - 63708D0683405A5887D1A15D39151805 /* Kingfisher-Info.plist */, - FA40714E188DAF7577D23D2408907AA0 /* Kingfisher-prefix.pch */, - F579D560A7BAEC27AA799B2A5CD1BBD3 /* Kingfisher-umbrella.h */, - D42F775E38DE1A545F3B25BD8738ACF2 /* Kingfisher.debug.xcconfig */, - 3BBC561B29ED22D84456A56B25487B1A /* Kingfisher.release.xcconfig */, - C858A960686949F3A01BB1D7772ED340 /* ResourceBundle-Kingfisher-Kingfisher-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/Kingfisher"; - sourceTree = ""; - }; - 77CF13DDDF26C9E4E6E4540F1931B8F2 /* Support Files */ = { - isa = PBXGroup; - children = ( - BB941175FCDE56397887345BB6BCE206 /* SwiftDate.modulemap */, - 10714B805F30205FBFC798B49F7ED8AA /* SwiftDate-dummy.m */, - 2D91FA48911FBC42CEFF73EEF6FBC3B2 /* SwiftDate-Info.plist */, - A8386269616E7CE007CD245147A27BFC /* SwiftDate-prefix.pch */, - AEA189D9B360430E513572847E80BFA3 /* SwiftDate-umbrella.h */, - 629DDBA66E3F48E13DC130A55605CE82 /* SwiftDate.debug.xcconfig */, - 371C690B36365A3FC898E515449C2217 /* SwiftDate.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftDate"; - sourceTree = ""; - }; - 78842ADE4139DB0C6164E6B45B78B68C /* libwebp */ = { - isa = PBXGroup; - children = ( - 88D6000676162DC4F9A3C2561824054A /* demux */, - 183806F986FA7C7B9F4550202167A862 /* mux */, - C151664422ED2B379152732AAA6C657A /* sharpyuv */, - 4F89238B91B8EC63E038E27A33985BD5 /* Support Files */, - 0458EA2C95930A3C12D6D36B3393A7B6 /* webp */, - ); - name = libwebp; - path = libwebp; - sourceTree = ""; - }; - 7934D0783F27321D51283B05E5DE6025 /* Core */ = { - isa = PBXGroup; - children = ( - 3DC2D83167741CC204B2EC3E267BCF7E /* AppearanceStyle.swift */, - 7736D9652CE71234ABED55D62ADBD35F /* AssetManager.swift */, - 0FA7A535E34304FEB795FCB634375C02 /* AssetManager+Asset.swift */, - 87C0F85799A80C00E166826442DB6D27 /* AssetManager+AssetCollection.swift */, - 51F0C1F7C00691BEF0CFA4F31C54FF3A /* AssetManager+Authorization.swift */, - 11BF0F782E6A624EBD13466CED287C49 /* AssetManager+AVAsset.swift */, - E42FFE14BC42749A348DCFC03CFCB2BF /* AssetManager+AVAssetExportSession.swift */, - 428BD599C962D9E479FAFFBC60859CF5 /* AssetManager+Image.swift */, - 9F2F63F0B03B6BFA25E6C141689BD633 /* AssetManager+ImageData.swift */, - 20A1B6CDC1CCF4DEFD740A6FF78D001B /* AssetManager+ImageURL.swift */, - 6DAF66AF9A10C8CE260ACFC74496E828 /* AssetManager+LivePhoto.swift */, - 18BD4A98815CF19CEF256B8951CB1B21 /* AssetManager+LivePhotoURL.swift */, - 4A2B506E2416B5C91B799DFE0B69F278 /* AssetManager+VideoURL.swift */, - 3189E630103A74A0218C59894B1E16A8 /* BaseConfiguration.swift */, - B05BAD2FED8BCAA8BC346D23A2E4C934 /* BaseViewController.swift */, - D867D1C31B709009EFE974B0553F9D9D /* Core+Bundle.swift */, - 33ED4054AFA9102DE2DFF8413FBF3767 /* Core+CALayer.swift */, - 0B622AEF7B6E9C360D0C962D5A346AF5 /* Core+Data.swift */, - 00666232685340897FBF612CDC76B348 /* Core+Dictionary.swift */, - 89A5CE11CC57889F540004F21A563342 /* Core+DispatchQueue.swift */, - 2109F7F661446DA12643DCACFF4078C0 /* Core+PHAsset.swift */, - 89D6F4F353F9668ECBCBFBCFF03BAB81 /* Core+PHAssetCollection.swift */, - 113A6CE4C212D09BCD02D88EBC5EACC6 /* Core+String.swift */, - F26CC0BC63B38EDBC22273E9C0D67DF2 /* Core+UIColor.swift */, - 67BB983FB1DF61CE58E767CA5AACA670 /* Core+UIDevice.swift */, - 7C262EC7FE9B7C5853A9BF656E7B4C31 /* Core+UIFont.swift */, - C5E097351E3CA0442F19440EBE19E5E6 /* Core+UIImage.swift */, - C4D0E6975AA68BF82B50479B31188714 /* Core+UIImageView.swift */, - CCA5382951AE75A98792835CE4E99624 /* Core+UIView.swift */, - 7D32944BBFF391634E35F8A5B7F4936F /* Core+URL.swift */, - B8EA635F6E6ACFAAD23856120F08C7CD /* CustomLanguage.swift */, - 9949D2F039C26335E06B4DEDB869C47F /* HXPHPicker.swift */, - BB8B31FB69DD6EE93331C2441B9893E8 /* ImageContentType.swift */, - C30ECEB47A30F096C7A11DAFC977D503 /* LanguageType.swift */, - 9C247ABAB37F0C054419181BFC3D3E7E /* LivePhotoError.swift */, - 6D82AA88B834BBF20D1151E382DE67AF /* PhotoError.swift */, - 53EE3FDC6BBE60EB6D5FD6C0201E710A /* PhotoManager.swift */, - 0F8918760B6BA08970F8004ED7AA6FE4 /* PhotoManager+Audio.swift */, - A41EF41F02941532EE13C414E23DEEDD /* PhotoManager+Download.swift */, - E8223C1F95FE293B35A7BBCB5B6B8125 /* PhotoManager+Language.swift */, - B4C4498E7B172BF948777253F5FFCC9A /* PhotoPanGestureRecognizer.swift */, - FE0F2F0A1C318B0FFFF4DFE36D1A69C5 /* PhotoTools.swift */, - 606B36089216BA9AAA95CC158D76FE49 /* PhotoTools+File.swift */, - 6A87581B2556DBA6F40B051DD8E340A1 /* ProgressHUD.swift */, - 4559C34E42D4D2C64A174AA002B8056D /* ProgressImageView.swift */, - F8806095ACB64222B262665284764BEA /* SelectBoxConfiguration.swift */, - F45B5F359E982E067E2109249A8B0784 /* SelectBoxView.swift */, - 0B237C461DD75E2FE67F4D105C480806 /* VideoPlayerView.swift */, - 723AA820749703E5B4ECDBB6CADA36D4 /* Resources */, - ); - name = Core; - sourceTree = ""; - }; - 7A5773BE75C2857E4292FEA4F45F9E2D /* AMapFoundation */ = { - isa = PBXGroup; - children = ( - C4E134D68D9A3EA6BAA45CBBF86E6282 /* AMapFoundationConst.h */, - 9D25EE96F04C43612DF2FA22177EB0C8 /* AMapFoundationKit.h */, - FB5201BBE183A50F11FA42CA44512700 /* AMapFoundationVersion.h */, - A30602900EAAC1E60D74FCEEB0960916 /* AMapServices.h */, - C65141CFE1CE7172EBF4F892518DA710 /* AMapURLSearch.h */, - B325C9D59F8810A27BA690853116611E /* AMapURLSearchConfig.h */, - 89FEA5369C0F85B6777E7EBA3581AD4F /* AMapURLSearchType.h */, - 22F84748D6A7D4D5AC3266CA17FFD1F5 /* AMapUtility.h */, - C3FE2D90C8E110F594860B41820D7378 /* Frameworks */, - BDA6A1204DF782A42F3B6D09ADE73685 /* Support Files */, - ); - name = AMapFoundation; - path = AMapFoundation; - sourceTree = ""; - }; - 7B1FDE28B5BF6553429E7FC2CFAB3163 /* Support Files */ = { - isa = PBXGroup; - children = ( - E1242A1113F84D2391549B66530C0607 /* SDCycleScrollView.modulemap */, - 62416DA404529EE5F12AC66820968A42 /* SDCycleScrollView-dummy.m */, - AAF22B492F23B4CFC20A5E24D1E91905 /* SDCycleScrollView-Info.plist */, - F2FE218377A0EBA6929F45324DA24C6E /* SDCycleScrollView-prefix.pch */, - 0E058257A7D0F02E7FB8985089EEC6E1 /* SDCycleScrollView-umbrella.h */, - 633767D8A7162E8C39BFE4FE885F0056 /* SDCycleScrollView.debug.xcconfig */, - 260BDB88A25661D414D0FB98126D2229 /* SDCycleScrollView.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SDCycleScrollView"; - sourceTree = ""; - }; - 81191C65D2D480F4497CBD765FC7846C /* OpenIMSDKCore */ = { - isa = PBXGroup; - children = ( - FB8F2C6262E7A6E43D78BD8E5D73242E /* Frameworks */, - AFBCE2F3AA1D1F90131DD2F8C66B49FB /* Support Files */, - ); - name = OpenIMSDKCore; - path = OpenIMSDKCore; - sourceTree = ""; - }; - 82E03FC2739088B6695017EFFF339F6D /* Support Files */ = { - isa = PBXGroup; - children = ( - BFCCD0770B0B62C74DEABE252BBED5F0 /* Popover.modulemap */, - B555B1099D99D8615619FD3085B9D500 /* Popover-dummy.m */, - 9A866A6512ACC69E4827C91B2C8E59B7 /* Popover-Info.plist */, - 1DB22D2FDDF12C37CFAA13FB3428AEAA /* Popover-prefix.pch */, - 67C09087FD721CE9595DAF45BC6B7889 /* Popover-umbrella.h */, - 0791E218AD38A3E5DB7DCC82469F2282 /* Popover.debug.xcconfig */, - B707AC802004219EE1A38C0A808B3868 /* Popover.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Popover"; - sourceTree = ""; - }; - 82F85F900EBAB66976B458FBAC8F5FCA /* IQKeyboardToolbar */ = { - isa = PBXGroup; - children = ( - 43DDE9F3971026A744DF261023296BCF /* Core */, - E5B87255883FF2491827C25D20AA6E24 /* Placeholderable */, - 0CCE8BF40D7BE148BB02E87A8F5C70D2 /* Resources */, - 58AEBDEE0FD26AA73906FD316397D0D1 /* Support Files */, - ); - name = IQKeyboardToolbar; - path = IQKeyboardToolbar; - sourceTree = ""; - }; - 83B29528EBBC1B3DADDA36F2BF191859 /* Support Files */ = { - isa = PBXGroup; - children = ( - B7D3C9EA9DED95F21EDE81DBA946AD04 /* IQKeyboardNotification.modulemap */, - 17C56352D67E8BCA827335C748E6BF1E /* IQKeyboardNotification-dummy.m */, - BA806823EA6D7514C7FEFBA0844C8247 /* IQKeyboardNotification-Info.plist */, - 2C321D034B37C49F688AD559C13A62F5 /* IQKeyboardNotification-prefix.pch */, - 14ECA25FAC580BEAD24A7591921B4905 /* IQKeyboardNotification-umbrella.h */, - 92F1C3BA22F62F1CFB1DE61364BA3A00 /* IQKeyboardNotification.debug.xcconfig */, - 4ED0F1D4E099A8871122580C0CEA500F /* IQKeyboardNotification.release.xcconfig */, - 48A8FEED501EFD1067CE5D1499B5B075 /* ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardNotification"; - sourceTree = ""; - }; - 840CD23F46524B69F4F4B6D47FB84919 /* IQTextView */ = { - isa = PBXGroup; - children = ( - 13248AF2B1E920AB3B30184BB73FE587 /* IQTextView.swift */, - A67326A62BBF7678EA70AC35CB159929 /* IQTextView+Placeholderable.swift */, - 2E7EB23330599E9FB94E7FBFF85F9A04 /* Resources */, - B2401A54F181E6C8E86B7C97C40BD5F9 /* Support Files */, + BF134D80E9619348A65BBB751BB70BBF /* IQTextView.swift */, + 71CEC01D5366F1D7433565AE23908319 /* IQTextView+Placeholderable.swift */, + 601F16286C6703F7EABF8CB64188C787 /* Resources */, + D2E9E39DE97ED52C6B25E9FDD6EE9957 /* Support Files */, ); name = IQTextView; path = IQTextView; sourceTree = ""; }; - 875EAE81E1A431FDF6BB486F0E3129A2 /* Core */ = { + 316732A829FFB7D66D03CE6DFE701470 /* HXPHPicker */ = { isa = PBXGroup; children = ( - 6BF72E2AF2147FA1AAC4682FE8CD2024 /* IQActiveConfiguration.swift */, - 655F16E86C5BE41F3D3568111B89F78B /* IQKeyboardManager.swift */, - BE7291A0D9ED471F9754D1FD9D58F0F4 /* IQKeyboardManager+ActiveConfiguration.swift */, - AE2806152713FE09C2CB6AA76C33BD73 /* IQKeyboardManager+Debug.swift */, - 6B5A3802C70E5FFA3157414C2F2DD188 /* IQKeyboardManager+Deprecated.swift */, - EF44BFBC7F4569C26187AEBF6FB9202E /* IQKeyboardManager+Internal.swift */, - EFAFFED0F09E8D30612FFC64F749D3BA /* IQKeyboardManager+Position.swift */, - F1CBC6FE30779E662A20B0F6FB6BF989 /* IQRootControllerConfiguration.swift */, - 34C85D236A09B50BBAE08B7FB20C1142 /* IQScrollViewConfiguration.swift */, - AB3AF5015C0B68FB788983C3D31F518B /* UICollectionView+IndexPaths.swift */, - CB1D91FC1AD6D99D86E78F301E3C0948 /* UIScrollView+IQKeyboardManagerExtension.swift */, - 0A728065D0A8D6804B2901F182770F32 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */, - AADD4B026F6027AF572D51A25BD61D10 /* UITableView+IndexPaths.swift */, - F6938529B4FFE728CE76E763A02DB60F /* UIView+IQKeyboardManagerExtension.swift */, - 81B6E91C3E6BDDC7B05E43C0052936B6 /* UIView+IQKeyboardManagerExtensionObjc.swift */, - F458BC861920FABA639310941239FD72 /* UIView+Parent.swift */, - 2C298B2A388307DD5D979FAA27BF366A /* UIView+ParentObjc.swift */, - EB04F626FFD85B894E25E3C7C4001505 /* UIViewController+ParentContainer.swift */, - ); - name = Core; - sourceTree = ""; - }; - 88D6000676162DC4F9A3C2561824054A /* demux */ = { - isa = PBXGroup; - children = ( - 223F157AF2FE64BA22ABDDB993DFB6C2 /* anim_decode.c */, - 9FB522F4C7C47BA527C5E509E78B4350 /* demux.c */, - B9394C0414AC1F9427C4E7C0BC1863ED /* demux.h */, - ); - name = demux; - sourceTree = ""; - }; - 8A848EB67D0A89E7BC70198D9A75F857 /* IQKeyboardToolbarManager */ = { - isa = PBXGroup; - children = ( - 5AED70B7B68386C79189CD6256E14B99 /* Array+Sort.swift */, - ADE1736DF811673FB2909732A3F3BF40 /* IQDeepResponderContainerView.swift */, - C218ADBB9ED9BCB5794960F550704D52 /* IQKeyboardToolbarConfiguration.swift */, - 1D587347C55CFBF02E2405496E4C19F1 /* IQKeyboardToolbarConstants.swift */, - 66FE82E0510BC72FAD7C76AD60B9E90D /* IQKeyboardToolbarManager.swift */, - 1413AD37773953D3ABCC8A24322AAB02 /* IQKeyboardToolbarManager+Action.swift */, - 67E2AB0EB78B87ACFCF842238DC339AC /* IQKeyboardToolbarManager+Debug.swift */, - C70AB659BC6BC3C3EF51AB32BBF7BD2E /* IQKeyboardToolbarManager+Deprecated.swift */, - 963E16D80DDA6E3F39317FBEEF4A019F /* IQKeyboardToolbarManager+Internal.swift */, - A2E05EB2A16264EE344D5C57B626E0E7 /* IQKeyboardToolbarManager+Toolbar.swift */, - 0FDFCFAED54B1A668030FBB5DAA027B8 /* UIView+Responders.swift */, - 1E3A4D823011F833B4CE1C1AB3DC381E /* UIView+RespondersObjc.swift */, - 63B6E43D8C8F44FC7FF576C4DACA554F /* Resources */, - 0B9B2957C01E56FACDD895263C81308B /* Support Files */, - ); - name = IQKeyboardToolbarManager; - path = IQKeyboardToolbarManager; - sourceTree = ""; - }; - 8C5931FD55311A7709205B34F5C00512 /* SDWebImage */ = { - isa = PBXGroup; - children = ( - FDB60DA6F3D82B35536E04AFE17973A0 /* Core */, - D071B5073D0C49B845F36464A79AE10B /* Support Files */, - ); - name = SDWebImage; - path = SDWebImage; - sourceTree = ""; - }; - 8C838B4F0C1E0AF68E1BBEB1D7486F72 /* Resources */ = { - isa = PBXGroup; - children = ( - A34655F0A811AB3A87F04E2474CB58B5 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - 8D0F34B7C644039F8828C76FE8328485 /* HXPHPicker */ = { - isa = PBXGroup; - children = ( - 7934D0783F27321D51283B05E5DE6025 /* Core */, - 23EA7C5FAF45429CC662159E2C59682A /* Editor */, - 1E19CB73CDC36544434FB01B82AFCA32 /* Picker */, - CE176B7E2EB2BDBA32DEDE56D142CC88 /* Support Files */, + AC95595F0BBFBCEB77EC41215C348171 /* Core */, + CA618CE6A8D9F9BD2214C05A9D85041C /* Editor */, + B8671D481CDD6ADC74C2ACA6CB50CB63 /* Picker */, + E470EDB4DA4C218EBB9CC4297465F767 /* Support Files */, ); name = HXPHPicker; path = HXPHPicker; sourceTree = ""; }; - 8D190C4888D13FCFDBA0427CA2C62633 /* Support Files */ = { + 31BCA67516E8A034FC190F8597D88B81 /* Support Files */ = { isa = PBXGroup; children = ( - 6071B34947E92A5B38EF5EF37915B1E7 /* ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist */, - 72CC42138666BE5E04A9735B223C6772 /* SwiftyJSON.modulemap */, - 28028200CF5288C6709AF472B07A3E73 /* SwiftyJSON-dummy.m */, - 5948948C27B1B8C08ABE3DB6DCCEE651 /* SwiftyJSON-Info.plist */, - 35ADFB58A321E02490B12260E9A6DC63 /* SwiftyJSON-prefix.pch */, - BAFFADB6718043647FA05D94FD3860E7 /* SwiftyJSON-umbrella.h */, - B0676AB10DF7580007C901BF2C8B01B8 /* SwiftyJSON.debug.xcconfig */, - AEA1F78F7416BA70657450BF20259B85 /* SwiftyJSON.release.xcconfig */, + 918ECADF5BF52E258972BF447F8A10EF /* IQKeyboardCore.modulemap */, + 1B20E54E915DD05D6DC0A202B6A746A5 /* IQKeyboardCore-dummy.m */, + 50E385227AF12ECBFB0513F6D086049E /* IQKeyboardCore-Info.plist */, + 90E2AEDE3DA3F9A2A9D53BFD34D9D235 /* IQKeyboardCore-prefix.pch */, + 39F33078ADCADC74D51595069A4B4F27 /* IQKeyboardCore-umbrella.h */, + 2854C80D6EF7D3B7B82AD9C4ADC0FD64 /* IQKeyboardCore.debug.xcconfig */, + F17AA9FF2A03983AFAF7969998113A73 /* IQKeyboardCore.release.xcconfig */, + 2AA67AD732C1703650AD66B7B46B75A3 /* ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/SwiftyJSON"; + path = "../Target Support Files/IQKeyboardCore"; sourceTree = ""; }; - 8DD960C6BAF6200C0F8AC067AF5A4C83 /* GYSDK */ = { + 31ECF39721A14456865E5D0F7524FAF9 /* Core */ = { isa = PBXGroup; children = ( - D98C3FC39CA3292D4531500A177AF707 /* Frameworks */, - B799DDFC3EE7C36C48509EDC93AC177D /* Support Files */, + B576EDF7A86415CCC3E2A8821457526B /* AccessTokenPlugin.swift */, + 365A6611E9FB12240170EE665EF48284 /* AnyEncodable.swift */, + 1C469C15C143DCBCAD26D2F80E2A8BAD /* Atomic.swift */, + CF3AD82EC39778DB621B9AC73985F627 /* Cancellable.swift */, + B3C89B6D5952E42BDB087357BEDAAA88 /* CredentialsPlugin.swift */, + 41A4DBD37D4C7EDFBB298F5BFE487E1C /* Endpoint.swift */, + 18E56EA95B0B63455E9FD121268B2EAB /* Image.swift */, + AD78BC3B9444626883C4206C4B606F25 /* Moya+Alamofire.swift */, + 596895B99E7E27AAF130D98206857EC7 /* MoyaError.swift */, + 0E3F8640A2B68814B6E3049FE1466EB3 /* MoyaProvider.swift */, + 74EF885F453A96CCB8817B3E6A482055 /* MoyaProvider+Defaults.swift */, + 154A80EEAD6466B904FDDB7938F4AB13 /* MoyaProvider+Internal.swift */, + 2D5E0EC291F4571118276A49CD3A886D /* MultipartFormData.swift */, + C1AF925CB18B9B0B703C6F5CA5025160 /* MultiTarget.swift */, + 1B3CE22D40D563D3716D2B637C30D428 /* NetworkActivityPlugin.swift */, + 9B46A5D19E97AE6984F675B88762077E /* NetworkLoggerPlugin.swift */, + 92EFF684FDFA11D0956B96DD55C639A3 /* Plugin.swift */, + E6D3BE472B6444F8EDCE6D9376908C0A /* RequestTypeWrapper.swift */, + 7F7C4E38E4607F8008E79A6434ADB1C0 /* Response.swift */, + B583A8D3B15E63BC12FB32D1F96844FC /* TargetType.swift */, + 263E0995DC5FBCEC84D7B86C4F00115D /* Task.swift */, + 6CA7E77AA99A3B25E82ACB1C03DE1AFF /* URL+Moya.swift */, + 392F545C5B87288F9B4FD5543E7ED91D /* URLRequest+Encoding.swift */, + 75859D611A6F089B1FDC29D1AF73E27F /* ValidationType.swift */, ); - name = GYSDK; - path = GYSDK; + name = Core; + sourceTree = ""; + }; + 3354CCF305F029048F29E81C8CBCEF66 /* Core */ = { + isa = PBXGroup; + children = ( + 6BCE8FAF2BD0D9BBF46A9D702C7C1CC5 /* CocoaMQTT.swift */, + D6153E9D8FB50D6577852480096F689B /* CocoaMQTT5.swift */, + 500DC6BC616ED25251A50A86C36870BA /* CocoaMQTT5Message.swift */, + 19E88545F1377810D5192228482A9C6B /* CocoaMQTTDeliver.swift */, + A8BEB8AC75C51F307499646F3B4C0DF2 /* CocoaMQTTLogger.swift */, + F078664F20916DBD98CD43B1695DBAD0 /* CocoaMQTTMessage.swift */, + 8623EF65FEC6BFD426123019DFB996B6 /* CocoaMQTTProperty.swift */, + 010FD8BA73DAC958194818B68AFCF699 /* CocoaMQTTReader.swift */, + FE18999B476D598F337EE1381FA8246C /* CocoaMQTTReasonCode.swift */, + 603CC2BA472D5C652471FA248F2568B8 /* CocoaMQTTSocket.swift */, + 4CE1D44D51C8A45FD369FE3952E1D2B2 /* CocoaMQTTStorage.swift */, + 854D2B733043533D0537C10C8D8EE81C /* CocoaMQTTTimer.swift */, + DBB464629EFF24FC46445D5425B39D7E /* CocoaMQTTTypes.swift */, + B4A3C63C58D795A774EE240C747B81E6 /* ConcurrentAtomic.swift */, + FA032BABA117E2462E78153FD9CBD9F0 /* Frame.swift */, + 550003481FF70BAFA7B39AADB487E760 /* FrameAuth.swift */, + 3353B782D463177D03DE0F388380825C /* FrameConnAck.swift */, + B35298093BE07EC18C02E752D449371D /* FrameConnect.swift */, + 5C4C77EBB2493FB7A93A2D0FB646C569 /* FrameDisconnect.swift */, + 30D9D5041CB0B73D214303A39FE8ADAB /* FramePingReq.swift */, + 4FE9017C4BF1888D86038C0AADE59478 /* FramePingResp.swift */, + F0E50899C0C21D11C1827375725D6F78 /* FramePubAck.swift */, + C093540FF30E4F3FC0F5546E3FA8958C /* FramePubComp.swift */, + 43A35A16C9716924B97B9D53A78A0391 /* FramePublish.swift */, + 57AFF0686BCCD3B8F8E64BF3694786B1 /* FramePubRec.swift */, + 17D15555C12B0AD21FDDB995C7FF080C /* FramePubRel.swift */, + 9A29D87B1DD0597A8C888EE5B31EB730 /* FrameSubAck.swift */, + 66C8F6BD5C4F963CFF317253AB78D288 /* FrameSubscribe.swift */, + 7E4E9F77E3B93C448A645B6A373107EF /* FrameUnsubAck.swift */, + 2CC755210EE7CF0DEB9FD2F3DBDE1873 /* FrameUnsubscribe.swift */, + E2DF4020FB18B7407F948B895C5A055E /* MqttAuthProperties.swift */, + 322E4310DE8158FCAE06CF313CB5D549 /* MqttConnectProperties.swift */, + A85C1FB7E970597CDEA090223148461D /* MqttDecodeConnAck.swift */, + 6C8171B585A7AB98F4DAC387B9569C8D /* MqttDecodePubAck.swift */, + 7A8F1EA5A5A4DAA6EBB99FAC4B0D994C /* MqttDecodePubComp.swift */, + 5DDAB40E3AA9DE5D5A63CF63ED9A2BEF /* MqttDecodePublish.swift */, + 110A4E7BE4EB9B92AD398EF75E3DF5AE /* MqttDecodePubRec.swift */, + F28E43923328EF261C416EB2E681B924 /* MqttDecodePubRel.swift */, + 6C4D7FBD66D7474E6981A9772DBE9E40 /* MqttDecodeSubAck.swift */, + 5A8B44A19AF20F37A8875C22357A38F1 /* MqttDecodeUnsubAck.swift */, + CD6EB60D65042D6F79F8E621BF2E5BBA /* MqttPublishProperties.swift */, + 71223FB6D980C715AF98D520D963B6B5 /* MqttSubscription.swift */, + 58040DF6D7E6F543B8DB10D3E910311E /* ThreadSafeDictionary.swift */, + ); + name = Core; + sourceTree = ""; + }; + 341BDA8F5700F98B3245E94DD113A5EB /* Pods */ = { + isa = PBXGroup; + children = ( + 80FE7852630087320C1B2A41A4C620BF /* Alamofire */, + 182B8E01020C6F0D2E94C066E3B19A52 /* AlipaySDK-iOS */, + FA24AC496694CC0F7BDFC3B94CAD8F28 /* AMap3DMap */, + 352E0C6B14DF1FD677DB2A4714C71F21 /* AMapFoundation */, + 93AFB13EFAA869C5FE807153A8A61064 /* AMapLocation */, + 49D5DF8962942BFE1534A1DB3233C3E3 /* AMapSearch */, + 65125F751B1074B953962EF5D01BA3D4 /* CocoaLumberjack */, + E60D404C90FA88964FA6392E06D2D272 /* CocoaMQTT */, + 550AB15AE717098FEA686FD3963C7C5B /* Differentiator */, + 57178949E1B6D17AA366D2428F5EB051 /* GTCommonSDK */, + A76C6D0D354B54FB7824FBD907043EE4 /* GYSDK */, + 316732A829FFB7D66D03CE6DFE701470 /* HXPHPicker */, + 989A441817A6A723DE97D351AA69E255 /* IQKeyboardCore */, + CDA22605428F8A70751DEE94C3788E93 /* IQKeyboardManagerSwift */, + 086EDB8299EBF599D255CC597927C881 /* IQKeyboardNotification */, + 1C6C2CFBB7F1907271C7CA2745B014A8 /* IQKeyboardReturnManager */, + D22A784029D0505F8825E2FB6440A13E /* IQKeyboardToolbar */, + B8E57183278F9B617AB1F148A84C5565 /* IQKeyboardToolbarManager */, + 7C81E329A6BD035AE9697150B2EE7923 /* IQTextInputViewNotification */, + 2D93BC648B5505323C66BB5B12A8A51B /* IQTextView */, + 073B86CEF0DACD846819D02D4531E844 /* Kingfisher */, + 3D8401C7D688652572621379FFF5B23F /* KingfisherWebP */, + 0B974A581577490CD7D5FF221AC92B6B /* libwebp */, + D50473D5C3F8FA62E8B45AFC0D8E6F4F /* lottie-ios */, + 8DC7B97A296FA6467418938125A62098 /* MarqueeLabel */, + C1BA859B3BF10634F10D96C1F85389D7 /* Masonry */, + 7670F38C1F6FAE80A9D3DF43B0710DFD /* MBProgressHUD */, + E69EBF1C66CE1E6E987817BBE63B224A /* MJExtension */, + A820526A396D3C2BB6AA329C5822DCD1 /* MJRefresh */, + B78734F5F7ABB5B594C214F14E7047E8 /* Moya */, + 17035DDE77D81288E6D4B9C13C5E68C1 /* MqttCocoaAsyncSocket */, + 12297B13B49E08710F5950E4859DDB8F /* ObjectMapper */, + F622E344DE756B39160F9A2CA8BC57E2 /* OpenIMSDK */, + 3E84943E1C081E6FEEA455BC4BE5D6F6 /* OpenIMSDKCore */, + 06FF378D27EB5DD240AA74B759E4AB73 /* Popover */, + 1729FC80456CEF9B99374B5D7FA2C982 /* RxCocoa */, + C780E2A1BD318E94A7FA21E68CB7939B /* RxDataSources */, + CAD41D11E03C75F7ED636D0E2472E2EA /* RxRelay */, + 6D810590AA2F2D22C6A7EAD01E8C7F06 /* RxSwift */, + 51E162143385CF4B642B3AEDAE5BB356 /* RxSwiftExt */, + EB0510EACDEE7519FFB716FBB9089BB1 /* SDCycleScrollView */, + 36BB57EDC0B4E8EA507184D29D730673 /* SDWebImage */, + 77EE6C1CA93C8DE4E5EC3459F5EBD036 /* SGQRCode */, + 61FCC43517E9F653AC85675BE5EDA1A7 /* SnapKit */, + 91CAAEEC66E3AB60BDA2A9A0B31DAF2A /* SwiftDate */, + E33D399FBB585A3939D3AAEC5B6515DD /* SwiftKeychainWrapper */, + DCCFD82C658FB653ADDC232EAA60F885 /* SwiftyJSON */, + 07E7846FD9B79697A2F954F23D754BD5 /* SwiftyUserDefaults */, + 54544A16D27527E631D23F3F4B147DA5 /* TagListView */, + 9302ABDEEAE1E23B6BE7B4D3ED467269 /* URLNavigator */, + 21E4E40C3B4B7D5606D3B896CEBBC9DF /* WechatOpenSDK-XCFramework */, + 2CE3D4270C99A67151A062702A2DF753 /* YBImageBrowser */, + 776B5450F1DB91088FB2FF13F80D1592 /* YYImage */, + D9AC6D9F03DCEE5596A4C6EAB157FD8F /* ZXSDK */, + ); + name = Pods; + sourceTree = ""; + }; + 3505A72458850FC11DA3814D2B095AA5 /* Resources */ = { + isa = PBXGroup; + children = ( + C946A52BE769027A887483647665E8F7 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 352E0C6B14DF1FD677DB2A4714C71F21 /* AMapFoundation */ = { + isa = PBXGroup; + children = ( + 00263D60A048A662D11503C81EB3E293 /* AMapFoundationConst.h */, + 56BA8582242132FCF45DE6D6F7D5E756 /* AMapFoundationKit.h */, + CFD6B054FF46A41FC9AEAF36A1E02246 /* AMapFoundationVersion.h */, + 6458147C926E431087479B672BEAED5E /* AMapServices.h */, + C58AC090CF55DF65FBCB1E83D9A44E0A /* AMapURLSearch.h */, + D5ABA7A9A9E3BA9AF60465C2BEBFE6C8 /* AMapURLSearchConfig.h */, + 6795AF09F8D149285033AEB0BCED748D /* AMapURLSearchType.h */, + 4988D7FAB199524EF97468FDA1024E50 /* AMapUtility.h */, + FADF433389EC6E744C22289B13560776 /* Frameworks */, + 0C4138CB12761CFFE96C2922C4516791 /* Support Files */, + ); + name = AMapFoundation; + path = AMapFoundation; + sourceTree = ""; + }; + 36BB57EDC0B4E8EA507184D29D730673 /* SDWebImage */ = { + isa = PBXGroup; + children = ( + 0F307B95D8704D258200CAB8E7EE23B3 /* Core */, + A8E8AF6560796F62A90FD285A95ABD91 /* Support Files */, + ); + name = SDWebImage; + path = SDWebImage; + sourceTree = ""; + }; + 3999BA7BC5D3C7658CCCB2D544E611B4 /* Core */ = { + isa = PBXGroup; + children = ( + D3D69DB59BA23808B9FC7CA5290FE648 /* NSObject+YBImageBrowser.h */, + 4041C387548214F751404450BF39B769 /* NSObject+YBImageBrowser.m */, + D50376BA225C0801D90EFEB172B1D6C4 /* YBIBAnimatedTransition.h */, + 8C0661ACD87A5C3E6324F3D7E16411DE /* YBIBAnimatedTransition.m */, + 83921C9664E047ECE321FD559ED72F36 /* YBIBAuxiliaryViewHandler.h */, + 37D11A371CBE51534B1035243FE652C8 /* YBIBAuxiliaryViewHandler.m */, + 6B8BEC335BBBFC53C5753059CA075FB3 /* YBIBCellProtocol.h */, + BEBE1953B540829D2FA2A81822E200CA /* YBIBCollectionView.h */, + 23A4440664319022C5085EDC5E2C702D /* YBIBCollectionView.m */, + 43CD18A02BC6362BD60A9F8A895C6881 /* YBIBCollectionViewLayout.h */, + 3A36550B8B2CBBB52150C46F5E083568 /* YBIBCollectionViewLayout.m */, + 50B2799B201F8DE8120BD7D5DF850756 /* YBIBContainerView.h */, + A564302709C6F613C097FCA7C36410B8 /* YBIBContainerView.m */, + 469BBA85B3B01F0A015C20C5026AC171 /* YBIBCopywriter.h */, + C677F1F6911AEB8A0B1C0078557F254F /* YBIBCopywriter.m */, + 1BDE57FD5D9733AD03237000523DFF20 /* YBIBDataMediator.h */, + C5E4AC95D725AE9914E15B02C6040935 /* YBIBDataMediator.m */, + 2E17D7BAA52A7884B7F49C0C06778BF7 /* YBIBDataProtocol.h */, + 5E215B4152D0A6DA7FBDD58BF58BA1A2 /* YBIBDefaultWebImageMediator.h */, + CA1127638FB310D5F12AAE25ED25158A /* YBIBDefaultWebImageMediator.m */, + F146679E95977A174286ABF268952FF7 /* YBIBGetBaseInfoProtocol.h */, + F34ED0A941A2F51373D6C1C05B1339D7 /* YBIBIconManager.h */, + 5C04AF582F9D6D4B5C00FBDCDB0C3039 /* YBIBIconManager.m */, + B2ED4E571D3FD0B525785E5C9317CE6D /* YBIBImageCache.h */, + FC5AE789DAF559A15696D20E295016D5 /* YBIBImageCache.m */, + CF8B49FE54508962DCCAE48FF9C6BE2C /* YBIBImageCache+Internal.h */, + BFE309F25629521A4C37547AB03DD967 /* YBIBImageCell.h */, + ACDBB4CB21A0172744F834F4091673B4 /* YBIBImageCell.m */, + 765D3D4E7343A74C9DAAC6872CCA30D6 /* YBIBImageCell+Internal.h */, + 1E667A962419E1AC1223896870D663EF /* YBIBImageData.h */, + 6BD92912FCEB695DC98E049E3F1E663E /* YBIBImageData.m */, + 147AA59E39E9EAB2C4AB74196F84BF4E /* YBIBImageData+Internal.h */, + B2FB4A7A72FEED4EEC521EBD466AF52F /* YBIBImageLayout.h */, + 0A6B3A99BDAED7755D8CFCE9C0F42B18 /* YBIBImageLayout.m */, + 272F9E6947D5DFE5145771307773F9E9 /* YBIBImageScrollView.h */, + 893433AAE0EC3F67963A11E6F861691E /* YBIBImageScrollView.m */, + 887BD66AA7441D8A73D87321B6F17CBB /* YBIBInteractionProfile.h */, + 0736A9464846A7FFD4CD0741B9E475AD /* YBIBInteractionProfile.m */, + 98CDBE58C4CEDB9BD1550333B927C91D /* YBIBLoadingView.h */, + 28BE9C4C4FD97745A47638677BEF26C1 /* YBIBLoadingView.m */, + 9A2CE0AF51BE27F12200078A93A6C66E /* YBIBOperateBrowserProtocol.h */, + C94D912ED11FB929D163DE90CA7CBF58 /* YBIBOrientationReceiveProtocol.h */, + 7D60BD316ED3AAEB173CD7E6D10C500B /* YBIBPhotoAlbumManager.h */, + 23C5E159C4F71F067E60F69603441421 /* YBIBPhotoAlbumManager.m */, + 2D95A95805D665C143687E0AF8794CAC /* YBIBScreenRotationHandler.h */, + 0EE24F78A7AEEC8FF75CCB9FA0A47036 /* YBIBScreenRotationHandler.m */, + 5FCAFE810B996502DE8E815BB6C1AC95 /* YBIBSentinel.h */, + 465B409F53432E81A5A256AE2E926B8C /* YBIBSentinel.m */, + 87F6C0AAEA5D49B14D1E594B55985BB8 /* YBIBSheetView.h */, + B85121EB950716DA0F583D20DABC268A /* YBIBSheetView.m */, + EDB059CE88379E4FEA3A790FFBAB04A8 /* YBIBToastView.h */, + 87DF08BF0E16E2F0B672516B99521229 /* YBIBToastView.m */, + 0371D4CC57FE2AD694BD3124D76F3700 /* YBIBToolViewHandler.h */, + C27A10A9A647A42B2B5BE3F24C1D6BB6 /* YBIBToolViewHandler.m */, + 779B2359143D01352428D637B66ABB03 /* YBIBTopView.h */, + 13CA3F82CB4C95C5C30C09CEFF326F75 /* YBIBTopView.m */, + 1B4759B2362FE048A89613C7D13FBE31 /* YBIBUtilities.h */, + 95B4863B9298753CB8613C21E39C9B27 /* YBIBUtilities.m */, + CA7DEF12C876C557DDFF6CC3B95D863F /* YBIBWebImageMediator.h */, + E3C18EF459A92F67B78ABCB4D4C4B7DB /* YBImage.h */, + A10CD0E8D82FD587766DE98C4C52DA77 /* YBImage.m */, + 4E558D8C6D3AFA14C61F24DA97C33E8F /* YBImageBrowser.h */, + B772F4D6E7B2CD1919ABFF268D1694BE /* YBImageBrowser.m */, + F1ABC498902A7C5F1A16E46F26227B68 /* YBImageBrowser+Internal.h */, + 32D89F076C7EB0BF35FCEAEE0CADD189 /* YBImageBrowserDataSource.h */, + B34D8164E363688D35D07DC9EFA7ECDF /* YBImageBrowserDelegate.h */, + 213F7456FA3CBD6ABF7ABD856222F406 /* Resources */, + ); + name = Core; + sourceTree = ""; + }; + 3D8401C7D688652572621379FFF5B23F /* KingfisherWebP */ = { + isa = PBXGroup; + children = ( + 362C318AC23BC309320600A5C2B2254E /* CGImage+WebP.h */, + 5BCC0CB4800246FD935D7AF0399C5175 /* CGImage+WebP.m */, + 8CF7E9B4E27E9DB75877750C9B8021F9 /* Image+WebP.swift */, + F808015688D43C9E0031FC140F6849BB /* KingfisherWebP.h */, + BFDDE473595828D6E2632E61085FBD8B /* WebPProcessor.swift */, + 2406927749C80BFC19A506CF84AFFDC5 /* WebPSerializer.swift */, + C92682C44DAD917566CA3C016A52D90B /* Support Files */, + ); + name = KingfisherWebP; + path = KingfisherWebP; + sourceTree = ""; + }; + 3DCE3565E12180DA548ADF9D7FEB40F8 /* Support Files */ = { + isa = PBXGroup; + children = ( + D936862DBFB3B7043312F4C3C681F879 /* IQKeyboardToolbar.modulemap */, + 3E2853814085998597B40FCD6FF69185 /* IQKeyboardToolbar-dummy.m */, + 3A67D1CB2FA1AD2A0DE5714D70C5376D /* IQKeyboardToolbar-Info.plist */, + 4F2253C444203F6FFFE1CEF38084CC72 /* IQKeyboardToolbar-prefix.pch */, + 39F3484843917C882FECBCCF7474F59F /* IQKeyboardToolbar-umbrella.h */, + FDAE672DFD3D8A61B0D211BD81FAAE76 /* IQKeyboardToolbar.debug.xcconfig */, + 846EDE56DA946ACF6FAB843EB29A21BA /* IQKeyboardToolbar.release.xcconfig */, + 5F03CEF900DCE98303D4027E3A2F7FB4 /* ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/IQKeyboardToolbar"; + sourceTree = ""; + }; + 3DD3CA31C0E01928E70F135DF21E91FB /* Support Files */ = { + isa = PBXGroup; + children = ( + 9EDCD3AB67527112F13D7113124CC91D /* URLNavigator.modulemap */, + D0437BBB36BED63582B9839D1E20DCA8 /* URLNavigator-dummy.m */, + 3806C8AFF5367B3A08DDDCB3A210C4BC /* URLNavigator-Info.plist */, + 4D15480DB79AA35C1FA293BFB624DD79 /* URLNavigator-prefix.pch */, + 546737B43CD88885573162690F1B1567 /* URLNavigator-umbrella.h */, + F78CF62F0674BF90E70B2ECA05043B8B /* URLNavigator.debug.xcconfig */, + 58C7B6E7A775424F09E7E14CA00C5CA6 /* URLNavigator.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/URLNavigator"; + sourceTree = ""; + }; + 3E84943E1C081E6FEEA455BC4BE5D6F6 /* OpenIMSDKCore */ = { + isa = PBXGroup; + children = ( + 5FE34A0BDA70D3E0D15C1325611AA7BA /* Frameworks */, + C7083989FF96825B50C6AD2F90707983 /* Support Files */, + ); + name = OpenIMSDKCore; + path = OpenIMSDKCore; + sourceTree = ""; + }; + 439E0194679A65B117123D3D6E32A879 /* Support Files */ = { + isa = PBXGroup; + children = ( + DE5BCC0BA69E61F204E9386CD87BBA20 /* MarqueeLabel.modulemap */, + CA7328C77B8873228D8F9F083DD76E06 /* MarqueeLabel-dummy.m */, + D406042DB342E978B1216F2CBB74B1A9 /* MarqueeLabel-Info.plist */, + 04337BCEE81935BE4FA6875EA79376EC /* MarqueeLabel-prefix.pch */, + 4D2A4FB1654D2C01A0BB8DF98D396CF8 /* MarqueeLabel-umbrella.h */, + 869253C90A9E318D5E478170C21006FD /* MarqueeLabel.debug.xcconfig */, + 543C52D19DFF7450FD0F1BFCDEBDB90B /* MarqueeLabel.release.xcconfig */, + 464B9757D797F887E5C3971471FC51EE /* ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/MarqueeLabel"; + sourceTree = ""; + }; + 43B3AAC0548B91531161C2A20E2DFA38 /* Core */ = { + isa = PBXGroup; + children = ( + D5C3483F4E8C5E0015004EAF99566DAE /* IQActiveConfiguration.swift */, + DBCBAB931CCEE194C1467906C7B7D94C /* IQKeyboardManager.swift */, + 4FCC1C19DDE1E49C438978C0B7E9C33E /* IQKeyboardManager+ActiveConfiguration.swift */, + 20A89EBE355145B0F7D0CE86923C8686 /* IQKeyboardManager+Debug.swift */, + EC3074255B9B2BC12ABE3CC218759254 /* IQKeyboardManager+Deprecated.swift */, + AAED09A3FF9F11B572D266C4C9AF76E7 /* IQKeyboardManager+Internal.swift */, + 661B11CB82859F4F63BB986EEA203D75 /* IQKeyboardManager+Position.swift */, + C9714A1AD9F2DF6D9204ED18A1C836E6 /* IQRootControllerConfiguration.swift */, + 9CD16763011689F5599A9449C0100867 /* IQScrollViewConfiguration.swift */, + AEDFB3B7BB27DE01032FB09D870AD119 /* UICollectionView+IndexPaths.swift */, + 95CC0C8C9DF91B6EEC6755575144D1BE /* UIScrollView+IQKeyboardManagerExtension.swift */, + 139EF672FB2BD571A5A740D822E68D86 /* UIScrollView+IQKeyboardManagerExtensionObjc.swift */, + B33EEB175BF64F2AE39B373015729BB3 /* UITableView+IndexPaths.swift */, + 9D95D57DFF072259B98628A58665039F /* UIView+IQKeyboardManagerExtension.swift */, + 1BEFFF17F16298B1DF23F0FD66D7EADA /* UIView+IQKeyboardManagerExtensionObjc.swift */, + 28EC7434D8007BC07802B27B8D6FB1A8 /* UIView+Parent.swift */, + 1347E158DD6325436FEA7A90CCD478A6 /* UIView+ParentObjc.swift */, + 4AACBABCF5B90F04C33A9FECD309A234 /* UIViewController+ParentContainer.swift */, + ); + name = Core; + sourceTree = ""; + }; + 47E17702787ECF00AD111873E03883A0 /* Support Files */ = { + isa = PBXGroup; + children = ( + 2529DAC0D802063EA30E377C208C274D /* GTCommonSDK-xcframeworks.sh */, + 1DFBCAA5D961010443EE4E8BF7F440E3 /* GTCommonSDK.debug.xcconfig */, + FB1D9DAF235C3360A49CB31CD5D21E03 /* GTCommonSDK.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/GTCommonSDK"; + sourceTree = ""; + }; + 49D5DF8962942BFE1534A1DB3233C3E3 /* AMapSearch */ = { + isa = PBXGroup; + children = ( + 957FB55BA840E6DCA8B080C66EA98A00 /* AMapCommonObj.h */, + FA3C2D4D0F600143BF84D12E30EC764B /* AMapNearbySearchManager.h */, + 98C70EAA109E0E04638FA1D75DD9F750 /* AMapNearbyUploadInfo.h */, + A27735D73BDAF35198BF15B74CAFA479 /* AMapSearchAPI.h */, + 27FBE8F4C6D9F3D5E81384DF8CE8969F /* AMapSearchError.h */, + 52C8C7A591F76293D6D6BEE0D5C27010 /* AMapSearchKit.h */, + 5852FF1C0268DBCE67F0F0E39DE0B510 /* AMapSearchObj.h */, + 4B4488AE2B9DCBD2B129E527FCB438E2 /* AMapSearchObjV1.h */, + A74A7D2A8E145C693B70DF164CC44062 /* AMapSearchVersion.h */, + 295DBC4F5635C5B494F285F57C8224E0 /* Frameworks */, + D61BBE141BD5A1FE1FBE1B6CCA689984 /* Support Files */, + ); + name = AMapSearch; + path = AMapSearch; + sourceTree = ""; + }; + 4BBF5683D94BE3C129B3F1500E2F0870 /* Core */ = { + isa = PBXGroup; + children = ( + E36023FA5050A88E423759EE0EFCD497 /* IQBarButtonItem.swift */, + 9D230BB4BBC629C4AD808FB6819CFE89 /* IQBarButtonItemConfiguration.swift */, + 21AAE531B9EF7DB927D524FE45E5365C /* IQInvocation.swift */, + CC7B8DCEBB0FD4064FFEAB1E9BA967D1 /* IQKeyboardToolbar.swift */, + CFD05E64CF85F8CA7E5A6576121884A0 /* IQKeyboardToolbarPlaceholderConfiguration.swift */, + 28B010A2146BDC61697A76663AF9803C /* IQTitleBarButtonItem.swift */, + 59DF3EC3D68BB1FD12D0E26E697ADC67 /* UIView+IQKeyboardExtension.swift */, + 52ED7B4D2CAEA2EACAF3CAE743DB8D1D /* UIView+IQKeyboardExtensionDeprecated.swift */, + 84315F79BA3DE29DC734A52F0D9418E9 /* UIView+IQKeyboardExtensionObjc.swift */, + ); + name = Core; + sourceTree = ""; + }; + 4DF06C65934AA46F4928AB88AF81DC06 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F0F19C6B885147A312B578A3DAAC871C /* MAMapKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 5130E110E7F6D15B472C59552BAC791C /* Support Files */ = { + isa = PBXGroup; + children = ( + 0F1E4C287F43603EC155ECECFDC59225 /* MJRefresh.modulemap */, + 6B80BF427EA0435A2D0917C4A28181F7 /* MJRefresh-dummy.m */, + 7739C14DC6B605D8F2466FFD82090ED7 /* MJRefresh-Info.plist */, + EC17AC8224AF86055ABF638581E03865 /* MJRefresh-prefix.pch */, + 5848253A22D6396B7A068D7D2A0277C9 /* MJRefresh-umbrella.h */, + B8EC604002D3AACC61D5BDBC802F50D0 /* MJRefresh.debug.xcconfig */, + CAB2565A0DA889576964CD69CC948242 /* MJRefresh.release.xcconfig */, + C3A73710E2C0578C6A953780E42AD303 /* ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/MJRefresh"; + sourceTree = ""; + }; + 5169B48C1222A1C1D2880F9578AB809A /* IQKeyboardToolbarManager */ = { + isa = PBXGroup; + children = ( + 6CC9F61619926E872D28D902C1AF880B /* IQKeyboardManager+ToolbarManager.swift */, + CFE969BF87DF6A4473ACCB1E8565BDF0 /* IQKeyboardManager+ToolbarManagerDeprecated.swift */, + ); + name = IQKeyboardToolbarManager; + sourceTree = ""; + }; + 51E162143385CF4B642B3AEDAE5BB356 /* RxSwiftExt */ = { + isa = PBXGroup; + children = ( + 22B2590D022CBB1EB5BE49DCE4663481 /* Core */, + 17E8652D5B87475A0EE4D8410FF319FB /* RxCocoa */, + 0E2471BB06D552AB52355B46FDC74EC8 /* Support Files */, + ); + name = RxSwiftExt; + path = RxSwiftExt; + sourceTree = ""; + }; + 52A97E1F61561F467822E512FBA51A82 /* Support Files */ = { + isa = PBXGroup; + children = ( + C5CE467F7D21EE255E3C0AC93EEC217A /* RxDataSources.modulemap */, + 2CDE862D7BF7002E18408BEC71411A53 /* RxDataSources-dummy.m */, + 64916876656A6A9960FEB98C54459534 /* RxDataSources-Info.plist */, + B7B65555863ED958E7C15F4E036BDA4D /* RxDataSources-prefix.pch */, + 1BCC3CCFED5B0E4592E403671601ACEF /* RxDataSources-umbrella.h */, + 3F309E5C6296297419BFF8A326FBA8A3 /* RxDataSources.debug.xcconfig */, + 8C6C1C2CD09F3D826E6B56CD9CA8EED3 /* RxDataSources.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/RxDataSources"; + sourceTree = ""; + }; + 54544A16D27527E631D23F3F4B147DA5 /* TagListView */ = { + isa = PBXGroup; + children = ( + 754D0F51CD2EAF6A474BED8B1704DE6B /* CloseButton.swift */, + 548902D1C1F1F472857640F1054B46CC /* TagListView.swift */, + 81F7D3FF1C6A6BA4CF4343A1D488E223 /* TagView.swift */, + B708B78A29CB5B853E59332CADE08064 /* Support Files */, + ); + name = TagListView; + path = TagListView; + sourceTree = ""; + }; + 54B6B9EE6CA79606EC2C8AD58B25764F /* Core */ = { + isa = PBXGroup; + children = ( + EA8D9B8D105015C6EEF5E5C35E31DF2A /* CLIColor.h */, + D10D891E1B9E58E640DDE11239776223 /* CLIColor.m */, + E939347E78A0391184298A74581E8A4B /* CocoaLumberjack.h */, + 0975E1214B64C5AE57633B4489CBE5F2 /* DDAbstractDatabaseLogger.h */, + F38473A0318DD5468977B8B5695A90DD /* DDAbstractDatabaseLogger.m */, + 289FCFE3D6DDD65B8122E6130BA5048A /* DDASLLogCapture.h */, + 5057B056546FEDFFD71C7FFDC03FF7D0 /* DDASLLogCapture.m */, + 216E0D99EA559AD8E578C6AC676FFCBE /* DDASLLogger.h */, + DE06532E7C05F4532ABBECA80B3BFBE3 /* DDASLLogger.m */, + 44443D8FED362A663B7F86031F24FBC4 /* DDAssertMacros.h */, + AB391B254D2D6498DF8E0C3EED6102BA /* DDContextFilterLogFormatter.h */, + 1692A7D7BE4DE1B7E024C490612EB31B /* DDContextFilterLogFormatter.m */, + 768284F94C04D4AA181C44C6DABE481C /* DDContextFilterLogFormatter+Deprecated.h */, + 94441A97766437C85EA2053848569EA5 /* DDContextFilterLogFormatter+Deprecated.m */, + 36150B9A092CEA623ED750B37621BEA4 /* DDDispatchQueueLogFormatter.h */, + 7AC9E6CA74830BF0C4F0A5DEB598B368 /* DDDispatchQueueLogFormatter.m */, + F02800A4D7E74C83AF754FB80D50552A /* DDFileLogger.h */, + 0A8E8C8881849C416468CDD1543F786A /* DDFileLogger.m */, + 7D5F7D75A5F16DE8ED73EAB9D1681EE0 /* DDFileLogger+Buffering.h */, + 05746202040C5E84F9997A84784DE29C /* DDFileLogger+Buffering.m */, + BB176CC8A097D4E742BA5C362AB0B997 /* DDFileLogger+Internal.h */, + DBC013570B52683EAAC1DC3751BAE86A /* DDLegacyMacros.h */, + C34E1FC5A28BDD54E39AB0B3CD4FE159 /* DDLog.h */, + 8929295E55D3A7956A8FBB2AF64C3CEA /* DDLog.m */, + 749621F3F175B83BA32CAE04C651F4DF /* DDLog+LOGV.h */, + 48C58BD4112BA7365B046A10EC59B716 /* DDLoggerNames.h */, + DF0D59AB65BAC48A5EE451E2781AF508 /* DDLoggerNames.m */, + 6AF85A1017DE15A4101657601A4C5A16 /* DDLogMacros.h */, + 76E48E1B8ED8E32B9FD17F6AF5FD4C19 /* DDMultiFormatter.h */, + 106AF6327F7C20B1A3C440871893FEF9 /* DDMultiFormatter.m */, + 378E212C4FE47178EBCE8F98BAB1B1D8 /* DDOSLogger.h */, + 8DCCA16221D7CCCCB0947FEC9E1C1F3A /* DDOSLogger.m */, + 27F320304CFB5F16992D6434DE4E65B7 /* DDTTYLogger.h */, + EB5CE15E8B1EC758E154A3D6D0DBB372 /* DDTTYLogger.m */, + 857BF1F8D1303285AAF3ECD76747A2B9 /* Resources */, + ); + name = Core; + sourceTree = ""; + }; + 550AAF8EB2D5011A4350D00CC7A6F635 /* Support Files */ = { + isa = PBXGroup; + children = ( + E62B072434546B62A0732B87388A9662 /* GYSDK-xcframeworks.sh */, + 14E16E30B25A8A248D95A482A7EB47AF /* GYSDK.debug.xcconfig */, + 4B3761DE77E2B197B16591EDBD27853D /* GYSDK.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/GYSDK"; + sourceTree = ""; + }; + 550AB15AE717098FEA686FD3963C7C5B /* Differentiator */ = { + isa = PBXGroup; + children = ( + 85C8B51DA0770D817281FCCB4771C0A0 /* AnimatableSectionModel.swift */, + 78C01105638592D5D6B38F6C58CC2EE0 /* AnimatableSectionModelType.swift */, + 8C73556EF652E6AAF642783546B02DB0 /* AnimatableSectionModelType+ItemPath.swift */, + 53A748F8442ACE4E6959806D00DB0272 /* Changeset.swift */, + 684A7422DA5D5676B52EEDD2E28FC657 /* Diff.swift */, + 48D3D3955FABE41F8DDF194B898A86F8 /* IdentifiableType.swift */, + E41C167A42094403E6D01F0C012B89B5 /* IdentifiableValue.swift */, + 2DFB101CA626227DCFB08754A265952E /* ItemPath.swift */, + 7255A222C9A1437D1F742C8CBFEF988B /* Optional+Extensions.swift */, + 69233A166022F4FAA2349D49017EE68A /* SectionModel.swift */, + F1A9770100809405AD02EE9CCCD7C2DF /* SectionModelType.swift */, + ADDCBE1A39A53B0074D2F5EB3E791CCF /* Utilities.swift */, + EC1B197DDB5A762DE794CED65B40DE63 /* Support Files */, + ); + name = Differentiator; + path = Differentiator; + sourceTree = ""; + }; + 55C4125A98F46875D476B398546E5702 /* Support Files */ = { + isa = PBXGroup; + children = ( + C09DA885DD15FA8B7964193BE291C702 /* AlipaySDK-iOS-xcframeworks.sh */, + BCFAA6E3673F32D9D944D7DD589746D5 /* AlipaySDK-iOS.debug.xcconfig */, + A5855B017DB303D2A1DBEC7EFDEEBEF7 /* AlipaySDK-iOS.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/AlipaySDK-iOS"; + sourceTree = ""; + }; + 57178949E1B6D17AA366D2428F5EB051 /* GTCommonSDK */ = { + isa = PBXGroup; + children = ( + 631BD496DF63A2DCE9DC72620F14231C /* Frameworks */, + 47E17702787ECF00AD111873E03883A0 /* Support Files */, + ); + name = GTCommonSDK; + path = GTCommonSDK; + sourceTree = ""; + }; + 5BA1141B7B50BD6B6A92B96743BC3AF7 /* Resources */ = { + isa = PBXGroup; + children = ( + 7C5F5574EA447F3EFFBEBB60DEA304A5 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 5FE34A0BDA70D3E0D15C1325611AA7BA /* Frameworks */ = { + isa = PBXGroup; + children = ( + 61FC40CC3CF376314F66F115AD76C8BD /* OpenIMCore.xcframework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 601F16286C6703F7EABF8CB64188C787 /* Resources */ = { + isa = PBXGroup; + children = ( + 4C84C4C711FFA7CF45DD30F7F1B9F6FB /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 615DE90D9A6B679C368696030DBDE803 /* mux */ = { + isa = PBXGroup; + children = ( + 10ECE5FD969EBBA30C2ED7DA1AC66C7C /* anim_encode.c */, + 6939A2F658A7053D427D8CA0499EEA5F /* animi.h */, + 0D43EFC784C9CB0EEC823043042F4F3E /* mux.h */, + 3419D2C8671536D5EF4FAFBBECE79EE0 /* muxedit.c */, + 936CB7B4BDC58080C1761D5802B3F961 /* muxi.h */, + 432FA1B90521DCF2ABD467F6CB5BE0D8 /* muxinternal.c */, + 9D2C92E71F92957D93A3E7A0F3E1C393 /* muxread.c */, + ); + name = mux; + sourceTree = ""; + }; + 61FCC43517E9F653AC85675BE5EDA1A7 /* SnapKit */ = { + isa = PBXGroup; + children = ( + D270B58C52D873E88FE7A688C880CC47 /* Constraint.swift */, + 91F40D000DF542C6D6257B1B433BAA8B /* ConstraintAttributes.swift */, + 31F9C25C7025E7B07803B95DD09EB95F /* ConstraintConfig.swift */, + AE67D105FFA7A37148000E1CF35CB1A2 /* ConstraintConstantTarget.swift */, + 1BE3ED2D55A51CE30D6B35A81EEDBF70 /* ConstraintDescription.swift */, + 6C7A61E9DB82D02FEA27B03B819C2C7A /* ConstraintDirectionalInsets.swift */, + 55A85B8F88C0FFFDA82F7292E474114A /* ConstraintDirectionalInsetTarget.swift */, + 6A73073075D10A568A023F1D190E7925 /* ConstraintDSL.swift */, + 0DE460D658E702CA2B530B22A735CDEE /* ConstraintInsets.swift */, + 61831D41BCD7315F136D4DF2A5ADD114 /* ConstraintInsetTarget.swift */, + 05E9CE5A83328C8F0A54F45B5A6C8051 /* ConstraintItem.swift */, + E796C4048C441AD02DC39D0BD3AC5217 /* ConstraintLayoutGuide.swift */, + 73A9AFEB67D867F54621A8B038E14078 /* ConstraintLayoutGuide+Extensions.swift */, + D910123998FD43BE6AD2DDD3A3D45594 /* ConstraintLayoutGuideDSL.swift */, + 7389364A0F9C4547DF6856032C109311 /* ConstraintLayoutSupport.swift */, + 4B116CF6C24DE8991292084F188FE48C /* ConstraintLayoutSupportDSL.swift */, + F716D3D553C2B2B467ACFEB6493D9F37 /* ConstraintMaker.swift */, + 17C72523B93134AD24AD27FCC1289EBD /* ConstraintMakerEditable.swift */, + 652AFE78F8E551FC43A6A45DC83A3681 /* ConstraintMakerExtendable.swift */, + BA81E3B3EDD71C5E60450FB07D07DC17 /* ConstraintMakerFinalizable.swift */, + A8DDCF4864693C73E1125B4AF69B2DA3 /* ConstraintMakerPrioritizable.swift */, + 5C17147FB45C2F91E3F4E0561AADD510 /* ConstraintMakerRelatable.swift */, + D581489AF2D977E97DD236B6C4C9583B /* ConstraintMakerRelatable+Extensions.swift */, + 378372F498F665F3FFD43D996BC74AD0 /* ConstraintMultiplierTarget.swift */, + 9A3AB5C61F217707706D0EE32CFEA319 /* ConstraintOffsetTarget.swift */, + FAD5FA39926E92F28F3AB831E3E144F6 /* ConstraintPriority.swift */, + 59D37D7B8A54CCECB3D3FF11BA59989C /* ConstraintPriorityTarget.swift */, + AF05CC8BD4D487667590A69116766F94 /* ConstraintRelatableTarget.swift */, + 7A15C785772B2FB9827145D163C5E770 /* ConstraintRelation.swift */, + 3D933D12E317B5FD83E880AB561D94EA /* ConstraintView.swift */, + D1FC999A64120C01A02C6491C02500C3 /* ConstraintView+Extensions.swift */, + 1ECB7D5AB4DB61A7C722388BBFF2BCD7 /* ConstraintViewDSL.swift */, + 1A25B8A9E6FDF0123372C7099D17C0C5 /* Debugging.swift */, + FBBBC8E8624440C8A9F3BC5407C904DD /* LayoutConstraint.swift */, + 187CD970712B0851A9470D28D04986D3 /* LayoutConstraintItem.swift */, + 3EA07675D341B40B3A11C882628547EF /* Typealiases.swift */, + 4F087BB3235520C3C84B06484C182445 /* UILayoutSupport+Extensions.swift */, + 1C04CC67740625319DA7C97E12910ECA /* Resources */, + 622934B9CAE3DACBEE4B31B53B7FEC71 /* Support Files */, + ); + name = SnapKit; + path = SnapKit; + sourceTree = ""; + }; + 622934B9CAE3DACBEE4B31B53B7FEC71 /* Support Files */ = { + isa = PBXGroup; + children = ( + 44070D625BBD8D72169C7EAC92037AAA /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */, + 932301FE559406FA40A9042558D4F7DC /* SnapKit.modulemap */, + 02E757561295961F2661E2AEDADB230A /* SnapKit-dummy.m */, + 4D47A9F8604BB1D7EE3F6CC46B6939B1 /* SnapKit-Info.plist */, + 319D35D1874FB0C1965D7307152759D2 /* SnapKit-prefix.pch */, + E4DA59576A1914BE355CDECE1AF3362D /* SnapKit-umbrella.h */, + 060CD185D2422C4062E0B14A26CF6596 /* SnapKit.debug.xcconfig */, + EBB442D86F1DE12D3FD514D2FA20776B /* SnapKit.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SnapKit"; + sourceTree = ""; + }; + 631BD496DF63A2DCE9DC72620F14231C /* Frameworks */ = { + isa = PBXGroup; + children = ( + D6ABB50E1DD67CD1F4172B92AB78FBC1 /* GTCommonSDK.xcframework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 63E726FE4761BFEFC79E1AAB77C7F136 /* Support Files */ = { + isa = PBXGroup; + children = ( + 4EEDDA2C8BA124FCC4F0D3BA74E7881E /* ZXSDK.debug.xcconfig */, + 7BD34BB4551BFE8B66525915EEC8A279 /* ZXSDK.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/ZXSDK"; + sourceTree = ""; + }; + 6407C2B50B084AD33143E72B9879A582 /* Model */ = { + isa = PBXGroup; + children = ( + 888BE989F91C6C44101C700B8DEBA649 /* OIMAtElem.h */, + 26E12650ACBFCF10361CA3BE989938D9 /* OIMAtElem.m */, + 44BDF7C88D11E13B365E3AF156FE327A /* OIMAttachedInfoElem.h */, + ED2816CD352689684AAEE79226E49047 /* OIMAttachedInfoElem.m */, + B1881949C33489CEE44FB1A8CE92D7EA /* OIMConversationInfo.h */, + 380D33A71478D6A19360DAADF01641A2 /* OIMConversationInfo.m */, + 02A8A43AAF8C972D6B0CCEFB283A10B4 /* OIMCustomElem.h */, + 58D60D2BC095F0CBD500F458C40B265D /* OIMCustomElem.m */, + 3486E48D7F4ECF13A667832E910CCC60 /* OIMFaceElem.h */, + 294772D1AC56A8AFBAFF4406865E8529 /* OIMFaceElem.m */, + 70CEF74CF654DC40CAA98E45E03634BD /* OIMFileElem.h */, + 3CAE77C1FDFE55D88382565774039932 /* OIMFileElem.m */, + 21539E4C77DD56C4E08819C238A77241 /* OIMFriendApplication.h */, + D7B97434434069C9B201866FE0542B05 /* OIMFriendApplication.m */, + 1B15C26343D5A8DE9B5A7A36BA7145FD /* OIMFullUserInfo.h */, + 70DF95CF1A956131DE522B1EC58F5D47 /* OIMFullUserInfo.m */, + 21EF815B6C34644A35D6B92C9DF3DCEF /* OIMGroupApplicationInfo.h */, + 7B842D2FB9E52687A1AF54CD9740A769 /* OIMGroupApplicationInfo.m */, + A45C3161BC7648F62303036FF3B350C5 /* OIMGroupInfo.h */, + DB1752A2DA09B80102258B1B4F99B43D /* OIMGroupInfo.m */, + 957C981964A435BDF75AB5CB24C17F0B /* OIMGroupMemberInfo.h */, + 020B0D8611C73B031357E9E91365C77E /* OIMGroupMemberInfo.m */, + 3CEFA599307C4B7B9E0ADBD31EC1E745 /* OIMLocationElem.h */, + 00CAC1B2D31769B3178F778D87E68816 /* OIMLocationElem.m */, + D43D3D49600F86D5154E1438DC7E9E53 /* OIMMergeElem.h */, + 0AA728D87B7F91C945463B669D4EAE5C /* OIMMergeElem.m */, + 368D0A9669610E6142622A7EBCBB1BEE /* OIMMessageElem.h */, + C0A885057A11B51887D16E84D82AF7A6 /* OIMMessageElem.m */, + F2F48E9C3DD021AFAAF173158C2BC249 /* OIMMessageInfo.h */, + 65A438944C929D5F4B8B213A41EE08D7 /* OIMMessageInfo.m */, + 52B031927313E161861104668E21A8DE /* OIMNotificationElem.h */, + 52E0CA4A9F089F647F586FB444DBEF13 /* OIMNotificationElem.m */, + 74C69FE3005EC8FA3F9D8FCEC50F6CC8 /* OIMPictureElem.h */, + BCBA512CDD9A14E3AE8881732D0ECCF6 /* OIMPictureElem.m */, + 06F77A9C4687FD3D84DFF005E7862759 /* OIMQuoteElem.h */, + 935291735FD863A36C3BB6A8BDF7A2F9 /* OIMQuoteElem.m */, + D79DA9ED5F22B3153EAF6FB853B9ABCE /* OIMSearchParam.h */, + B067C57685FF3EDC8CC9D9022087A8D5 /* OIMSearchParam.m */, + F3E14299379EB091FFF0667442E61240 /* OIMSearchResultInfo.h */, + 53CAB2921C752E78CA55B05D3BE85065 /* OIMSearchResultInfo.m */, + 02D4D5D1D01BF0456AD4F21C830F01BD /* OIMSimpleRequstInfo.h */, + 4B1B2B7ADF26863573179177D46607DB /* OIMSimpleRequstInfo.m */, + 5C6075D01B0C2D3160EF60C4BB2ED644 /* OIMSimpleResultInfo.h */, + C4C7C3A5F449BC7B132C23B891237D99 /* OIMSimpleResultInfo.m */, + 1E05D9021DDD8DE479F93C6DA29461F4 /* OIMSoundElem.h */, + 87D4B044B9175BC06CC0B9475C219755 /* OIMSoundElem.m */, + E6D908919FE42CF57972EE6C0A340195 /* OIMUpdateFriendsReq.h */, + 48235EA9287F0138124F456EEB881070 /* OIMUpdateFriendsReq.m */, + 0F9F954A9051F47DF3AA5D6404469F27 /* OIMUserInfo.h */, + C56F7B90029A72DEC58CF844484D77F5 /* OIMUserInfo.m */, + E1FB0CE6CC1C2683C361076E7AB82D61 /* OIMVideoElem.h */, + 8AFE49130DC59D5BB417170BC6782E91 /* OIMVideoElem.m */, + ); + name = Model; + sourceTree = ""; + }; + 65125F751B1074B953962EF5D01BA3D4 /* CocoaLumberjack */ = { + isa = PBXGroup; + children = ( + 54B6B9EE6CA79606EC2C8AD58B25764F /* Core */, + 8E4F21203E1D98F8A64D3A0DA7D801EF /* Support Files */, + 80701750BCDAB422005E1E99AFEA6530 /* Swift */, + ); + name = CocoaLumberjack; + path = CocoaLumberjack; + sourceTree = ""; + }; + 68E97B5CC8B872CEC377656733AA9CE6 /* sharpyuv */ = { + isa = PBXGroup; + children = ( + AE5E8976ED0958D0E88CF4130425A677 /* sharpyuv.c */, + 777F31EBF8D1DD8526D7F094EE35DAF4 /* sharpyuv.h */, + D9805B1AE674AAFF2B25D9BB35A39FCD /* sharpyuv_cpu.c */, + DAC1E692C3BCF796EC57061986DABEAB /* sharpyuv_cpu.h */, + 735D6AE5E93EF5DB28F313B462B8620D /* sharpyuv_csp.c */, + 8BC62A822F138AAB14F1F2BBD4FE0620 /* sharpyuv_csp.h */, + E740FA3F162A1BCAED41C634DEE0BBB6 /* sharpyuv_dsp.c */, + 9A45467E991A7D1E26A9A9CDD47E4EC3 /* sharpyuv_dsp.h */, + 42AAC5C25F48FDAE17B347BE4BC0FB10 /* sharpyuv_gamma.c */, + 0FAE7BDC15B4ECF9C5F5FD05C6AFD281 /* sharpyuv_gamma.h */, + 74B3D2B854D0C4E61AE93E1D37D28752 /* sharpyuv_neon.c */, + 41E3FAAD2234BC50D877D8712F227C53 /* sharpyuv_sse2.c */, + ); + name = sharpyuv; + sourceTree = ""; + }; + 6A1DF896831FAB9A457EECCA4F045D31 /* Support Files */ = { + isa = PBXGroup; + children = ( + DB20F139AA399040EFA01315E1AC09BE /* SDCycleScrollView.modulemap */, + A9BBAC281B464444D34803B8EA62BC18 /* SDCycleScrollView-dummy.m */, + 8D0909F96D750E913B07F7DFB71BDC38 /* SDCycleScrollView-Info.plist */, + B19F630A272C257D405F9A149FBC4460 /* SDCycleScrollView-prefix.pch */, + E31ABC3FC220CB286BD36808983A58C9 /* SDCycleScrollView-umbrella.h */, + 2FFD6FB05FFB92E52545C479B4BFCF7C /* SDCycleScrollView.debug.xcconfig */, + A27AA83F2845140359A4DB58C644F78A /* SDCycleScrollView.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SDCycleScrollView"; + sourceTree = ""; + }; + 6B8C3BD30F79877E090464B0E3CF84ED /* Support Files */ = { + isa = PBXGroup; + children = ( + AF976276672106FA581F52DF8576E905 /* libwebp.modulemap */, + 385A5B781881CF05DA0885623E2F500E /* libwebp-dummy.m */, + 775A6AD8F59EB8B8134F15DF8752882A /* libwebp-Info.plist */, + 73C08A3172542E0D72BEEF579CA2F246 /* libwebp-prefix.pch */, + D2168315CB9F6330A6402FFFDD1D6C30 /* libwebp-umbrella.h */, + 847E7B1F0A19709036E3E46F2089857E /* libwebp.debug.xcconfig */, + 2DD7CB878C4C7757197E5D41FE20B750 /* libwebp.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/libwebp"; + sourceTree = ""; + }; + 6B9B000CBA2C2C3B994B0679C462F810 /* Support Files */ = { + isa = PBXGroup; + children = ( + 6541D2507CA3DF55206B130B168633A7 /* SwiftKeychainWrapper.modulemap */, + A22F13325BAECE5E89A7635E627B97CB /* SwiftKeychainWrapper-dummy.m */, + 41F496A6B5F759F53792DE5EB4472DB8 /* SwiftKeychainWrapper-Info.plist */, + 258C47A66291BF50B67D2D63D3373BE1 /* SwiftKeychainWrapper-prefix.pch */, + 3DD1F18C6797FFFC1703236E67AD6096 /* SwiftKeychainWrapper-umbrella.h */, + 6AAD72F6BD76C26A980E1477F50D4DD7 /* SwiftKeychainWrapper.debug.xcconfig */, + 3C75D009CCCA844FCC9AB9C57F1EFD1F /* SwiftKeychainWrapper.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SwiftKeychainWrapper"; + sourceTree = ""; + }; + 6D810590AA2F2D22C6A7EAD01E8C7F06 /* RxSwift */ = { + isa = PBXGroup; + children = ( + 54C7EFF876F691F4BD0D240C539E241D /* AddRef.swift */, + 3841269555E945A5F05B6B656275018E /* Amb.swift */, + 5A5C6F735186CBB62A6EBD6ECB76858C /* AnonymousDisposable.swift */, + 4C7BC7D5D706A55CD1A71A40EB4D8F08 /* AnonymousObserver.swift */, + 34FD978A375670AC41396D2A0C366330 /* AnyObserver.swift */, + 30CCA1EB71E8556A17A5DB3D0EF72902 /* AsMaybe.swift */, + 93D9B635C959143CB4FFDC5AFF2342A0 /* AsSingle.swift */, + 4A2965AF467F1BD2E4E571F66AA1F8EA /* AsyncLock.swift */, + 7E2DC49BDFE9EC35541E7552286CEF5E /* AsyncSubject.swift */, + C73C04647C0D259054E566EDEDB52C13 /* AtomicInt.swift */, + FC8CC7E34BF7AAB97DB81ECFAE7D3BA4 /* Bag.swift */, + FD45EF31979AA82A13DD5D21DD34ADD5 /* Bag+Rx.swift */, + B76508B90B02228B7DEA4C69F78B18D6 /* BehaviorSubject.swift */, + F7CE0D06257484EC85831F397106980B /* BinaryDisposable.swift */, + AF1E1A17DAD75DE28EC1283BB21F7AD9 /* Binder.swift */, + A89F0017E752468FC04ED5B3CB8071A4 /* BooleanDisposable.swift */, + E9FBF3319C645F6D97915F2E5794574E /* Buffer.swift */, + 5E7BEBCBFE4F4167333289DF14E0C550 /* Cancelable.swift */, + 58786133E8B41F9CB8F1338AF6A58900 /* Catch.swift */, + 35D06090901658DC9635ABC2BCBFACEE /* CombineLatest.swift */, + ED3122A7683DD455BE085F8C321705DE /* CombineLatest+arity.swift */, + A05278B9761105500CD055B4C550BDC2 /* CombineLatest+Collection.swift */, + F9F8C9DA82FCCA7DED58B4421BDDA21F /* CompactMap.swift */, + 26D99830BD02D5E12946A9993FD9B433 /* Completable.swift */, + 0FAC0E0BC6370F8AC09DFB8E21DCDFCC /* Completable+AndThen.swift */, + C73EB33F3F32ABFF91A2BD8F436835E0 /* CompositeDisposable.swift */, + DDC69EBC09E79F4820A84FF0EE4B000E /* Concat.swift */, + 75705F5AA04E07912B9A7028B41CC240 /* ConcurrentDispatchQueueScheduler.swift */, + CF7AC93836316D77CDFA574E1609FB6B /* ConcurrentMainScheduler.swift */, + F2F5D4485890B56FE9E54491AF71F8DC /* ConnectableObservableType.swift */, + 2FA9E6EBAB2A16F4CB0E52505E665B07 /* Create.swift */, + 5965A14C526A41781295A6BBD345813C /* CurrentThreadScheduler.swift */, + 150E76117B97BF8CC0F969C82D1F8200 /* Date+Dispatch.swift */, + BAB6D3BA9EB2705C68DEC158FFD134AF /* Debounce.swift */, + 78407664800D43DC47B50BE2A39D946A /* Debug.swift */, + E667E711991991D7861A26A9AAD09227 /* Decode.swift */, + FEED446863E4D0E5C67019C24F146920 /* DefaultIfEmpty.swift */, + 6CEDFF8B9C44A6519EBCD6F47B0F262D /* Deferred.swift */, + 692E73A19B4EEA1D680D9F67D5718114 /* Delay.swift */, + 34853EDCAAF81DB2B6643A784E02B2A3 /* DelaySubscription.swift */, + 430D8BCB203E6FA33D34F430A850845B /* Dematerialize.swift */, + 233D806C4FEE853AA2DB63AC1F837D4D /* DispatchQueue+Extensions.swift */, + 540AF0A1A3033C4B8E1EA0CD46426BD6 /* DispatchQueueConfiguration.swift */, + 917B5AE204AB6A982EF8CB9D8A5555E1 /* Disposable.swift */, + 034243C340888689E6CC333E4A5514C8 /* Disposables.swift */, + 569BA4EC75A7753E8E96D8A92267A5D3 /* DisposeBag.swift */, + 59E77574A6D6A8484D6E798D4473D69B /* DisposeBase.swift */, + 908DC03A3D9216AB6FE7FE902C573A81 /* DistinctUntilChanged.swift */, + 964E1CEEC8EEF50447125EFF8F2C54A9 /* Do.swift */, + 8D0EC04DD6C08373446E1739FED2DFC3 /* ElementAt.swift */, + BAF3240D5C6054FC9088F120BCC0AE61 /* Empty.swift */, + 5F39BB06188020CC5D8E4980721C6AC2 /* Enumerated.swift */, + FE548559FF88988E65F345D73AA762B0 /* Error.swift */, + E3043900069A7BFFDBEFA4E3F38FBBC2 /* Errors.swift */, + 4B629D4BA0B10122B36F8D3078B38BA6 /* Event.swift */, + 751C8796E14CDA48CEFF8C95250759A9 /* Filter.swift */, + DD1620B77332357059766C062C7334E3 /* First.swift */, + 377728AD2BBD2505210A33E908AD69AC /* Generate.swift */, + 761EDCF2FCF03DCA3D4AAE68F1AFF4F6 /* GroupBy.swift */, + 110065EE86084581A6832FFCF7A27380 /* GroupedObservable.swift */, + C70EC81EB5E7986D89207A07B93295B9 /* HistoricalScheduler.swift */, + 482D2B3E2E595AC7494A2C02FBBBF93E /* HistoricalSchedulerTimeConverter.swift */, + 64FDE768BCD110D76CA31416FCD660DB /* ImmediateSchedulerType.swift */, + 04D5A1989D65FB214FF4699DF25DB42C /* Infallible.swift */, + F5A050AD03631811ECB18C196A9D21CC /* Infallible+CombineLatest+arity.swift */, + FAE9D676F02A2A0DAB13CF1AB99B5A4D /* Infallible+CombineLatest+Collection.swift */, + ED390F269F79FD6E16BA0CEEC761596E /* Infallible+Concurrency.swift */, + FA95392BD8532D881A2B0ADE65F10F5F /* Infallible+Create.swift */, + 0796F5670CD11B847772FE42520CD128 /* Infallible+Debug.swift */, + 7A4BFE94DC6BB805A8659EF7C8C4D022 /* Infallible+Operators.swift */, + 8C9BE70FD7A9924081AB7126CF05E791 /* Infallible+Zip+arity.swift */, + BE64907BB7CB5497C4B31C6437EA2231 /* InfiniteSequence.swift */, + FF0216C421365AD84F77ED22BEA23707 /* InvocableScheduledItem.swift */, + 3CF535FBA7A17C38D87E054E77B938BC /* InvocableType.swift */, + DAFFEE4F2543B08BDE4F5A2D9D9F9D6F /* Just.swift */, + 6E431C8A3F91F378151064C20F5B3FED /* Lock.swift */, + 0B419226841037EB005DD3984345CE25 /* LockOwnerType.swift */, + B29D086F596B924BFC34C5571585AB8B /* MainScheduler.swift */, + 7EE7CE374C8D7614210D1BBF61EE6A98 /* Map.swift */, + C066FC22BEEDC8272BC2A1BB6454B72F /* Materialize.swift */, + 51C4B6A72A5C25F467F679AA6756374B /* Maybe.swift */, + 242D474AEFBC6106539C37EB2710B154 /* Merge.swift */, + BEDC7B7D5DFCC3D589C9258A53C79C1A /* Multicast.swift */, + F2953C440B57675D5159D5D8B8AA7E00 /* Never.swift */, + 227F5DE5D7F361C0109ECD6AD1FED581 /* NopDisposable.swift */, + DF4F8D8EEF753E757F917C580AE90AF6 /* Observable.swift */, + 5520E606C013E1A2620E94D8169AF82C /* Observable+Concurrency.swift */, + 3BC91B6AC1E57B084227D354F0152109 /* ObservableConvertibleType.swift */, + 63A719DFAC9452911312006859FB59BC /* ObservableConvertibleType+Infallible.swift */, + A233DB53169F833FF0DC8F0A5692710F /* ObservableType.swift */, + 2FC8DE6CE3CC887158E8DC8331DFDB39 /* ObservableType+Extensions.swift */, + B1A66C060BA472F214129D41D55863B9 /* ObservableType+PrimitiveSequence.swift */, + 92ED2EB695BF51A59A9309EFCD8B7BAA /* ObserveOn.swift */, + D8CF20E73C6434D4119C8CA90DE8CE77 /* ObserverBase.swift */, + 4D526378FA358EC2F96BAC5D581EFC75 /* ObserverType.swift */, + 85FAC75B5F2BEA1511718CAA480E2ADC /* OperationQueueScheduler.swift */, + 3541337BA25DD5A16B674D1ACD6A6DF1 /* Optional.swift */, + 543767B9CF81EDA9400B0DF8D3EEE564 /* Platform.Darwin.swift */, + 1D750F4A680320BE56EF1BDB092B3066 /* Platform.Linux.swift */, + 4B3B1BFD01D9928B8320CCFBE483C0B6 /* PrimitiveSequence.swift */, + 5BEBC5BCFD6362440D9D4603E86772C0 /* PrimitiveSequence+Concurrency.swift */, + 4F3BA19563A1CD125A820FAECF01DAD1 /* PrimitiveSequence+Zip+arity.swift */, + 61CF6C543261C867ACCBC0ED36A257A1 /* PriorityQueue.swift */, + F894448A1A6571D3135218466860C95F /* Producer.swift */, + 601E4E3E77557AF9F95EFC7AA4B4CB27 /* PublishSubject.swift */, + C577C2D8E39F304146E0343775615D10 /* Queue.swift */, + D9E55D135AD87DB4E17C237AFECE26C7 /* Range.swift */, + 859AB61AB5CAC4F8321CE1373C70291B /* Reactive.swift */, + 95C9B78922BE02FFF53369884C14F1FB /* RecursiveLock.swift */, + B8FA084404ADC4DAA8462C55C53C1E1B /* RecursiveScheduler.swift */, + 1C91C661FD814F39CAB6325D8D4B7E37 /* Reduce.swift */, + B1B69283210E0A01B746270E17822A67 /* RefCountDisposable.swift */, + 9C4D61F01CE840F45DF6982F78033302 /* Repeat.swift */, + AC356DA22FF4E1FD88BD44E203B78566 /* ReplaySubject.swift */, + F75F21B2AAF7305696C0A8091C93874D /* RetryWhen.swift */, + BF48C90544457D818A3293740E7D49D8 /* Rx.swift */, + D4B1C2103D7684DB18D233B798D4561F /* RxMutableBox.swift */, + 572C33F4140022FE99118556F038018B /* Sample.swift */, + AAA1C252AB5B246A0A86CC016441BE5E /* Scan.swift */, + BA7C3B976B5FED44BFD89C3C0FBBE972 /* ScheduledDisposable.swift */, + C2ACDB20B7A0F28B516DC1D2EC6212E5 /* ScheduledItem.swift */, + 658B6C4630AA41F05C5A0BE18A041CEE /* ScheduledItemType.swift */, + 4AB1931CF524B963B8848089EAC19A28 /* SchedulerServices+Emulation.swift */, + BBD2DB39097CEEE8679B416972A73C59 /* SchedulerType.swift */, + 767C6D24F65E9C5553D193CDDA8BAE82 /* Sequence.swift */, + 1264E6B84B65131BAEEAC3BA08283C42 /* SerialDispatchQueueScheduler.swift */, + 6ACF591CB08ABFD9EC45A948D394EBDD /* SerialDisposable.swift */, + 4CC6AA20493473721AA86C0A1A50A8DD /* ShareReplayScope.swift */, + 094C068E414026C8CB65CAC50AAE5C84 /* Single.swift */, + 2FE743B0489172B9D8AFCA90B825A0C6 /* SingleAssignmentDisposable.swift */, + 7F89B5CA6977567E0293D9A72DCB921A /* SingleAsync.swift */, + 846E1E84BB431FCF9858146EC42AB802 /* Sink.swift */, + 5B9D8C163A245DEBF92CAC1EA5471D36 /* Skip.swift */, + D27DD767F6F3E75D625CE059F48E6518 /* SkipUntil.swift */, + 2D5A618038C5542D4884F2ADAEB84259 /* SkipWhile.swift */, + 2CE9DBE9C323FFDFD3869DAF5A13CFF9 /* StartWith.swift */, + 570E6DBF4A44E5546A3C965D9E18073A /* SubjectType.swift */, + E7C11B2A9E8F8B341AEA7B362E23E7E5 /* SubscribeOn.swift */, + F2D30AFD0DABC502445D62AAE24594DC /* SubscriptionDisposable.swift */, + 15B4330482D87D40C8FC65666CF75DD1 /* SwiftSupport.swift */, + A48AE4B983D1A1F6626A2B7F77DFA6B2 /* Switch.swift */, + 65867AB26CF8515F87512779D35AAFE7 /* SwitchIfEmpty.swift */, + 7FAFB9102A7821804A603A0AC1AE1A19 /* SynchronizedDisposeType.swift */, + 8D9E14EEDE501EE2045A8F5EF26EDD10 /* SynchronizedOnType.swift */, + 147C5981170C19FD63555EC085839A12 /* SynchronizedUnsubscribeType.swift */, + 362ECCD2645D282758EFF964B9C6ABA9 /* TailRecursiveSink.swift */, + 721C8DFB2C522F383CCF147731D6C8CE /* Take.swift */, + 1FDBE017ACEAAA8AB1BCF651DB668698 /* TakeLast.swift */, + 7C6318E30F642CCF4DCF9EB42BEBE4A9 /* TakeWithPredicate.swift */, + 719C9CE13C261293D1AE894B5DA81EB7 /* Throttle.swift */, + E103C1EB95D05A5113B2717FBA2379A3 /* Timeout.swift */, + 6E4DF96474119089881BF2A330AB1728 /* Timer.swift */, + F723E0730199FB22CB10297CB86034E7 /* ToArray.swift */, + 8260423FE880738627BA58E39088AE6C /* Using.swift */, + D8C4C72BC795A5A37AB73555B0E71B23 /* VirtualTimeConverterType.swift */, + ACCF599458E42F9D6A4C0F3BE13220BF /* VirtualTimeScheduler.swift */, + B1840F6778BA7A0E6406875B5666EA43 /* Window.swift */, + AB1C61EFA6F55C5182E8D76C343977AC /* WithLatestFrom.swift */, + 79B63F73A0E96CFFC29D7CA1F042FF88 /* WithUnretained.swift */, + C945AE6B7986CFDFCD103CCDC547424A /* Zip.swift */, + 27DD104205E990BA251147A8755AEFCE /* Zip+arity.swift */, + 36D13BB9A77FB2ADAE7FB83B1A7DCFB4 /* Zip+Collection.swift */, + CE7B4B561955B2023D81ECA3371E7D86 /* Resources */, + 29405DD8F64F6FB41A395D9CC6104EDC /* Support Files */, + ); + name = RxSwift; + path = RxSwift; + sourceTree = ""; + }; + 7225DE4BF55596FE18C9422685DFD972 /* Support Files */ = { + isa = PBXGroup; + children = ( + 3BB45BC95DC9AF301D42F5B0E83A6F91 /* SGQRCode.modulemap */, + 2A02BEE14F8A62CDC43C3565AB0E2869 /* SGQRCode-dummy.m */, + A4003189831C8739B8012FBB644D89F4 /* SGQRCode-Info.plist */, + A80EC926E501D239E1C011FDAC48CB5B /* SGQRCode-prefix.pch */, + 1E1CA4230DC2DBBA4DE46A15D56461F6 /* SGQRCode-umbrella.h */, + 29B8A8985447E4E7823241EE353B3F48 /* SGQRCode.debug.xcconfig */, + 8F6C4B32F8545FD29CC3B33741AFBEDF /* SGQRCode.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SGQRCode"; + sourceTree = ""; + }; + 745A4C25FE9F7A927352F897E4FBED48 /* Support Files */ = { + isa = PBXGroup; + children = ( + 0972D3FDA84177E303FB5119120A366C /* YBImageBrowser.modulemap */, + B4781B29919C35D2A949B67A8CA17D3F /* YBImageBrowser-dummy.m */, + BAD9B38243361F92E1740F0543B8738C /* YBImageBrowser-Info.plist */, + 20DB58A377C820207F348BB5D7594CF2 /* YBImageBrowser-prefix.pch */, + 19AC9477C2E6EE717E2515047C572475 /* YBImageBrowser-umbrella.h */, + DEDA766A20F0E865ABB8743367B99D4F /* YBImageBrowser.debug.xcconfig */, + 97EF826E6048C875FF0150EBB63D62DA /* YBImageBrowser.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/YBImageBrowser"; + sourceTree = ""; + }; + 755116D0EC3DDB3340553AD7B2F9FF30 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 4E65F085B0A0714C132C36302B52DEF4 /* WebP.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 763A9448445192689F3CB9A1C7369710 /* Resources */ = { + isa = PBXGroup; + children = ( + 0A34DFF17E01BF9AA5F87F3E3FADCC7B /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 7670F38C1F6FAE80A9D3DF43B0710DFD /* MBProgressHUD */ = { + isa = PBXGroup; + children = ( + E57A882004E9DFAFD797700E1B5608FB /* MBProgressHUD.h */, + 8ED125D7528257024B809AC5B68197AE /* MBProgressHUD.m */, + EAF84AD095D72F6E0529578F7284CCFE /* Resources */, + 1CCD02D2E10EF5E63B685645A6CE4A25 /* Support Files */, + ); + name = MBProgressHUD; + path = MBProgressHUD; + sourceTree = ""; + }; + 776B5450F1DB91088FB2FF13F80D1592 /* YYImage */ = { + isa = PBXGroup; + children = ( + A9630CAF4C13F51DE80F8E912B554343 /* Core */, + B61EAB15AA2E76A18994477CCED07F62 /* Support Files */, + B89794099D83C1B271367D0889DF0174 /* WebP */, + ); + name = YYImage; + path = YYImage; + sourceTree = ""; + }; + 77EE6C1CA93C8DE4E5EC3459F5EBD036 /* SGQRCode */ = { + isa = PBXGroup; + children = ( + 54CE1D0923681693A97900F260F5D57A /* SGGenerateQRCode.h */, + 40BC21F8CF8714BDE827D23C7C0AA1FF /* SGGenerateQRCode.m */, + 9291056517CD88E650D02DBF191884B9 /* SGPermission.h */, + CF88F372EC85C9D417C7FD9226BE7F3F /* SGPermission.m */, + 254F53AF9EDB6FBC8B5E1899B6E3CFB4 /* SGPermissionCamera.h */, + 27AAEC8EEACDCAE86C246C18B522A943 /* SGPermissionCamera.m */, + 7F7204C6CC49121008516C4035FC5C9F /* SGPermissionPhoto.h */, + 07063D265D80CED41E96A7C82AE2DDDE /* SGPermissionPhoto.m */, + CE2D181860A376B53B945D2F66652716 /* SGQRCode.h */, + 8095762029B20322EA90B44A9EC7A0B2 /* SGQRCodeLog.h */, + 2FD7EEBE586F6B453B12A099DEC36BF7 /* SGQRCodeLog.m */, + A1DA6E0CC1D2FAF481390FDF49CB9EE8 /* SGScanCode.h */, + 35129EBA9B173E46DF2F6DFB335E986C /* SGScanCode.m */, + 28BE02DA192D2F9168548C9F3E648036 /* SGScanCodeDelegate.h */, + 429D673B66BF996BECCA85690BDC4240 /* SGScanView.h */, + 691FEC0751A0CEA25959BCE082FC3B97 /* SGScanView.m */, + 6D40C7E7A6B409DD2DD2897EE900996D /* SGScanViewConfigure.h */, + 9A41343F97BF0D399ADC1E9711D86A22 /* SGScanViewConfigure.m */, + 9C5F06A8E927D1486C8E2BE4C3CEF5B2 /* SGSoundEffect.h */, + 6E6F7400F823325A0BA8E1444E705B35 /* SGSoundEffect.m */, + 240416C6EF8122892481AB95ECC4CDC3 /* SGTorch.h */, + 9ABFFC2EF84C27BEA54CF8DD10F38B28 /* SGTorch.m */, + A91A77B1FDA08F75874435E05D67FD40 /* SGWeakProxy.h */, + 176B5986B4C5F9E607A7F9872F4E9DBC /* SGWeakProxy.m */, + 7B83DEB64A679673D7D9BC3289D0A787 /* Resources */, + 7225DE4BF55596FE18C9422685DFD972 /* Support Files */, + ); + name = SGQRCode; + path = SGQRCode; + sourceTree = ""; + }; + 792F48C1121F4C4727C83EED0CED5BEE /* Support Files */ = { + isa = PBXGroup; + children = ( + 102CF3B2B65C514D576D47BFFCF62BC0 /* lottie-ios.modulemap */, + 0E4A78CC3124C5516228374A8AB619AB /* lottie-ios-dummy.m */, + 1E29117C308DA807E6BE6C9C78F377D1 /* lottie-ios-Info.plist */, + B29CF7E5994BAA7457551E8424B43AD9 /* lottie-ios-prefix.pch */, + 1358D7123BAC8C0A76B45D29BF04C27E /* lottie-ios-umbrella.h */, + CE9FDBE3DB1A26028345DD54F26D62B7 /* lottie-ios.debug.xcconfig */, + 5A225B67BF641EECDAE555557900F543 /* lottie-ios.release.xcconfig */, + 8D61DEE548FF6B9874EB886B0630F353 /* ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/lottie-ios"; + sourceTree = ""; + }; + 7B83DEB64A679673D7D9BC3289D0A787 /* Resources */ = { + isa = PBXGroup; + children = ( + 40A7089ADE900B568CDC7B11FC4C263B /* SGQRCode.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + 7C81E329A6BD035AE9697150B2EE7923 /* IQTextInputViewNotification */ = { + isa = PBXGroup; + children = ( + 836495F110F408D974AF64E8A7A6D754 /* IQTextInputViewInfo.swift */, + B58670AC2A6C221479AB2BFF0856B066 /* IQTextInputViewNotification.swift */, + 0FE790F74D50D08C4BB7FCA949573505 /* Resources */, + 29D9D99885D1DFB30DC95AD7C11467A6 /* Support Files */, + ); + name = IQTextInputViewNotification; + path = IQTextInputViewNotification; + sourceTree = ""; + }; + 80701750BCDAB422005E1E99AFEA6530 /* Swift */ = { + isa = PBXGroup; + children = ( + 1B0F792B49D07BDC668FEA0FEE1D35C1 /* CocoaLumberjack.swift */, + 5BEA2B127E818A0484E4A0EED9286EF5 /* ConfigurationGlobals.swift */, + AEA62DA3B37F8C57C82A14C0101890F3 /* CurrentFileNameHelper.swift */, + 19B267246ED5549EBC604DE7947CDE89 /* DDAssert.swift */, + B81878181733515C615DB48F037DC03E /* DDLog+Combine.swift */, + E964CE79E7B4729FBA8FB44F8D76D8C0 /* DDLogFlag+DDLogLevel.swift */, + 238363420B18595D15E9E84CC3740DB3 /* DDLogMessageFormat.swift */, + BAD8A328CB6EDF375064B5BEE7F65B87 /* SwiftLogLevel.h */, + ); + name = Swift; + sourceTree = ""; + }; + 80FE7852630087320C1B2A41A4C620BF /* Alamofire */ = { + isa = PBXGroup; + children = ( + C6AA4F5CE1C7962178B6099FA00101B4 /* AFError.swift */, + 3F79F59C81E9BD55D2300957A95BFEE2 /* Alamofire.swift */, + 06C8D5A6462C9B25ACD0B162347F8166 /* AlamofireExtended.swift */, + 1EBE8A67D212304EE2620BF3E7B9160A /* AuthenticationInterceptor.swift */, + D337FF64DAB0EF1DCF5E657FD4FA25D3 /* CachedResponseHandler.swift */, + D9A16E733FC1E5FE0D380BACDD771918 /* Combine.swift */, + 6FC3E4E3FE9B243927547B8B3D39931C /* Concurrency.swift */, + 4A22DBEDA2395191F537EFCBEB528C98 /* DataRequest.swift */, + AD34B51B09467734D0CC3DF50AAD4BDD /* DataStreamRequest.swift */, + D1023870AD95A079CF71B1619FF07463 /* DispatchQueue+Alamofire.swift */, + 3DD12149762F4B3855CF74E1E89307DD /* DownloadRequest.swift */, + DF3B0FB9898350076BE5086B8A648CA0 /* EventMonitor.swift */, + ABB48555987725F3F2DAF0B81D478F17 /* HTTPHeaders.swift */, + 7E4A8A666F6AF1C7AB6EF523E556900E /* HTTPMethod.swift */, + 57CD8A4DBF03A8134B3DF489CCC344E3 /* MultipartFormData.swift */, + 1DD2EEC1DF1BF388D4AF543887D09A83 /* MultipartUpload.swift */, + 4E1B70895E7D4B191C6A7482FF45BC2E /* NetworkReachabilityManager.swift */, + FE6FE100A253357F7FFFAAF9AB9378C4 /* Notifications.swift */, + B75F8EA27F5A661B3123631BB2649458 /* OperationQueue+Alamofire.swift */, + F13144DC6F4AB1AB855A41E59B26EB68 /* ParameterEncoder.swift */, + 7EF9D3B110D82B8135F84345D73A0B28 /* ParameterEncoding.swift */, + CC26C4F91EEB4297476C8D0F8B4D97BA /* Protected.swift */, + 846DE591BA61F5776BFB4F91E09C69AE /* RedirectHandler.swift */, + 6F8206ABFEFF019F1EA61DE7AADF9462 /* Request.swift */, + F2DA3850B293BF553D6E776C8DE0A579 /* RequestCompression.swift */, + 682DF2A9B09E750ABE7655327548340F /* RequestInterceptor.swift */, + 41ADAA54FC8D80364D38BC19F8E41595 /* RequestTaskMap.swift */, + 80618672C78CE395D2916A8BD993BDAE /* Response.swift */, + B87219E2EAC813A4BC04BD1792CFAEE4 /* ResponseSerialization.swift */, + BAE70D15CB0E723B27BCADCA5F142B7B /* Result+Alamofire.swift */, + 77FD67ABAAE7C891D12DD57D0E9D1D83 /* RetryPolicy.swift */, + F3BAA05F975BDBFD9DB5397876D7BA25 /* ServerTrustEvaluation.swift */, + B2E98E412F65A94B34FCD32839C494DA /* Session.swift */, + 3FED4232B22574120FFCBC78B2130061 /* SessionDelegate.swift */, + D5FE6488A1A339DC17ED5A3C860C6FE3 /* StringEncoding+Alamofire.swift */, + B9E6296C6B08253BA23FAA38899D184E /* UploadRequest.swift */, + 6BE1232171B86E58A95A465EF0D69CEA /* URLConvertible+URLRequestConvertible.swift */, + 99A57B66940EB146F742E55C77359AA8 /* URLEncodedFormEncoder.swift */, + ACD9E6D9D77A4F9B1BAA53135CC21EF6 /* URLRequest+Alamofire.swift */, + 3EFC0DEF7F6680D04A5987FBBF719161 /* URLSessionConfiguration+Alamofire.swift */, + 80462D2D5DC6C1F74F611C1A70FA0A5F /* Validation.swift */, + 97D8DC7E7FCCA6B36A398A4130916FF5 /* WebSocketRequest.swift */, + C20F07A7207DE59DBA76303351A7F8BD /* Resources */, + 817F1F5F9E85B53350E25BA657A0A8BB /* Support Files */, + ); + name = Alamofire; + path = Alamofire; + sourceTree = ""; + }; + 817F1F5F9E85B53350E25BA657A0A8BB /* Support Files */ = { + isa = PBXGroup; + children = ( + 16DCBA13E1A91EBF16B2E98581173E18 /* Alamofire.modulemap */, + 2ABDDD2F889B1861B14D2F1D61F16BA8 /* Alamofire-dummy.m */, + 7CA97CA9D5066B3D28CB8DF6B80E1E22 /* Alamofire-Info.plist */, + FB775925FBA9D3D17B378BF4CF8672D7 /* Alamofire-prefix.pch */, + BA471A54694354CA0D84E2A452949610 /* Alamofire-umbrella.h */, + 00BB87520D0D647F6D66C9FD25D56504 /* Alamofire.debug.xcconfig */, + 8960813343F218D2D666299190D67ABE /* Alamofire.release.xcconfig */, + AA7C0D3305D9B7A84E20C191529D4645 /* ResourceBundle-Alamofire-Alamofire-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/Alamofire"; + sourceTree = ""; + }; + 83E626F61C8B74E4A4E472AF4DA1B54B /* Resources */ = { + isa = PBXGroup; + children = ( + 635325A329D375088E730F34019317A0 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 857BF1F8D1303285AAF3ECD76747A2B9 /* Resources */ = { + isa = PBXGroup; + children = ( + 6658B8DF65726B2667DA2082D95CDE2C /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + 85B1E4EC1A97067A50E27785FFF4EB42 /* Support Files */ = { + isa = PBXGroup; + children = ( + E016D4B4D2A3A743CC8BD94D83B28D78 /* MJExtension.modulemap */, + 727FFC6D0A7BEFB9E947E7D5FEB69455 /* MJExtension-dummy.m */, + 8F244BB88E281861AA961B0B8B7F3FAC /* MJExtension-Info.plist */, + DD3A5896FE343343349FD8AFEDECA6F3 /* MJExtension-prefix.pch */, + E1B0BBCA140DCBB401B2DB7E116FC93D /* MJExtension-umbrella.h */, + 3E7390C91862B0B79A6128AFE4A9B5F5 /* MJExtension.debug.xcconfig */, + F5929496387F8B541C21CC51C6AAF115 /* MJExtension.release.xcconfig */, + 7C8894A5DD9B48BB8E9CAA4880FE51C1 /* ResourceBundle-MJExtension-MJExtension-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/MJExtension"; + sourceTree = ""; + }; + 866278242C7A5B979A23E63E21719FE3 /* Appearance */ = { + isa = PBXGroup; + children = ( + 71A3AA46FA62EF3D23F05187F1EA1CD0 /* IQKeyboardAppearanceConfiguration.swift */, + C068E1B38BFB93E75CB74A95D3FAC3A4 /* IQKeyboardAppearanceManager.swift */, + 1661F2067BAE2A0A0E5D6C5585A309D4 /* IQKeyboardAppearanceManager+Internal.swift */, + 530D37E6D2B62B3C6E8375CD070A1ED6 /* IQKeyboardManager+Appearance.swift */, + AED21DA327E29BB41B917FB1E341C399 /* IQKeyboardManager+Appearance_Deprecated.swift */, + ); + name = Appearance; + sourceTree = ""; + }; + 89982FE6845276AD7CB7B77D6DE60F37 /* CallbackProxy */ = { + isa = PBXGroup; + children = ( + A99EBE5E9E3CAA905EC6539367F7792C /* CallbackProxy.h */, + 55A50E8CBFB62149F0DCE7D564030662 /* CallbackProxy.m */, + 397F90741022772F19158E4EB60AC6C5 /* SendMessageCallbackProxy.h */, + 03EEA40526D078ECA2261B80DFC83B93 /* SendMessageCallbackProxy.m */, + FFEF543AD54697BFC217DAF8CAB97D91 /* UploadFileCallbackProxy.h */, + E3AEA4903A4A524064387947E97A51C2 /* UploadFileCallbackProxy.m */, + ); + name = CallbackProxy; + sourceTree = ""; + }; + 8DC7B97A296FA6467418938125A62098 /* MarqueeLabel */ = { + isa = PBXGroup; + children = ( + 9F98F9817B280E58C08FC6A1993D49FA /* MarqueeLabel.swift */, + 1ED39D70B77D04A440300E85A5468541 /* Resources */, + 439E0194679A65B117123D3D6E32A879 /* Support Files */, + ); + name = MarqueeLabel; + path = MarqueeLabel; + sourceTree = ""; + }; + 8DDB28579890664F7606B8D9B6AA6B47 /* Placeholderable */ = { + isa = PBXGroup; + children = ( + 7928401BE8E30C66EE3ADE8DD8F0B52D /* IQPlaceholderable.swift */, + ); + name = Placeholderable; + sourceTree = ""; + }; + 8E15EA679BF9F5A8307EE74456EB0B64 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 12044D27E9FC771C5C3AF8F57F2D37C1 /* AMapLocationKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 8E4F21203E1D98F8A64D3A0DA7D801EF /* Support Files */ = { + isa = PBXGroup; + children = ( + B77EF20CA7687CBA14FE0DDB7C8EBDC2 /* CocoaLumberjack.modulemap */, + 7B82EBD3E153DBD61BEBCBDBDA0605C7 /* CocoaLumberjack-dummy.m */, + 09D14340A7DE0DC69768143F4781EF5A /* CocoaLumberjack-Info.plist */, + B5546FF2CD7193A96888BDF496E32BAB /* CocoaLumberjack-prefix.pch */, + 316B60AE42434791E20A83CEC6A09383 /* CocoaLumberjack-umbrella.h */, + 1716B1D0D70C770AC24EDDD4C69E194B /* CocoaLumberjack.debug.xcconfig */, + 4471EC3FFF68A5CB2C39BF14527FC3D8 /* CocoaLumberjack.release.xcconfig */, + DB4E4ECB3B5E8C8B4E15FCD674B35148 /* ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/CocoaLumberjack"; + sourceTree = ""; + }; + 8F4E6974780453B057FE5CEA6D6A847A /* Support Files */ = { + isa = PBXGroup; + children = ( + A1DCF093CA16431C64ED20AF66EAB4DC /* Masonry.modulemap */, + D234CC248B770A58420B85F0D51049CD /* Masonry-dummy.m */, + 19C4C26FFF512354F4D686A50594A869 /* Masonry-Info.plist */, + 3FBB5BAF1EB447A1809BF7973FC37468 /* Masonry-prefix.pch */, + 4CE033DD89D2C7F468E6CF4145EF8AB3 /* Masonry-umbrella.h */, + E078D2663D3DCEFA605A0BE7820890AE /* Masonry.debug.xcconfig */, + 217E00EF02173DE5AA3D621B58AD5EA7 /* Masonry.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Masonry"; sourceTree = ""; }; 8F6F1E156F7DCE4CC0B44D3F8A208E68 /* Pods-QuickLocation */ = { @@ -8499,804 +8148,1535 @@ path = "Target Support Files/Pods-QuickLocation"; sourceTree = ""; }; - 921FB6D8D5BA26D8F32232770876F4B0 /* Resources */ = { + 91CAAEEC66E3AB60BDA2A9A0B31DAF2A /* SwiftDate */ = { isa = PBXGroup; children = ( - C028AA7709CA95FD821510CA4D1F151B /* AlipaySDK.bundle */, + CE234EDBBA854CE992A10F0073B4502C /* AssociatedValues.swift */, + D7E778E7BD5CE4AAFAD2713C620AF5E0 /* Calendars.swift */, + 7EF8EEB5237176128E14B293533A72C8 /* Commons.swift */, + 81EBE4E4D49DF7168E5925FA02B2916A /* Date.swift */, + 2994D8B96A2BDBA3F7FDC7E3829339CC /* Date+Compare.swift */, + 4E1182014BA99CB0BFD1ED56B36F4889 /* Date+Components.swift */, + 675B4C11F7B590880C77E8AAEF1F3A60 /* Date+Create.swift */, + 3A24B45B99DABB55846B35CC63B19366 /* Date+Math.swift */, + E7C46C3987E417EC909753A8454CF13B /* DateComponents+Extras.swift */, + FA082DF76C288109730ABA3263B7E26D /* DateInRegion.swift */, + ADDB1F578A79A46460968775A7A8BB7C /* DateInRegion+Compare.swift */, + B773BB9FAC093187BA138848D154492E /* DateInRegion+Components.swift */, + F35C928F53F26BC77F3325C5C0D4FAB7 /* DateInRegion+Create.swift */, + 3F20D74BF18F61F2F8043E9BB9261874 /* DateInRegion+Math.swift */, + D9B0C75F024986060AABFDD7233FC611 /* DateRepresentable.swift */, + A4739742911C8301AAE3EF467466767F /* DotNetParserFormatter.swift */, + 57893FB92C503783316937718B7D6CFE /* Formatter+Protocols.swift */, + 001CAC5B0387F752F807373679700C1A /* Int+DateComponents.swift */, + AF9289DFE96B0D477395C1AE2E955C29 /* ISOFormatter.swift */, + 13E455DA64F34549C2DF36123E908D73 /* ISOParser.swift */, + A989C2079B8C5E48A3BFE36041C1D718 /* Locales.swift */, + 325E7C92D696471576D9735C82973FFD /* Region.swift */, + A0A7A20E96488707B469EF7CBE0AEF37 /* String+Parser.swift */, + 7A3BD5869D2B1C7A4FBF323D773D9E1C /* SwiftDate.swift */, + 5C6F7913A879E3C937BA173A6E58EDBC /* TimeInterval+Formatter.swift */, + DFF623CF9D4FF72AB1D21B2441FFEE76 /* TimePeriod.swift */, + 97AA22B3EFF347E5FA01A0D40617FA36 /* TimePeriod+Support.swift */, + C4457220F18221DEEE691C455779CA75 /* TimePeriodChain.swift */, + 208AFEA3CC5DD10476B29311F5E8F3EE /* TimePeriodCollection.swift */, + 3D5452FF8CDB97481CA818937F4AA899 /* TimePeriodGroup.swift */, + 706126F07CEBF1B19EAA3D54064C3002 /* TimePeriodProtocol.swift */, + 15CF4020595F378B3FBC56EF16E33756 /* TimeStructures.swift */, + 076D230EE2230FCE5631F7FF4CE38942 /* Zones.swift */, + FFA90A54CF1FB8501D2D40721BC02ED1 /* Support Files */, ); - name = Resources; + name = SwiftDate; + path = SwiftDate; sourceTree = ""; }; - 922C4D794D5DA21F27DE371A32C81DC9 /* AlipaySDK-iOS */ = { + 9302ABDEEAE1E23B6BE7B4D3ED467269 /* URLNavigator */ = { isa = PBXGroup; children = ( - 10C9798C964CC79A5087E94A601C1F14 /* Frameworks */, - 921FB6D8D5BA26D8F32232770876F4B0 /* Resources */, - 45F0B9ECB870C481059FDD419A46F91D /* Support Files */, + A1249BF2812DDEF7380FB54875C83716 /* Navigator.swift */, + 9A60D3136A08EC0C773382CEE7C49B14 /* NavigatorDelegate.swift */, + BAC22EE2D24B29FFE5B322BDA4188153 /* NavigatorProtocol.swift */, + FA3223D73145E787B1981391FD710DAA /* UIViewController+TopMostViewController.swift */, + A7E0219D96D197D256967A214677AE6B /* UIViewControllerType.swift */, + 011AFAA206FF4A0E965B6A9437F4A8E6 /* URLConvertible.swift */, + 69996CE0C975FE55FEB5941358F9A2D1 /* URLMatcher.swift */, + 52A20B3BF7B48A758BC8D999EB4539AE /* URLMatchResult.swift */, + 5593B53EE9179304F30998CE87A02732 /* URLPatchComponentMatchResult.swift */, + 8E25ED01381098B01A662D40ED3B1C5E /* URLPathComponent.swift */, + 3DD3CA31C0E01928E70F135DF21E91FB /* Support Files */, ); - name = "AlipaySDK-iOS"; - path = "AlipaySDK-iOS"; + name = URLNavigator; + path = URLNavigator; sourceTree = ""; }; - 972E5EC9A62033D326264F0F98074964 /* Support Files */ = { + 93AFB13EFAA869C5FE807153A8A61064 /* AMapLocation */ = { isa = PBXGroup; children = ( - F7966531A0183DE2C6CC53DBCA688E00 /* Moya.modulemap */, - 86886A733B89F9C049C049AF30166EE7 /* Moya-dummy.m */, - D3BF4F0F1230764811DE5441812E7D81 /* Moya-Info.plist */, - F210D2D653C03CF3DBACFBE1DAEBB5E6 /* Moya-prefix.pch */, - 26C805396EBE9A3676570EE86EDD4E85 /* Moya-umbrella.h */, - 3D3A69BB5C302A89D95825EEBCFE3F76 /* Moya.debug.xcconfig */, - 9C13E6FBDDAB97317E0522724037E9E2 /* Moya.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Moya"; - sourceTree = ""; - }; - 9AA229A44FED65851AA309B6B73724C8 /* Support Files */ = { - isa = PBXGroup; - children = ( - 642B181C4A56014302CB2E2CA604D881 /* ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist */, - 20FEFFB46CDB20A45D5D9381DA903496 /* RxRelay.modulemap */, - 95F037BC936089687A0571DF3857C90B /* RxRelay-dummy.m */, - 559EB65974650632BD59D0C0A9472C5E /* RxRelay-Info.plist */, - B620E23545E5CA00BFEFA93D97FBF1BE /* RxRelay-prefix.pch */, - DB08296A6F18F928A00EC7AFDB47E3C1 /* RxRelay-umbrella.h */, - 69987DF0C0EF80F634B3BFF7171C82B1 /* RxRelay.debug.xcconfig */, - 80B6A76BDBFB76C791769481A45315DB /* RxRelay.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/RxRelay"; - sourceTree = ""; - }; - 9F23C9A2C862A7761153F64FC8E53794 /* SGQRCode */ = { - isa = PBXGroup; - children = ( - E1DD7D29BF1FE1A9B3EA3877C3D2A929 /* SGGenerateQRCode.h */, - 837E21014C5382624DE0924B4AA99FE0 /* SGGenerateQRCode.m */, - ABAA6161220738159EA6407CD6D75B1C /* SGPermission.h */, - 4DD2273F4ADC8FF6EB64FA7E9A31E108 /* SGPermission.m */, - 2E084374ABF7B54C419FC9A80C6AA656 /* SGPermissionCamera.h */, - 977D96FA02CBC7EE86913380335CAEE9 /* SGPermissionCamera.m */, - 35375E5ADCE5DCF4EBBD0DD0B80966E4 /* SGPermissionPhoto.h */, - EE3AF8CF71094C3214003559DB10B3CD /* SGPermissionPhoto.m */, - B09F2B014F2F335A6DD1960BA5E604AF /* SGQRCode.h */, - C5E3669AB59288D37DDEF78C1D1789C8 /* SGQRCodeLog.h */, - 045E796AEE22999EA4184E68E9B7F8E5 /* SGQRCodeLog.m */, - E9603A4E8FF5FF21DE3C230D19267661 /* SGScanCode.h */, - 5EFEC4792E6AE843B581D17FC92072A0 /* SGScanCode.m */, - 541168B5F63506CE532597108DD96983 /* SGScanCodeDelegate.h */, - 6491D6CBC9BF383CD1D2778BB5EE5732 /* SGScanView.h */, - 606D6DE0357D8862B257CC628D6256A6 /* SGScanView.m */, - 87661C0964375E9E5AE8195C668A957E /* SGScanViewConfigure.h */, - A10D88129CFDA405482F878874F048F1 /* SGScanViewConfigure.m */, - 612B3D3A7C5E1084E5EF5EC8A5C44A27 /* SGSoundEffect.h */, - C8317EDB1958C164EFD8B633A18F397F /* SGSoundEffect.m */, - 89178DBDEDAE6B75FB7DB74297B2681C /* SGTorch.h */, - 884E6940DA4CC32666F2FCBF618682DB /* SGTorch.m */, - E517A2C282848FD3AE6C7353C8CFAEEA /* SGWeakProxy.h */, - 51C1A964478BEE6F4C1DE2808C0CB83F /* SGWeakProxy.m */, - B7B0FCA22ABC96D08805C7BBFB354A55 /* Resources */, - 27051B64C26EB0CDE32F75D2844F36EA /* Support Files */, - ); - name = SGQRCode; - path = SGQRCode; - sourceTree = ""; - }; - A0BE7DE0F770AF3D3C34A3D4430737E5 /* Support Files */ = { - isa = PBXGroup; - children = ( - 5AD1ACB4D0E1933E41E73484E8ACF882 /* ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist */, - 4B3F4F75DEDBE40BA5CC5D419F97FA1F /* SnapKit.modulemap */, - 4301E59E401F1C6F4638E1B62F53C1DD /* SnapKit-dummy.m */, - 641158A1573E7A37BD70DE32A4512D60 /* SnapKit-Info.plist */, - 424C1229D81117AFB23943DBBE7C4DCE /* SnapKit-prefix.pch */, - 673FBA63F9F3560B749DE95F0776152C /* SnapKit-umbrella.h */, - 0FEC85C5E00BEEAFA0B609E7B5609E94 /* SnapKit.debug.xcconfig */, - CB11F69CDAC50ABF5A1340AA052D39B4 /* SnapKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SnapKit"; - sourceTree = ""; - }; - A1787D86241D5231123FE52CE70DB675 /* Support Files */ = { - isa = PBXGroup; - children = ( - A7CC3C827AC34942AB71C3500296EC33 /* IQKeyboardManagerSwift.modulemap */, - 1C1D99CE01FB6BB6346D7EBEF5BF9DFF /* IQKeyboardManagerSwift-dummy.m */, - AD3691342BA64611F087DB419A91ACBB /* IQKeyboardManagerSwift-Info.plist */, - F6BC92DE073B96A0C6BE3673798472A0 /* IQKeyboardManagerSwift-prefix.pch */, - 7D5EC839402CC9058163D064D0B5E9CD /* IQKeyboardManagerSwift-umbrella.h */, - 5C4D9BE2EA61918FA56C7073CC77DB33 /* IQKeyboardManagerSwift.debug.xcconfig */, - AAD0FAC7FA408BC1FCB711EFCEDAB743 /* IQKeyboardManagerSwift.release.xcconfig */, - 5B181ACC3F219337AE64C826FE02B413 /* ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardManagerSwift"; - sourceTree = ""; - }; - A21F7BF51B43F3776F3DE3D773340DFE /* MJExtension */ = { - isa = PBXGroup; - children = ( - 79D95A5C4EA4042D907803C45FFD333C /* MJExtension.h */, - C2EBF1ACC8534A22F5BE37FAAD051863 /* MJExtensionConst.h */, - 5C8BC587C73189ADA5510B1B9B628F89 /* MJExtensionConst.m */, - 7AAC2C1B32FB6621960C9A8DA2B3F93B /* MJFoundation.h */, - B9E550B72777FDD735DA970FB0A93766 /* MJFoundation.m */, - 1B3F62938E971A0D73273E6ECF332744 /* MJProperty.h */, - E48DCE42501B7013F70D4B72A64A9C20 /* MJProperty.m */, - DC9F85B076220EC545A9E0817FAA7561 /* MJPropertyKey.h */, - D8D05105D891E4492E3064011BFFBC55 /* MJPropertyKey.m */, - A453B6D8197404FC1374D7F63F8B640E /* MJPropertyType.h */, - 4E106F539EFD985E901DB6221706FA68 /* MJPropertyType.m */, - 4E618947B25509EAF74A486F71C3AD21 /* NSObject+MJClass.h */, - BD30A03CDBD30EA947D04F11E53B9CCE /* NSObject+MJClass.m */, - DA665FB1BA93A17FF0554D6D7B30AD0B /* NSObject+MJCoding.h */, - B77B6CE440BB9382708B4A69C5FD7B41 /* NSObject+MJCoding.m */, - 3C25F3519ADD38A0760C364F56755FA4 /* NSObject+MJKeyValue.h */, - 0ED0D149F401AB63D52DF294E59B0FC1 /* NSObject+MJKeyValue.m */, - 6EECED2B41B3AE95453700ECC56AA3BB /* NSObject+MJProperty.h */, - AC86EDE9FF4EF53151A9DBC007517513 /* NSObject+MJProperty.m */, - 4FA8FC41EA3473140B417F7087C0C8B5 /* NSString+MJExtension.h */, - 8FFE248620888CCBBC57FC0D85239779 /* NSString+MJExtension.m */, - 060C0D7D58AF11D88F155E40DD4165B6 /* Resources */, - 346D59E9FB8F99F5AA4CE3479F2C2499 /* Support Files */, - ); - name = MJExtension; - path = MJExtension; - sourceTree = ""; - }; - A72913F8546147BA91D824527DC723A4 /* YYImage */ = { - isa = PBXGroup; - children = ( - E38841225B2C182D3288F2B62AC3EEDA /* Core */, - 473006755050AAF82ADE32D6DCD56438 /* Support Files */, - 4804C5A011C353043D9438F1BC53644D /* WebP */, - ); - name = YYImage; - path = YYImage; - sourceTree = ""; - }; - AE36DC85671F639195920D649C814426 /* AMapLocation */ = { - isa = PBXGroup; - children = ( - 8F10B233277A6683E58EBB3023563848 /* AMapGeoFenceError.h */, - 69FE14BC30CB5DB48553F5B2DF36AB77 /* AMapGeoFenceManager.h */, - 263CA5BE93AE4924560E96B53D32776E /* AMapGeoFenceRegionObj.h */, - D9ACDC91BE3AD7423323355FF0F6AE52 /* AMapLocationCommonObj.h */, - 2BD48D1D20B426CEAFFB0CD0AA66CB69 /* AMapLocationKit.h */, - E6DD771B15976B2FCF55AF7141BF75B0 /* AMapLocationManager.h */, - 73CA2DF5C48F1B7F05C3D4908C3F0563 /* AMapLocationRegionObj.h */, - 4FE8974D1F8254C4E1857EBC09B66C6F /* AMapLocationVersion.h */, - 17BF613B5E6E87BD0EFB340EF8E07E6C /* Frameworks */, - 3DAA87A8620CF6996E21D4944FCC4EF8 /* Support Files */, + AAA1925E912633702DFCEED5D168B04D /* AMapGeoFenceError.h */, + E55922B6D21A9C0413F4DF52451235A1 /* AMapGeoFenceManager.h */, + C7C170BCC9E743F204BF744A97B3443F /* AMapGeoFenceRegionObj.h */, + 16C74F65B7443D250D37B4BC5DD2083A /* AMapLocationCommonObj.h */, + 6BC962C67B698BC716FD521FD0D1ADBB /* AMapLocationKit.h */, + 2A6CF4F32816B8F9BEFB21EC84C87C8A /* AMapLocationManager.h */, + 03E3ADB34B67871F5272B69DD31BCF73 /* AMapLocationRegionObj.h */, + 15C82964192FC0B4A30796ED44DCBAF0 /* AMapLocationVersion.h */, + 8E15EA679BF9F5A8307EE74456EB0B64 /* Frameworks */, + FD24351E668B6206CE5BC360C713BFB5 /* Support Files */, ); name = AMapLocation; path = AMapLocation; sourceTree = ""; }; - AEF8663A15DF8CF8A388BC4C30E322BB /* Alamofire */ = { + 97F3D01C278D7DB488701511B859D170 /* Support Files */ = { isa = PBXGroup; children = ( - 13B22DBEA0599B8AB9BBE81DB9E9144F /* AFError.swift */, - 50BEB8D58D55B2FCF2EC6E5DFC90DAC7 /* Alamofire.swift */, - 8C6DF38B89C797731652AD83F26B9E11 /* AlamofireExtended.swift */, - 728805FD0FBBD9E7F0C8D7E8AA79948C /* AuthenticationInterceptor.swift */, - A91F2AA5FE62815A42F8020A333595DE /* CachedResponseHandler.swift */, - FB37AE0B23DBB1F9D609993CCEB82AC1 /* Combine.swift */, - 0EDF22B2F7710B68BEF42DBD7960FFD2 /* Concurrency.swift */, - EB09968F5CF26869F7C209FA6BA9D6AB /* DataRequest.swift */, - 9258CFF7C85CF79A431C334C91C49A73 /* DataStreamRequest.swift */, - E1C6598101489A7E7111805E5CF77949 /* DispatchQueue+Alamofire.swift */, - BD95EF9454E3F53ABDBC35194ED025C5 /* DownloadRequest.swift */, - A01BB5837F881970519254C3F1F0B175 /* EventMonitor.swift */, - D33902803F47DEADED2DFA7B7C947887 /* HTTPHeaders.swift */, - A9C59615FF8BA2E341509BA2898E468F /* HTTPMethod.swift */, - CB9C1CC0C5611BE2E3A59B48E0E6260A /* MultipartFormData.swift */, - 4DF522262FD43A31939B404FAB1CDBF3 /* MultipartUpload.swift */, - D67CAECC94DDFB066BCA8DF4BF753DB3 /* NetworkReachabilityManager.swift */, - 06030FFD43B3B128FC6ABE677BA4FE54 /* Notifications.swift */, - 4B56B9C4446B4864B2E6EC9FA7AB1F4C /* OperationQueue+Alamofire.swift */, - 45DECE1C164F713D09FCC8D39EE8815F /* ParameterEncoder.swift */, - C90C40D569DD82664EC7B02F8B760153 /* ParameterEncoding.swift */, - D08BE8E0FEE054D26245C2FF226177A0 /* Protected.swift */, - 4DAF97AA6C3E4088F2E9F27E50E1B400 /* RedirectHandler.swift */, - 4AB0C8AFD4E85D17435F4F56F8794C41 /* Request.swift */, - 55EA2E5B9949ED4975A64ED4EF5C4522 /* RequestCompression.swift */, - 2DBF29A5234553C463B88860B18F477F /* RequestInterceptor.swift */, - A2E935C69715E7BEAA6E8BB816DE0032 /* RequestTaskMap.swift */, - 8763DABE5287013A3C662DD1707CD9F1 /* Response.swift */, - 53902042B5E9FA22F75D07AD3A462902 /* ResponseSerialization.swift */, - 907CC3064F74B222E3E0073D5AD8B602 /* Result+Alamofire.swift */, - 0DC7E49D8AEF596CCFD395189A1C41EC /* RetryPolicy.swift */, - 3099CDBCAB77ED24E860C30FE72F7E92 /* ServerTrustEvaluation.swift */, - BC6CFC68DC5E71DEF88306F0089B2448 /* Session.swift */, - 66632D9CC4BD0C730CF397F56806EA89 /* SessionDelegate.swift */, - 1089D62CEB1502272B582AC17278077E /* StringEncoding+Alamofire.swift */, - 00F55D2694BB24CBDD85533DCDB7FC2F /* UploadRequest.swift */, - BEFCC919734F12F29D14D4BC157695AB /* URLConvertible+URLRequestConvertible.swift */, - E620B11AE2F7F2E8AE1F8A1757329947 /* URLEncodedFormEncoder.swift */, - 05CFBCB3BAF48A65126967EB66B83905 /* URLRequest+Alamofire.swift */, - D1F579E8E331132963070FBC936F1C2B /* URLSessionConfiguration+Alamofire.swift */, - 6D36A4A7070EA83191C07AAA60853D10 /* Validation.swift */, - FACD7E533AA338FFEC18D2833425475F /* WebSocketRequest.swift */, - 4FA4E6AD15A0774E395365FBB07F4357 /* Resources */, - CFAC46A4B9E993B77CF33E5377EB930A /* Support Files */, - ); - name = Alamofire; - path = Alamofire; - sourceTree = ""; - }; - AFBCE2F3AA1D1F90131DD2F8C66B49FB /* Support Files */ = { - isa = PBXGroup; - children = ( - 70DB28246BADC7873C92DF9506CFB0E9 /* OpenIMSDKCore-xcframeworks.sh */, - 3F73DD0E591F2EA915EE953972CB39F5 /* OpenIMSDKCore.debug.xcconfig */, - AD0CEA64153A7C2D5E5C9DBB44A63976 /* OpenIMSDKCore.release.xcconfig */, + 0CCFB049C63FB80FE0F10ECBC2C8765F /* IQKeyboardReturnManager.modulemap */, + CF2AB942FDE7274CE1F5D9667B6EC127 /* IQKeyboardReturnManager-dummy.m */, + 43047DBE059866A1011930C625E2B47E /* IQKeyboardReturnManager-Info.plist */, + 43460343EA43EE4FC9F9EF609A697333 /* IQKeyboardReturnManager-prefix.pch */, + 7D50006193AC7916C53011FD30B6B91F /* IQKeyboardReturnManager-umbrella.h */, + A462FD5A5791151FAF19DE1A2BB6CAF8 /* IQKeyboardReturnManager.debug.xcconfig */, + B7C11EDE3B450C9942C6603E24661EF0 /* IQKeyboardReturnManager.release.xcconfig */, + 45CE67E2BB4A7AEE69B84C4CB510B2F2 /* ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/OpenIMSDKCore"; + path = "../Target Support Files/IQKeyboardReturnManager"; sourceTree = ""; }; - B0262CF67135F1713BB90F3C8B3C05E6 /* Resources */ = { + 989A441817A6A723DE97D351AA69E255 /* IQKeyboardCore */ = { isa = PBXGroup; children = ( - D33E322A3E5E2970FF84AD445CACE4F1 /* PrivacyInfo.xcprivacy */, + 4D4805E9DDAB51282FCDDBEF197F3FFC /* IQKeyboardConstants.swift */, + C3F1699EBCB271D06621D975F6663A0E /* IQKeyboardExtended.swift */, + 7E0BB18C9D64642FF39EC8D976EF900D /* IQTextInputView.swift */, + 8C71DAEAD1ACD3A2CF92620FB0B243ED /* UIView+Hierarchy.swift */, + C3DF1F07A9D73ECEA31A7E4FD4BA7F12 /* Resources */, + 31BCA67516E8A034FC190F8597D88B81 /* Support Files */, ); - name = Resources; + name = IQKeyboardCore; + path = IQKeyboardCore; sourceTree = ""; }; - B22F019765CB5CAA957DD04C8674CB94 /* Frameworks */ = { + 9C63DD6DC4AC196298456B1A2338DEBE /* Frameworks */ = { isa = PBXGroup; children = ( - 6E39E259B8C3408A8E66B54ED16254B8 /* WechatOpenSDK.xcframework */, + 02255245C8526288007AF001BD408955 /* WechatOpenSDK.xcframework */, ); name = Frameworks; sourceTree = ""; }; - B2401A54F181E6C8E86B7C97C40BD5F9 /* Support Files */ = { + A4E463123A809DF90D0568E1DDE155F3 /* Support Files */ = { isa = PBXGroup; children = ( - A2BDBC359068D4ABAE82394D74FB8523 /* IQTextView.modulemap */, - E3D6A062A7548B784F291EECB08E8550 /* IQTextView-dummy.m */, - 8D8796D991AF7C66B8FE87145BE2DEFD /* IQTextView-Info.plist */, - 6FB2EC71F2E7CDFA675A35527736E651 /* IQTextView-prefix.pch */, - 04D575F8A3ECAFDA90EBA0B26E34F657 /* IQTextView-umbrella.h */, - A9EC385B4E999D9713BD79006E2B9E7C /* IQTextView.debug.xcconfig */, - 0719BA04D2F1F80681741FC01F6CCDDC /* IQTextView.release.xcconfig */, - B73102B73B599D035D7EDCACE5B41029 /* ResourceBundle-IQTextView-IQTextView-Info.plist */, + 380EC785DA86FF910564CC64B9092D82 /* ObjectMapper.modulemap */, + 66B47605C4EF7FD85950E34EA826F013 /* ObjectMapper-dummy.m */, + 5A16456B3A98DD7588766308353AD37E /* ObjectMapper-Info.plist */, + C80034199622607DF099889E0346FDEB /* ObjectMapper-prefix.pch */, + 52F8D243AD8458EB2B14CD5EFB786D3A /* ObjectMapper-umbrella.h */, + C8009C99851F258D3BAC40E139579AC5 /* ObjectMapper.debug.xcconfig */, + 2911308F19328BC6C09F92A3C6D1A163 /* ObjectMapper.release.xcconfig */, + 42BAAA1958F2B74B2EBA9E6128334A32 /* ResourceBundle-Privacy-ObjectMapper-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/IQTextView"; + path = "../Target Support Files/ObjectMapper"; sourceTree = ""; }; - B5889D6F654B473CDBFF2CF8681A3584 /* IQKeyboardReturnManager */ = { + A76C6D0D354B54FB7824FBD907043EE4 /* GYSDK */ = { isa = PBXGroup; children = ( - AEC48A026B01DBA97EE27FE1A72019A8 /* IQKeyboardReturnManager.swift */, - 8735CA7CBEA3EC29C13590FB46722BD3 /* IQKeyboardReturnManager+UITextFieldDelegate.swift */, - B7E1ED39AAD946F41815380593F8080E /* IQKeyboardReturnManager+UITextViewDelegate.swift */, - EF496A8009AFD9E84E8B500C581ECAC4 /* IQTextInputViewInfoModel.swift */, - E8BAC1ABC4D224C9FD7B9EA798FA89CD /* Resources */, - 640AC1DE4D70B8B55EFC3769C542ECD1 /* Support Files */, + 19A53117A1E38E29943319780A65256B /* Frameworks */, + 550AAF8EB2D5011A4350D00CC7A6F635 /* Support Files */, ); - name = IQKeyboardReturnManager; - path = IQKeyboardReturnManager; + name = GYSDK; + path = GYSDK; sourceTree = ""; }; - B60B395FEF9D2B980EC8C3072FCC6020 /* Resign */ = { + A820526A396D3C2BB6AA329C5822DCD1 /* MJRefresh */ = { isa = PBXGroup; children = ( - C339600B8575DE34AFEDE149E0B30136 /* IQKeyboardManager+Resign.swift */, - B5400BB1D506451A1F627BEE91353F39 /* IQKeyboardManager+Resign_Deprecated.swift */, - 1A1F982C6186E1FDD481C50E8701D062 /* IQKeyboardResignHandler.swift */, - 5A53DA679B0F0E0C5A4B89F6FDDADC73 /* IQKeyboardResignHandler+Internal.swift */, - 8C7772A4DD34FF5F3A20C6153B961319 /* UIView+Resign.swift */, - 78CB2111E31FA7D356C77E38AD4E7B19 /* UIView+ResignObjc.swift */, + 72BC2659EE479F1DEDEA53D93AC18285 /* MJRefresh.h */, + DFB5011F8D337C897BA3D4066DAA8DAB /* MJRefreshAutoFooter.h */, + 8B202162B632B08EE2812503526E54FC /* MJRefreshAutoFooter.m */, + C7AD74FA213A3FFDCA24D48ABA00E8F0 /* MJRefreshAutoGifFooter.h */, + BA6D541DD91BB83D988956E0E46B9C27 /* MJRefreshAutoGifFooter.m */, + F307E5CD7860C4F016E1F43A2267C932 /* MJRefreshAutoNormalFooter.h */, + 805779FF7031E298D79B68E54C435A67 /* MJRefreshAutoNormalFooter.m */, + 958AA68B7BB3D260BE27D937E76C9710 /* MJRefreshAutoStateFooter.h */, + DE63E8D0A27679395591CD603D53B1EE /* MJRefreshAutoStateFooter.m */, + A781D796BB0C79520A672AE004474165 /* MJRefreshBackFooter.h */, + 13B32687B49E8C118D10964F8D6250E1 /* MJRefreshBackFooter.m */, + C697541991BB83795F62A7EAC8FD2B49 /* MJRefreshBackGifFooter.h */, + 14D2737365898F5CAB68817BBFBF3E3A /* MJRefreshBackGifFooter.m */, + BB037BF10F9C4170C64093D37538877C /* MJRefreshBackNormalFooter.h */, + A229AE0D21491B82D7E0DAE152DE073D /* MJRefreshBackNormalFooter.m */, + 72CE3573CD388705660B27A2AF26D4C5 /* MJRefreshBackStateFooter.h */, + 715C3629D8ED7790147D9200459C63B8 /* MJRefreshBackStateFooter.m */, + 8F2ABB2AEB2CB29DE8F616DDE208CB10 /* MJRefreshComponent.h */, + F1275B92920129B3ABF887C6F40F3504 /* MJRefreshComponent.m */, + 5A3A23E72BF86121106194AD04651D2E /* MJRefreshConfig.h */, + 4E9633A6F0549DD0FA20124BD54A186F /* MJRefreshConfig.m */, + EEBEE290B7F33E3A002E037EFADB8B2F /* MJRefreshConst.h */, + C4AEF7DE14166C25132B610DAB1F3C00 /* MJRefreshConst.m */, + E8B80E9AC9A0222E9274AA651470F3F4 /* MJRefreshFooter.h */, + E10CC87B0811F86105A32F88A4F75123 /* MJRefreshFooter.m */, + C85509D11138B3103A30250316CBE2D6 /* MJRefreshGifHeader.h */, + 91B0431B844DD4BC6EA015F23F666DBB /* MJRefreshGifHeader.m */, + 8174B2C2A98517B4AD3D5FEF87B40F58 /* MJRefreshHeader.h */, + 0C2E42CF6F1C4002FCCDFCE682179B50 /* MJRefreshHeader.m */, + B9825E98E044B068EC2375D6E98CF2F9 /* MJRefreshNormalHeader.h */, + 468FE65CB846EAB3F699F8E68CCDFC1E /* MJRefreshNormalHeader.m */, + 3CF92AF5D8DFCE759BF000B71F0DA02E /* MJRefreshNormalTrailer.h */, + 145E202321E3781E1B84D6204FD9B9E0 /* MJRefreshNormalTrailer.m */, + 01E2CDB0E2DB23B7E2FDD6F56D617292 /* MJRefreshStateHeader.h */, + FF39E4326B5C2C88D65E04B5814284C9 /* MJRefreshStateHeader.m */, + BFFFBA599610B03A82906A883745C95A /* MJRefreshStateTrailer.h */, + D0A5F579E5060D3B3840AA15280205F8 /* MJRefreshStateTrailer.m */, + 59306A0835C1BE58B6CBDF64FF22DF38 /* MJRefreshTrailer.h */, + 1276FAED22369627709084038B6FF270 /* MJRefreshTrailer.m */, + 98D77213A7C4320F6008B30A82AE41CE /* NSBundle+MJRefresh.h */, + 198CEFDEA8156A3D6EA872BE843B4316 /* NSBundle+MJRefresh.m */, + 6E797E34167479AB4C62BEF24C93CAAE /* UICollectionViewLayout+MJRefresh.h */, + 5C7AF6A4A7D873A5927E9BB5781FC818 /* UICollectionViewLayout+MJRefresh.m */, + 1AF1F452F9623F8A1F1BC97F1971B9AB /* UIScrollView+MJExtension.h */, + 3C4FA82069B6C1E054035B43140BE929 /* UIScrollView+MJExtension.m */, + F84E727F70A15E83B7D25FD1B1473F30 /* UIScrollView+MJRefresh.h */, + C90D59230855356AC2C7ECAC0C2A6DAB /* UIScrollView+MJRefresh.m */, + BD5A142B20B08F85DF4E255309581669 /* UIView+MJExtension.h */, + EBAC8E57DF4784F9DECD58863EA59EE5 /* UIView+MJExtension.m */, + 28EC08A03CA2595F80D3D9862F151DF9 /* Resources */, + 5130E110E7F6D15B472C59552BAC791C /* Support Files */, ); - name = Resign; + name = MJRefresh; + path = MJRefresh; sourceTree = ""; }; - B61AC084DCC6C390EBDE866B52662BAC /* AMap3DMap */ = { + A8E8AF6560796F62A90FD285A95ABD91 /* Support Files */ = { isa = PBXGroup; children = ( - 57B0EA9833CE74F30D475E5DEED4A1DC /* MAAnimatedAnnotation.h */, - 14BE66CC68FFD2AC6BD608924474D629 /* MAAnnotation.h */, - F06017D8A40E2C269AD3723AAA849B8E /* MAAnnotationMoveAnimation.h */, - EE03A7DB31D2EA5D74E8AC6595DCD5DF /* MAAnnotationView.h */, - C6E757F10F5FAFFFD8D5AE70FEDE7FBE /* MAArc.h */, - 4EF86CFFD59506D2A1BC9B5A27F56AA8 /* MAArcRenderer.h */, - BA891B2995E55B127BCB278AF11B8B43 /* MABaseEngineOverlay.h */, - 650CC4848DDBCCB81DCB6671B53274AE /* MABaseOverlay.h */, - 73A10AD1404B88D834B5499FC7837CFD /* MACircle.h */, - 1CDA320D71347555289F21E5F48A66BE /* MACircleRenderer.h */, - AE38EB81281AAD4749C410E60DD3CDAD /* MAConfig.h */, - D5955C3F11BD2E1CC1EF1F0E6CBCE5B7 /* MACustomBuildingOverlay.h */, - 9A835D487FD056ED86C09488FF6297B8 /* MACustomBuildingOverlayRenderer.h */, - 7C2D5F1FE3CA03C21F8415CE9CDE6383 /* MACustomCalloutView.h */, - F7738AB0B6EDCBBDDF07126A140BF145 /* MAGeodesicPolyline.h */, - 96280EB941ACB84F13C3D03EFD21D089 /* MAGeometry.h */, - 680B5642427550EC87866C7A9D4FF32D /* MAGroundOverlay.h */, - 511BDA791EC00DB0404C15C4E11A8BA1 /* MAGroundOverlayRenderer.h */, - 89FBF678997C1BFF8175EAE7C1115228 /* MAHeatMapTileOverlay.h */, - 0654BFE0C715FB0CD2A72E89C361C633 /* MAHeatMapVectorGridOverlay.h */, - B459F7B57FBA9C6D23791683C7E47BB8 /* MAHeatMapVectorGridOverlayRenderer.h */, - 8972DB9B808F51AD03B118F63A9E4520 /* MAHeatMapVectorOverlay.h */, - BBC2244F81633A2E7E1CB28DD4AA64FA /* MAHeatMapVectorOverlayRender.h */, - A4BFCEEC214B513B2C016565E852579F /* MAIndoorInfo.h */, - 0B439671E325FDC797835D3E0BFF022C /* MALineDrawType.h */, - 949664818DDAAF8B27BABD5A314AE777 /* MAMapAccessibilityIdentifier.h */, - F302890B5B259BB8E004CBD0EEA581B8 /* MAMapCustomStyleOptions.h */, - 0702635284B749BA9176AECEF97B1171 /* MAMapKit.h */, - BD427A1EF10A746C4A553BB183FB8A67 /* MAMapSnapshot.h */, - 7D03309A81B860C0AC7EB6F7702CDC78 /* MAMapStatus.h */, - A1688BEE8D8DD531A4FF9FB8214FE03E /* MAMapVersion.h */, - 6D9E210B2205912E00A85821A655AFCA /* MAMapView.h */, - 573439E4451FA391A0ED73513D17D6D4 /* MAMapView+Resource.h */, - E205C494CC0EE530BD0158105D0D2305 /* MAMultiColoredPolylineRenderer.h */, - AF212710FCA100E37EAE4915B943DC36 /* MAMultiPoint.h */, - 5164BCEA802EC5E7E644A805573775FB /* MAMultiPointOverlay.h */, - A46B954BDFF657B2EB27B561A75FD56B /* MAMultiPointOverlayRenderer.h */, - C4153E009B13E648D368E7C4DE7737F2 /* MAMultiPolyline.h */, - 939FD9EE67CE7F1E53A18F47AA4723E6 /* MAMultiTexturePolylineRenderer.h */, - EE6E8A9B790E4D34473307687D4B5F8D /* MAMVTTileOverlay.h */, - F45505C3143DE9F8A8125C9E96457415 /* MAMVTTileOverlayRenderer.h */, - 486D15A5F82C8985A0E6751D00D794DA /* MAOfflineCity.h */, - 3B5D16C00716DB3F723ABA16AD0C73F6 /* MAOfflineItem.h */, - 0A05F415EE7D3DB8D18478027CDCF3F2 /* MAOfflineItemCommonCity.h */, - 96438B90C1831FEF8FEAD0F9265BB943 /* MAOfflineItemMunicipality.h */, - 068B91926FB024A1E64377B345291684 /* MAOfflineItemNationWide.h */, - B1D064A584F9C1427FDEFF411F0B5FE6 /* MAOfflineMap.h */, - 67DD08C8D8EFA5C605D522CD0B54141D /* MAOfflineMapViewController.h */, - A9B48004DE11AD5F7D92BCECE9169620 /* MAOfflineProvince.h */, - BF79B8AE2F9CE0C811A464A737EDAD5A /* MAOverlay.h */, - C8ACFECE5109B41E1551D2BB7FA2F9FE /* MAOverlayPathRenderer.h */, - 0E4B32FB0EC76B01B592CD1A61C85164 /* MAOverlayRenderer.h */, - 6DC9646259FA259C0AA37E4E65914C55 /* MAParticleOverlay.h */, - 1B662DE861161878956C798A09AAFD3D /* MAParticleOverlayOptions.h */, - F7C52778E00909D17F1C1A78E2BFF331 /* MAParticleOverlayRenderer.h */, - 8AB155993BA6DDCE5BC7CA20A1D6668C /* MAPathShowRange.h */, - DDA6A6DBB2D7B4E012AC552199A26FF0 /* MAPinAnnotationView.h */, - E2C71A38C131FFE9B3E38B8BD28A3039 /* MAPoiFilter.h */, - 2064CD5E88DCC289C0777852177E5B8D /* MAPointAnnotation.h */, - 7AC464DFEB919BE05FB5409F4D33C4D3 /* MAPolygon.h */, - FFDFDE1F81FF2DFCF0881704A4F39FAB /* MAPolygonRenderer.h */, - AC1E1F787958CC63A2481A4849213576 /* MAPolyline.h */, - BB25DA3225ADD925FF448A1B0C1DB967 /* MAPolylineRenderer.h */, - 1563B3E3E781D1EA51EBC18F425BD5DA /* MARouteOverlay.h */, - 1E264ED86787D52D1A2FB9D1694D53EF /* MARouteOverlayModel.h */, - 93F96F1B2F72E1AF5CB8D5EB7411DC8F /* MAShape.h */, - 574CAF553188FC3A01A0AEDBB464EF34 /* MATerrainOverlay.h */, - 68369891B9DD0673C54337D7AF5D5A22 /* MATerrainOverlayRenderer.h */, - AE7A0A006BF7EC69C5456D73B00C2B16 /* MATileOverlay.h */, - 85E4F42510ABF2029629F2E5D9765775 /* MATileOverlayRenderer.h */, - 49B3B5C8918A70D85AC76D63AB8FEF7C /* MATouchPoi.h */, - 0E4CE93B7DDACE16DD10B30BDEF700E4 /* MATraceLocation.h */, - 701AC824D35F7C99415ECEF8F3BF5AA5 /* MATraceManager.h */, - 8A6D3F93903A36CC1E65DB8B7D188ED1 /* MAUserLocation.h */, - 449956C48B59A346D76D820B80C026D9 /* MAUserLocationRepresentation.h */, - 5F726C3754EEA0BCB582C4A55E735D16 /* Frameworks */, - F56875C21757957BEF6B761DC98D8504 /* Resources */, - C25B264F94AFE23D03A45A28C48863B2 /* Support Files */, - ); - name = AMap3DMap; - path = AMap3DMap; - sourceTree = ""; - }; - B799DDFC3EE7C36C48509EDC93AC177D /* Support Files */ = { - isa = PBXGroup; - children = ( - 2C7BD137F313AB234AA39F9298734472 /* GYSDK-xcframeworks.sh */, - 02F7F5006D4C83A6F5AEDE0548257A71 /* GYSDK.debug.xcconfig */, - 30A2150EA6103CF85276C506513884F1 /* GYSDK.release.xcconfig */, + E54B37EECAFD1ED4B59BA3EE791E7712 /* ResourceBundle-SDWebImage-SDWebImage-Info.plist */, + 82230FEA00350BC8F56EB5BC44AD1C77 /* SDWebImage.modulemap */, + F7D2C52DC8C30B74D4C622E1D2D88BAE /* SDWebImage-dummy.m */, + 456C8BCCDAD47FF8693D75400A0E6323 /* SDWebImage-Info.plist */, + D524EE427DDAC4E734AE277A9CADE5CC /* SDWebImage-prefix.pch */, + 63321D54034C11DDB8981792A5761232 /* SDWebImage-umbrella.h */, + E283C787829B0255F3EA02250F65433D /* SDWebImage.debug.xcconfig */, + CEC0082E625A68C67E6A1ECF039B0BC7 /* SDWebImage.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/GYSDK"; + path = "../Target Support Files/SDWebImage"; sourceTree = ""; }; - B7B0FCA22ABC96D08805C7BBFB354A55 /* Resources */ = { + A9630CAF4C13F51DE80F8E912B554343 /* Core */ = { isa = PBXGroup; children = ( - C966D75070D79B9D443364A819C0C3F2 /* SGQRCode.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - B7D0F0451498E39540F43B4DDEAD0C16 /* AMapSearch */ = { - isa = PBXGroup; - children = ( - 0D09975AEB1A1FB56CECF90D58E0A2D9 /* AMapCommonObj.h */, - 5EADCBF64ED01C3EB0BEB3B96CCC6D5B /* AMapNearbySearchManager.h */, - 4BE739C8611B660926CA6A0474569860 /* AMapNearbyUploadInfo.h */, - 0233AD872EADB05DB729FC8EC5614314 /* AMapSearchAPI.h */, - 123A973422EBF191D93A314597DB7594 /* AMapSearchError.h */, - CB7FF1E8200FEA7E67B104C8495FFCE9 /* AMapSearchKit.h */, - C80AE828EC151DD45CDE7E73BB5017A3 /* AMapSearchObj.h */, - 06C10E4B12DDF191A13C6778B3161E65 /* AMapSearchObjV1.h */, - 322A857D4ABEF831EE7D2DB55B47440C /* AMapSearchVersion.h */, - F2B158C56525CB37D0756C301E1ED796 /* Frameworks */, - CACF685024E593A84EDD0094DC8FA308 /* Support Files */, - ); - name = AMapSearch; - path = AMapSearch; - sourceTree = ""; - }; - B8175D252F228A82B4B468FE53FE1054 /* Frameworks */ = { - isa = PBXGroup; - children = ( - F4E7F97A8A4045F2AEA6EE56AD8C5E77 /* GTCommonSDK.xcframework */, - ); - name = Frameworks; - sourceTree = ""; - }; - B8E0F5D7A2B95FFBDDFDC37C469BC5EB /* CocoaLumberjack */ = { - isa = PBXGroup; - children = ( - 689E3BC05147113E2447E7EF5DE6ACB7 /* Core */, - 2D9B4061D217ACFDC5B354E5FB959489 /* Support Files */, - 04E77BF5D241431A7669B65C63C292B8 /* Swift */, - ); - name = CocoaLumberjack; - path = CocoaLumberjack; - sourceTree = ""; - }; - B943263DB4496297CFA039D0DF444E2D /* Resources */ = { - isa = PBXGroup; - children = ( - B7DD4E4308B543CDB2A0B96FD8FD5AD5 /* YBImageBrowser.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - BC3F664E09F2AC1761DC4ECE861F83C7 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 183127F3E86A45036E2C0AB7DEB18E1D /* WebP.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - BC6AE7D0ED3FEE3FC0A3BB6704C3832A /* Support Files */ = { - isa = PBXGroup; - children = ( - 244512DFD644D3AA431853F542C2A616 /* Masonry.modulemap */, - 53E27EF908C7FB5EFEE14ADD95C69C96 /* Masonry-dummy.m */, - 97A94F41128644A73B8BB322379AD1AB /* Masonry-Info.plist */, - 0FAF4A2F2B4B2435A7BB4895AF2145CD /* Masonry-prefix.pch */, - 2641DD06874437DB484DC2A833AACEDB /* Masonry-umbrella.h */, - 2678FFFB05AC0FF8ABF1EAE1D51210C5 /* Masonry.debug.xcconfig */, - D414BEB5C18132E781D4587C8EFA1857 /* Masonry.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Masonry"; - sourceTree = ""; - }; - BDA6A1204DF782A42F3B6D09ADE73685 /* Support Files */ = { - isa = PBXGroup; - children = ( - 1FE7CCD2DB56740DB6C59A573D8DFB63 /* AMapFoundation.debug.xcconfig */, - 7C37BD2829041D89916A260C97F51808 /* AMapFoundation.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMapFoundation"; - sourceTree = ""; - }; - C035CC7FFE41C3C574BD25F1D57B32F3 /* Support Files */ = { - isa = PBXGroup; - children = ( - DBBA01FA6E1F2ADE35EA179C7CFBF223 /* MBProgressHUD.modulemap */, - 4CBDB659ECA60E466DDE07E7F3188D9B /* MBProgressHUD-dummy.m */, - 0DED4BA3B9B036CB4B02EB1ED05A82DB /* MBProgressHUD-Info.plist */, - E25DE705587B10CE643D1DF86AA2C68B /* MBProgressHUD-prefix.pch */, - D4F2F0EA5C534B941F600989F2ADB613 /* MBProgressHUD-umbrella.h */, - 496745A7F3A4397C33365DC9AA2BBD27 /* MBProgressHUD.debug.xcconfig */, - E1061F2B93315280A5B73A81ADDA30B9 /* MBProgressHUD.release.xcconfig */, - 7545B30E10C04C8D4BE734F25C09CB15 /* ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/MBProgressHUD"; - sourceTree = ""; - }; - C151664422ED2B379152732AAA6C657A /* sharpyuv */ = { - isa = PBXGroup; - children = ( - 1B493390BFB085C207195D0FFD8C73B3 /* sharpyuv.c */, - C2EBA132392950FF3765D57D57796814 /* sharpyuv.h */, - CB5F439F4729CFD04024FF05BCA74AE0 /* sharpyuv_cpu.c */, - 3DE1CB79BCC5D870E0A0F8AE2B4A1461 /* sharpyuv_cpu.h */, - 98C65967D7AEF74EAC5A85711A296395 /* sharpyuv_csp.c */, - 092167ED1CC47E4B4914B165AB241CA3 /* sharpyuv_csp.h */, - 36609CDD2BC9353598397AC9D8CB42AA /* sharpyuv_dsp.c */, - 905D38CB18C6D7D4FCFE589AE6168BA5 /* sharpyuv_dsp.h */, - 088A84604336D5130B62B245D8D225F0 /* sharpyuv_gamma.c */, - 62C76DB7DA654E7AD9D4B3B2FB18032C /* sharpyuv_gamma.h */, - 80F00122FF7CD557F71EDB6CD73DCE0D /* sharpyuv_neon.c */, - 060A177B76119368615F6C08CFBDC704 /* sharpyuv_sse2.c */, - ); - name = sharpyuv; - sourceTree = ""; - }; - C25B264F94AFE23D03A45A28C48863B2 /* Support Files */ = { - isa = PBXGroup; - children = ( - 261B8297554CE4FE7CB1170B6603261D /* AMap3DMap.debug.xcconfig */, - A85F7BFA6933B34EAFBDDE988DB2A8A9 /* AMap3DMap.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMap3DMap"; - sourceTree = ""; - }; - C3FE2D90C8E110F594860B41820D7378 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 79B1ECE0D7959F99866089A3071E708D /* AMapFoundationKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - C63F2E7201518ECB969AD15C40AC84ED /* Support Files */ = { - isa = PBXGroup; - children = ( - B40DB95A74207D02BC12B70085297924 /* SwiftKeychainWrapper.modulemap */, - AC83235E9EDBD10A36F3E1F871D63BF3 /* SwiftKeychainWrapper-dummy.m */, - E3D5CE2653C1E5851B93DB2D229DEAD5 /* SwiftKeychainWrapper-Info.plist */, - D5E28175BBC94EB18FFA4750CEFF606C /* SwiftKeychainWrapper-prefix.pch */, - BA8CD97A30916CD9C77856C59D4A8993 /* SwiftKeychainWrapper-umbrella.h */, - E926FA11E8BA74B1F4F9474810B87590 /* SwiftKeychainWrapper.debug.xcconfig */, - A96E31FD91560DE1C982C3A2F559FB6B /* SwiftKeychainWrapper.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftKeychainWrapper"; - sourceTree = ""; - }; - CAAC540835A8357860D729CE16909F61 /* Resources */ = { - isa = PBXGroup; - children = ( - B244600AA2104B57BCCCA5F23E2F4613 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - CACF685024E593A84EDD0094DC8FA308 /* Support Files */ = { - isa = PBXGroup; - children = ( - A12071B705466F16A1CF14EA2B9CDFFC /* AMapSearch.debug.xcconfig */, - 58210E256435ABC11184FBEC80BBAD31 /* AMapSearch.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/AMapSearch"; - sourceTree = ""; - }; - CCA7DCBB8267C4F607C0972B50D2BFF0 /* Core */ = { - isa = PBXGroup; - children = ( - B96FFDF9BCAA248D1DC8C88267CED019 /* AccessTokenPlugin.swift */, - D2BF88E4E6955245A365CE72B7B29331 /* AnyEncodable.swift */, - 831ED1AC3678AC789F64583BA59A14C5 /* Atomic.swift */, - 5BB2959D3499F806D0273059BF3598F6 /* Cancellable.swift */, - BE9BA9868608B0F72E0F1A2BCFA4CD6D /* CredentialsPlugin.swift */, - 1733D116F00BB7860C14898B3F57690C /* Endpoint.swift */, - C7FE6109F51AB7D33301A8EC635FFAA0 /* Image.swift */, - 9D30F72ABB0E7C0638BD31E4CE7840A3 /* Moya+Alamofire.swift */, - 9BC029F6B78235F5DBCA8BEA669E6064 /* MoyaError.swift */, - 7BC1184B394B0F1891FA39A297FFFEA0 /* MoyaProvider.swift */, - 100BB5555346B3CAD8AB3EEC096C649E /* MoyaProvider+Defaults.swift */, - 753831899F12C2CB084FFE69415AB0DD /* MoyaProvider+Internal.swift */, - 937D966D88196EC775BA025C4832B900 /* MultipartFormData.swift */, - 961625FA203A229009E5377F960B59F0 /* MultiTarget.swift */, - 76C66EEFD236908E007E71E3DEB9A2C1 /* NetworkActivityPlugin.swift */, - 0CC8DF74CE848DD89C1543B98FF1568C /* NetworkLoggerPlugin.swift */, - 23DADD0A8F4BC93DE27A54C99980A205 /* Plugin.swift */, - BE2AE28AB42D6BB69AEC9E7501336749 /* RequestTypeWrapper.swift */, - A57FD2A0791CC337715FFD68EBC59025 /* Response.swift */, - B9A7F9B1E648B27FC9190CFEA462392A /* TargetType.swift */, - CBBFEC0A19957F2E4DC6F87C398A3318 /* Task.swift */, - 571DADB16DAF9DD3606BAC0AD82E99A9 /* URL+Moya.swift */, - 4BA7E8D0376529DEF59A4B52463226CE /* URLRequest+Encoding.swift */, - 05D4D13EF29C8F7DCE86020D32C8D588 /* ValidationType.swift */, + 4EC813ED21BF52910890B2D6E3F54ECD /* YYAnimatedImageView.h */, + 72580C48B12D84C13CB91FB803B3250C /* YYAnimatedImageView.m */, + 0E27C6104885875C65D924ABDA4E3D40 /* YYFrameImage.h */, + 7B4C1E7106CBA77D0D297129D49B1EB3 /* YYFrameImage.m */, + 3B8AA282E96B073F73D645D38CE1096E /* YYImage.h */, + 26A79D15CF7E56AB1249C65515C36E4B /* YYImage.m */, + C38CCEC48E7F25EFD8909A52CAA8602B /* YYImageCoder.h */, + EB4B6E74F07CE1CFA6740CC7367A9A59 /* YYImageCoder.m */, + 0A8697B4ED19909AFD6C7558CEE8615F /* YYSpriteSheetImage.h */, + 600B0109CAD95BF5917C28BF3281115C /* YYSpriteSheetImage.m */, ); name = Core; sourceTree = ""; }; - CD0D9A28EB7FA8BDD8B46AECDC9967E8 /* Support Files */ = { + ABEA16F59809309D79522523BDCC8988 /* Support Files */ = { isa = PBXGroup; children = ( - 8EA47A05577E8BB8A9BF4102A2A8F1DA /* TagListView.modulemap */, - B4B1CC87B374C42556BACEDB70E5FEFA /* TagListView-dummy.m */, - A8FE3A0CAF8782AEB054AD93A654B274 /* TagListView-Info.plist */, - 8D455E3561CAE1B6B583C060084663C0 /* TagListView-prefix.pch */, - 71D663E2E1139410A15C558A6896C8C7 /* TagListView-umbrella.h */, - 8644E0F97A0F7E3524191228AA9D3074 /* TagListView.debug.xcconfig */, - 038D72D383929263E7180ACF0ED926FB /* TagListView.release.xcconfig */, + C39C724CC87492EDAFC684B436DBC2CF /* SwiftyUserDefaults.modulemap */, + 2EBE4B32A33B53EEC1777BCF15861D1E /* SwiftyUserDefaults-dummy.m */, + 5C8DCA9DAE9A2CA91B99D08FC528E277 /* SwiftyUserDefaults-Info.plist */, + E9B8203079561D85B5850B843642810B /* SwiftyUserDefaults-prefix.pch */, + 410BD1B04CE17FB86D3C4FB7427E2E8A /* SwiftyUserDefaults-umbrella.h */, + 3F080FACE9A2AB9E5FF8918DF0CD166E /* SwiftyUserDefaults.debug.xcconfig */, + A66FBF950048189A9BC5A7C43078F25B /* SwiftyUserDefaults.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SwiftyUserDefaults"; + sourceTree = ""; + }; + AC95595F0BBFBCEB77EC41215C348171 /* Core */ = { + isa = PBXGroup; + children = ( + 95A4FDAF241C16930F812761D74FCEF5 /* AppearanceStyle.swift */, + 3771450394E341C8109007FD4453F6EF /* AssetManager.swift */, + 93E12D74AA92766FA145737CB1FF4B12 /* AssetManager+Asset.swift */, + F3AB2F5FE36493E753EEAAF3B8E6B30D /* AssetManager+AssetCollection.swift */, + 8FDCC95F21DE5E485AAE4A6AFC3ECDE3 /* AssetManager+Authorization.swift */, + 27CB1D6F3889BFEDD86BF0A7F0C55EFB /* AssetManager+AVAsset.swift */, + BB9927B03C2D0F7E7F9022B6EFF4C646 /* AssetManager+AVAssetExportSession.swift */, + A653B0A60B5E5A8FEC71EC7CA4A3EB5F /* AssetManager+Image.swift */, + 92825D18FFC3CBC0A7BD59C44FACD099 /* AssetManager+ImageData.swift */, + 458E91DE3D1A4CB674A1B648258294A3 /* AssetManager+ImageURL.swift */, + D6C3E4424C9BB47614486B556FEF7AEA /* AssetManager+LivePhoto.swift */, + 65029C092034F39CD83E5C58E0DA0B05 /* AssetManager+LivePhotoURL.swift */, + CE53DF77216A675C25EC903D738D2065 /* AssetManager+VideoURL.swift */, + F9C28583AE34DED7B6FCD1ACDB354EDC /* BaseConfiguration.swift */, + 677FF7B4A892D4EB3B2AD9BB1F6B7379 /* BaseViewController.swift */, + AC85375D7D20F08BF74644A806E2502A /* Core+Bundle.swift */, + 90B5BC834A2DCAECF1A45B2A40BF12F8 /* Core+CALayer.swift */, + 0B1594EBD0E078355AAC2E6368B21BDC /* Core+Data.swift */, + 9005A4BA6A695B43606F43DA74AF0ED0 /* Core+Dictionary.swift */, + F13ADE691A62AB1DF886EA4F7FD67E96 /* Core+DispatchQueue.swift */, + A50464F051FFAD36C579BF994F2EE62A /* Core+PHAsset.swift */, + D64FB7527955C366D9B03609179CA6CD /* Core+PHAssetCollection.swift */, + 6C08D86D054AFDEF0A223CD7A4B5015B /* Core+String.swift */, + 2E4D9D32F645C0F77FE2B2594942BD5A /* Core+UIColor.swift */, + CB49502221C6831562B6F3334074EEB2 /* Core+UIDevice.swift */, + 1DC2D7AD3B62E3A2D0D88CB42FAE50CB /* Core+UIFont.swift */, + 797F1309BF0507E755025835173DA3E3 /* Core+UIImage.swift */, + 4D4B40182162CD669ED8D1D713C1A108 /* Core+UIImageView.swift */, + 02840ACD5872409C5A15AF32A909BEC0 /* Core+UIView.swift */, + 7F75D1EC0E1C320D3F9EFC4E8509D719 /* Core+URL.swift */, + DA4B9E352F29C90F44D0244433AF8504 /* CustomLanguage.swift */, + 228A5909B168591161C6BFFF967721A4 /* HXPHPicker.swift */, + DDCC82CDB4622F4F83A99EB2D2AE120E /* ImageContentType.swift */, + B26EFE7D0D803E3B328DE5A7C05B5F30 /* LanguageType.swift */, + 0EB177B7132DB39C91B6B2D930AA7F6B /* LivePhotoError.swift */, + D6FCB776FDC1A9889154E2C982013701 /* PhotoError.swift */, + C84DB09A5FF186DAD4C96289F6032C61 /* PhotoManager.swift */, + D13ADEC01AEBCFADCF283E3936FD6C64 /* PhotoManager+Audio.swift */, + 1FA74D2870A019BA4740B7F676D3BE43 /* PhotoManager+Download.swift */, + 47B17333D0907CCF5AF2E8678FD6D83A /* PhotoManager+Language.swift */, + E02070E552BE1AC1C311C83E723E8C37 /* PhotoPanGestureRecognizer.swift */, + 64CAD2C8FCCCCFB901AD99338C69EE1F /* PhotoTools.swift */, + 0942915E855CACF30C7A5843464A23D4 /* PhotoTools+File.swift */, + 956F909BA66A7652F595667B35B52BFF /* ProgressHUD.swift */, + 906D0A72EE028674565F0303DE1D205A /* ProgressImageView.swift */, + 602C74A8185EA5EE8350DAA128584F7F /* SelectBoxConfiguration.swift */, + 5FB12255CE9417581E8B581894EB9660 /* SelectBoxView.swift */, + FA9EC52758D4E3583A39B592710F605A /* VideoPlayerView.swift */, + 0CBF922902065FFC071B662004D5E28E /* Resources */, + ); + name = Core; + sourceTree = ""; + }; + AD60C8588DD34B9746332044870D56C5 /* Support Files */ = { + isa = PBXGroup; + children = ( + 43D070FA933209AA2B933B1574913A3F /* WechatOpenSDK-XCFramework-xcframeworks.sh */, + C05DB1794BBBFB16B8EA48C125B1579E /* WechatOpenSDK-XCFramework.debug.xcconfig */, + 7494A83BA67A532F60523715329204DF /* WechatOpenSDK-XCFramework.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/WechatOpenSDK-XCFramework"; + sourceTree = ""; + }; + AF7A509B77A950D178DE1E642AB26B72 /* Support Files */ = { + isa = PBXGroup; + children = ( + 57E35B7EB1A35EA7A210180295460940 /* ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist */, + 378F46BB261081002D3462443D321F6E /* SwiftyJSON.modulemap */, + 944736B27436A346B72E1922E58C113A /* SwiftyJSON-dummy.m */, + 1613AA53EE5A2A7A0235668A464EBB18 /* SwiftyJSON-Info.plist */, + 9FF9DE9D91C58B32C61967930F1A4A42 /* SwiftyJSON-prefix.pch */, + 0AA02FA0E65676F5516119114719BAB8 /* SwiftyJSON-umbrella.h */, + 64C174FEED5DBDBD7E75CFF8B4BB3ABB /* SwiftyJSON.debug.xcconfig */, + D1B7F2C96D885D7A145E648320C1726E /* SwiftyJSON.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SwiftyJSON"; + sourceTree = ""; + }; + B50A3A53296A60335F9EC54745F2EA5C /* Resources */ = { + isa = PBXGroup; + children = ( + 4E62540E472572F4BB15B036489695F3 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + B61EAB15AA2E76A18994477CCED07F62 /* Support Files */ = { + isa = PBXGroup; + children = ( + AD83DAC58E563A1D225FFBE27E953654 /* YYImage.modulemap */, + 378A71B05B4B6E35FEFA06A102708B90 /* YYImage-dummy.m */, + A0D118785D957509F43768C5F4E0C6CA /* YYImage-Info.plist */, + B473F4F496BA450835903D12F8556484 /* YYImage-prefix.pch */, + 2A115E0B3FC9B65949A9542E9CDB7BDF /* YYImage-umbrella.h */, + 2A0F966CE73BB9FB937DE773DED561BE /* YYImage.debug.xcconfig */, + 72A1EAF3B2B93A6D388301B986ACB69E /* YYImage.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/YYImage"; + sourceTree = ""; + }; + B6BC1669B13CBAA9F498D430C4891630 /* Support Files */ = { + isa = PBXGroup; + children = ( + DF94A15ED1293E30E88A59E0F6D62484 /* MqttCocoaAsyncSocket.modulemap */, + E45E6AF7340B004DA48A8AE2F8B53F37 /* MqttCocoaAsyncSocket-dummy.m */, + D09EC7A968EE24B6056BBB55B155B841 /* MqttCocoaAsyncSocket-Info.plist */, + 341EC2C4A70106EB67DB74B8C4440046 /* MqttCocoaAsyncSocket-prefix.pch */, + 08750421AE2FCC141D4D1F8E3C6C6789 /* MqttCocoaAsyncSocket-umbrella.h */, + D020FF9A5704378B0D8B41BF65396696 /* MqttCocoaAsyncSocket.debug.xcconfig */, + 018A85E94FE9935E7AFCB8B153633334 /* MqttCocoaAsyncSocket.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/MqttCocoaAsyncSocket"; + sourceTree = ""; + }; + B708B78A29CB5B853E59332CADE08064 /* Support Files */ = { + isa = PBXGroup; + children = ( + 0DD2DE37E0D18D7C606ECD29F45A940A /* TagListView.modulemap */, + 9C9D1DC3A8237ADFBC76223E5E1932BB /* TagListView-dummy.m */, + 1990DB1381D06FADDBC58B8DE86F05D6 /* TagListView-Info.plist */, + 92045CC4A14841CF942F7D0EE8B79E7D /* TagListView-prefix.pch */, + 59DDD979CBD6C9981F4FC9235EFC9381 /* TagListView-umbrella.h */, + 93D67B4D138C469D66869335FAC4A656 /* TagListView.debug.xcconfig */, + 9D3F97F68C76452A9B412F4F0553D559 /* TagListView.release.xcconfig */, ); name = "Support Files"; path = "../Target Support Files/TagListView"; sourceTree = ""; }; - CE176B7E2EB2BDBA32DEDE56D142CC88 /* Support Files */ = { + B78734F5F7ABB5B594C214F14E7047E8 /* Moya */ = { isa = PBXGroup; children = ( - 5ABF25F38B5335217BB50A39B134AF62 /* HXPHPicker.modulemap */, - 30BB18DD5E18152570847746CA122253 /* HXPHPicker-dummy.m */, - 479A5976FAAC7CD00DADE00121C3194C /* HXPHPicker-Info.plist */, - 41EBF466F9F250D801B4F6EF7B1879E1 /* HXPHPicker-prefix.pch */, - 6E262E45D9D025FC0B1E6F5F63C96BAC /* HXPHPicker-umbrella.h */, - 97D599D0C0EA915D51D3C2779E4B546F /* HXPHPicker.debug.xcconfig */, - 715CB07F1E5C3BEAB5B768CF6A9DD872 /* HXPHPicker.release.xcconfig */, + 31ECF39721A14456865E5D0F7524FAF9 /* Core */, + FDE346877AC0D4457693B942D31074B0 /* Support Files */, + ); + name = Moya; + path = Moya; + sourceTree = ""; + }; + B8671D481CDD6ADC74C2ACA6CB50CB63 /* Picker */ = { + isa = PBXGroup; + children = ( + 17D7819D2675E74CD46EF495115299E5 /* AlbumListConfiguration.swift */, + 6F42108168E3827DDBA4CF6555E2306D /* AlbumTickView.swift */, + E80DB3359336F605C30FE7B728A01618 /* AlbumTitleArrowView.swift */, + C21C4FBD6D82FAF123B6FD4221EEC000 /* AlbumTitleView.swift */, + CD68B1602B9133E2816F156CB92881EF /* AlbumTitleViewConfiguration.swift */, + 2065605DBD09C2F4550B75E77F9B778F /* AlbumView.swift */, + AB40994AE1C02F08D2B55602420DAB57 /* AlbumViewCell.swift */, + 00D38F293A306ED40E9E30F10E5A2943 /* AlbumViewController.swift */, + 8705446677A2D4792E7CE527DD558989 /* CameraConfiguration.swift */, + 56CE73BB666FB1014D9B132720BD8776 /* CameraViewController.swift */, + AEB247929A37EFE26C6A805DEA433B91 /* DeniedAuthorizationView.swift */, + D9E2E94F5A368A73CC30515962A10A16 /* EmptyView.swift */, + 28853C4F1F0BE8910FC831A9312857F8 /* EmptyViewConfiguration.swift */, + 1D7719DE8DCBAF91163BE806ED694652 /* GIFImageView.swift */, + EBF872BB8015B50B7C30FC72B5542972 /* LocalAsset.swift */, + E3CF53606678C5355554CEAF86E72A88 /* NetworkAsset.swift */, + 0FC1EE43154306096568FB039E407BD3 /* NotAuthorizedConfiguration.swift */, + 590BD5EE2F1B73CAD4BA76A24A89F755 /* PhotoAsset.swift */, + 5A180C55B9B74D99B78B2F0EDB46D1C8 /* PhotoAsset+Codable.swift */, + 9A0F856E93522334178410DBF24E676D /* PhotoAsset+Network.swift */, + D40EFA4AC4FAF688BB84B55A3FB2CF5D /* PhotoAsset+Request.swift */, + 3399796C15028FAAB7F429D5AEE0D825 /* PhotoAsset+URL.swift */, + 670E69BFA8B8E794E20278DDDFCCFC1B /* PhotoAssetCollection.swift */, + C3F1B8BD2825588EB74675386BF2CB44 /* PhotoListCameraCellConfiguration.swift */, + 50A29C91398140EF644669A498986A8D /* PhotoListCellConfiguration.swift */, + 3C837B2221F8E0307B9986F0D7DE84AC /* PhotoListConfiguration.swift */, + E8F15BFECC7481FF1ADA3A897CCD4172 /* PhotoPickerBaseViewCell.swift */, + A0DB6C7F3D7CF810502FB403BE2D852D /* PhotoPickerBottomView.swift */, + 63162572B5F40706944B6D4695746BA0 /* PhotoPickerController.swift */, + B18F3A53A26839A8CEF0EACE96727E6B /* PhotoPickerControllerProtocol.swift */, + F976405F401C7E3AC0CEE5C7C2595458 /* PhotoPickerSelectableViewCell.swift */, + 33480720859FB80422F18693CD711143 /* PhotoPickerViewCell.swift */, + FDF437331E3175752D0F2C1F3736BACA /* PhotoPickerViewController.swift */, + F5DA1CF8DC7F54C5F4F0B7DAC3650369 /* PhotoPickerViewController+SwipeSelect.swift */, + 682EED78D7F63416FF9CFDCA15743DCD /* PhotoPreviewContentView.swift */, + CAC6175EFA83D8732500292A8A30189C /* PhotoPreviewSelectedView.swift */, + 9C881CC130CEB757F00BBCE825670589 /* PhotoPreviewSelectedViewCell.swift */, + FD8F7F80F12F551B6BDDBBD6981BC3E1 /* PhotoPreviewVideoView.swift */, + 0BDCDDE834F17A8AC6D94875DF09C0F2 /* PhotoPreviewViewCell.swift */, + BB9E8F62AB5BBD697AAD9ED993626C03 /* PhotoPreviewViewController.swift */, + 2679C547D6616063B0D9FC6E558EBA1C /* Picker+PhotoAsset.swift */, + FC9D6D0932358CB76A02655D6417A65C /* Picker+PhotoManager.swift */, + 1015C6C8D14DA8683A3381003A7C1EB0 /* Picker+PhotoTools.swift */, + 3712FB2901390F9631B6F18D49E764B1 /* Picker+UIImageView.swift */, + 7ED05F749374B2ECD29E17E6726B4D21 /* Picker+UIViewController.swift */, + F51ECB02B19F5FE5864C701321C147C5 /* PickerBottomViewConfiguration.swift */, + 35BDD75E89E9E5DD5191A7DBE6C746BE /* PickerCamerViewCell.swift */, + 104AB2BBDAA118AB5B3EC43FCFB764A9 /* PickerConfiguration.swift */, + B39413E51791A04479D1A4F3B3575E2E /* PickerInteractiveTransition.swift */, + D479E6B7E6471A3F32550F11B6329C0B /* PickerResult.swift */, + E5CAB98E979ECCA2A09B427375C957B5 /* PickerTransition.swift */, + 8E579505C72B45CC000E8E91927E7A5B /* PickerTypes.swift */, + 925963B6762F7EDD3F4B025942C781DD /* PreviewLivePhotoViewCell.swift */, + 4DEA470D696BF33083541B017CF60B05 /* PreviewPhotoViewCell.swift */, + BE3AC6EFED534E56B45FDD982333FDED /* PreviewVideoControlViewCell.swift */, + B575818A4B7E646C5F142DB98D4CD278 /* PreviewVideoViewCell.swift */, + 6AF7B1545843C9BBED27626503F185E9 /* PreviewViewConfiguration.swift */, + ); + name = Picker; + sourceTree = ""; + }; + B89794099D83C1B271367D0889DF0174 /* WebP */ = { + isa = PBXGroup; + children = ( + 755116D0EC3DDB3340553AD7B2F9FF30 /* Frameworks */, + ); + name = WebP; + sourceTree = ""; + }; + B8E57183278F9B617AB1F148A84C5565 /* IQKeyboardToolbarManager */ = { + isa = PBXGroup; + children = ( + 3DB6E6F409BB82016215077AA58FFE0F /* Array+Sort.swift */, + D5660094DA95120EE2B8164E7355B119 /* IQDeepResponderContainerView.swift */, + 7C8FAD9863B07762E14BEC17A1AD179E /* IQKeyboardToolbarConfiguration.swift */, + 865A4BFB2CB8DB37C3E1407B2C8BB4AC /* IQKeyboardToolbarConstants.swift */, + 1970F255FBB8A6704AB7CFD5716435DC /* IQKeyboardToolbarManager.swift */, + AAA272F52E8ADAC35C395237086FBE2C /* IQKeyboardToolbarManager+Action.swift */, + BFA1464237676D38F4BF5A57D9F5A55D /* IQKeyboardToolbarManager+Debug.swift */, + C39880C40AAAAD747B9A62379A5A895B /* IQKeyboardToolbarManager+Deprecated.swift */, + D6A149B6BBD06C2232430F6ABB7B1407 /* IQKeyboardToolbarManager+Internal.swift */, + 858555FE5CD415E9FE0DE9EB2A7AFCFF /* IQKeyboardToolbarManager+Toolbar.swift */, + 84AF2338B277983050F3CAFD5B36E2D8 /* UIView+Responders.swift */, + D20EDFE87D7E3E82F987FC08A4F00CEE /* UIView+RespondersObjc.swift */, + F3C94C83587B7C880837CB978C6057AA /* Resources */, + 0374D4B5D7630697BFFAF476F53A93E2 /* Support Files */, + ); + name = IQKeyboardToolbarManager; + path = IQKeyboardToolbarManager; + sourceTree = ""; + }; + B954CC88C5CA7A509267924263C45070 /* Support Files */ = { + isa = PBXGroup; + children = ( + 5801738C638163C98246CB6F00BA28B0 /* Popover.modulemap */, + 3CDA05AE0A1D88DBAE40E62638BF3C8A /* Popover-dummy.m */, + 7D736B3283334F545C8A8931A8795A4C /* Popover-Info.plist */, + 061073267D9E7A4ABC1B4D3CA50443E7 /* Popover-prefix.pch */, + 12043476FB1F109D8DD030BF0DAF525F /* Popover-umbrella.h */, + 3799191460893486B21344FB44085E5A /* Popover.debug.xcconfig */, + 636B07954D032239F42C35DE71D121DE /* Popover.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/HXPHPicker"; + path = "../Target Support Files/Popover"; + sourceTree = ""; + }; + B960B988B8C0E50177465B9A80766883 /* Support Files */ = { + isa = PBXGroup; + children = ( + CF011CAF790106FD6A19F8F57A0573BD /* Kingfisher.modulemap */, + 26B386FB80AD4FBC1955D5C4F245DDFD /* Kingfisher-dummy.m */, + 946F64F2974C5F3D0BEDE60786B551E5 /* Kingfisher-Info.plist */, + 10BD7C6E2B9C3F8213C2009EA980608B /* Kingfisher-prefix.pch */, + 8E69D9DD0B6099895F3D54842186DC5A /* Kingfisher-umbrella.h */, + B8DB1EBE506F258F6871BF5B3853F937 /* Kingfisher.debug.xcconfig */, + 1FBA36361856104A4D031F00072469BF /* Kingfisher.release.xcconfig */, + 05546E827AAAE9F3BCFBD914821862CD /* ResourceBundle-Kingfisher-Kingfisher-Info.plist */, + ); + name = "Support Files"; + path = "../Target Support Files/Kingfisher"; + sourceTree = ""; + }; + C01231F6BB5829F4658B0F8ADA7827E4 /* Resources */ = { + isa = PBXGroup; + children = ( + C0BB4CBF6048C1CFAA8CF2FA39D85DDA /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + C1BA859B3BF10634F10D96C1F85389D7 /* Masonry */ = { + isa = PBXGroup; + children = ( + C31A05C7D26DBD0A551AA3C91D73FEFF /* MASCompositeConstraint.h */, + 016496ABA78D6144AB7AD700001BE86A /* MASCompositeConstraint.m */, + 0EA38E1760C227E8492F6B7419EBD670 /* MASConstraint.h */, + 0B3260A1DE9EA63DA5199E6744363682 /* MASConstraint.m */, + EE6E36EA8058AD2A1D0CFBC154558690 /* MASConstraint+Private.h */, + 5C6735ECE031BB18EA5077C548DFBD3B /* MASConstraintMaker.h */, + 913C06E86762583AA08FA9981CC07752 /* MASConstraintMaker.m */, + 082BB2C211CC761AE7176E1C91AA3E68 /* MASLayoutConstraint.h */, + 571BB5738ACB42F42C34CE19067238F4 /* MASLayoutConstraint.m */, + 00627804BDA43380564B83E1DE3D49C2 /* Masonry.h */, + 1A065AF90B68633BBEC46B5E72F9476B /* MASUtilities.h */, + 36DB87A7158E945BAE661177931BBB5B /* MASViewAttribute.h */, + 586CAB7528D3A6B6645EDB5A9397E2FB /* MASViewAttribute.m */, + 31A4A6EECE7B81CAF7FDDD1978EE7249 /* MASViewConstraint.h */, + 5A3C23B1D72202683F00B447B922927D /* MASViewConstraint.m */, + 130A9347ACA3AD097CD3B70D8B774B49 /* NSArray+MASAdditions.h */, + F8D1527E921FE86AA6FFED26C884C85C /* NSArray+MASAdditions.m */, + 394D94A4C79F8E0EE3A26D9204D6DC3F /* NSArray+MASShorthandAdditions.h */, + 7E30CE0389A560241FCA8FE83FE0B440 /* NSLayoutConstraint+MASDebugAdditions.h */, + A49386E944B025DD42EE8A1F8EB38266 /* NSLayoutConstraint+MASDebugAdditions.m */, + 06E85A137AD401FDF67AF3F231FCBFD3 /* View+MASAdditions.h */, + 4BE6176D5BCDA6C689675AD9CC5D2E6B /* View+MASAdditions.m */, + 3AD14D0F84352B2B3E7EEA1BB4CAA493 /* View+MASShorthandAdditions.h */, + 3ED6DCACD44E7EC0DE34BDE788A9AFB3 /* ViewController+MASAdditions.h */, + 004B8301B59E0532FC74ADD360B1B420 /* ViewController+MASAdditions.m */, + 8F4E6974780453B057FE5CEA6D6A847A /* Support Files */, + ); + name = Masonry; + path = Masonry; + sourceTree = ""; + }; + C20F07A7207DE59DBA76303351A7F8BD /* Resources */ = { + isa = PBXGroup; + children = ( + 808C026501781567CD3AA43ABB6D5AD5 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + C3DF1F07A9D73ECEA31A7E4FD4BA7F12 /* Resources */ = { + isa = PBXGroup; + children = ( + EBDD2EBD07F29616D00D6743544912F3 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + C7083989FF96825B50C6AD2F90707983 /* Support Files */ = { + isa = PBXGroup; + children = ( + 5890D279B149E323005199F6CC97AF35 /* OpenIMSDKCore-xcframeworks.sh */, + 17272198BEED2330EBB2A866A7ABE400 /* OpenIMSDKCore.debug.xcconfig */, + BE2396AEB28B21E7D7963F4E67D9B1F9 /* OpenIMSDKCore.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/OpenIMSDKCore"; + sourceTree = ""; + }; + C780E2A1BD318E94A7FA21E68CB7939B /* RxDataSources */ = { + isa = PBXGroup; + children = ( + 2D5B12012F6233B5D8F331C901A7869C /* AnimationConfiguration.swift */, + 5D6583A9D6FFB57A60DDCC8A22078841 /* Array+Extensions.swift */, + 4F1DC11660BCCAEE4264510FD65F5749 /* CollectionViewSectionedDataSource.swift */, + 54E4EED20E396CB065FE382ED36B44A1 /* DataSources.swift */, + 68E69BFAD345E18146F7E60EB1231743 /* Deprecated.swift */, + B3514A7FBBF4EB30D7EC248635A87A74 /* FloatingPointType+IdentifiableType.swift */, + 11A04BE5CE43A7F729E96EA4E6256922 /* IntegerType+IdentifiableType.swift */, + BFC9B638004387C6C5A45619A8A5B2E6 /* RxCollectionViewSectionedAnimatedDataSource.swift */, + 56C132AB3EA4F392D2A8DD774E65EFEE /* RxCollectionViewSectionedReloadDataSource.swift */, + D88363A45076A8089140ABB4169C44BE /* RxPickerViewAdapter.swift */, + 47FF8124BAC952F35B2E4461CF41D102 /* RxTableViewSectionedAnimatedDataSource.swift */, + 9427F04B99D87CA5595F70B09E854EDC /* RxTableViewSectionedReloadDataSource.swift */, + F69A46DACB8CF34C53C60CC2D027E792 /* String+IdentifiableType.swift */, + 91F9B1A6C9A789429ABD96817E09C218 /* TableViewSectionedDataSource.swift */, + 581BE4EB6C70F24C0FEE8559206D377C /* UI+SectionedViewType.swift */, + 801F815AE21CA3F75E4A08CD741E3FBC /* ViewTransition.swift */, + 52A97E1F61561F467822E512FBA51A82 /* Support Files */, + ); + name = RxDataSources; + path = RxDataSources; + sourceTree = ""; + }; + C7A7BA4CEC9739DBC6E1C548D5B3509F /* Support Files */ = { + isa = PBXGroup; + children = ( + D8FE2431BB2C01D7B99718C4ED2D8475 /* OpenIMSDK.modulemap */, + EDA3D12EB0F19B293CD12CD014400BFB /* OpenIMSDK-dummy.m */, + 5AB1C590DA6D243CF1D4DBE909C408C3 /* OpenIMSDK-Info.plist */, + 3B4B5E7AE632CD74BA805CCB171392AF /* OpenIMSDK-prefix.pch */, + C9AEE725EBC8AF812D343242835B5448 /* OpenIMSDK-umbrella.h */, + F5552552C87459C15E13CB07C4C4B689 /* OpenIMSDK.debug.xcconfig */, + F1F80ED426C3EB59947DD048D46A342F /* OpenIMSDK.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/OpenIMSDK"; + sourceTree = ""; + }; + C850C078C1E24C07530E60B35CF3DF4D /* iOS */ = { + isa = PBXGroup; + children = ( + C0CD73578573AF5AD46B0F08EBEDF1A5 /* Accelerate.framework */, + E924404F18EF5B2BFCF943AB82366720 /* AssetsLibrary.framework */, + 376332B7BB7B62B68F0FF48144147A45 /* CFNetwork.framework */, + D0A90D1C88AE636E67296B135530FC21 /* Combine.framework */, + 9EE62403F3E6512DC6CF16E7A5F5C68E /* CoreFoundation.framework */, + DFA273262C05031D86CC3431CFFA95B7 /* CoreGraphics.framework */, + 829BA9B4F4F844D6F0CA46A234033DE2 /* Foundation.framework */, + 93AC70A2D46A8E4C52484F59DCF920FD /* ImageIO.framework */, + 4AFBBCC3AC2D57FEB1F37DD9DD64C777 /* MobileCoreServices.framework */, + D0716716AD81AB2B2F5991A5E536BC03 /* Photos.framework */, + 73FB8216CF2F66343E68F8498EADB79F /* PhotosUI.framework */, + F2C997ED187FDEF21DB00D42F13F8ECC /* QuartzCore.framework */, + 1E60C88006022308DBE83289F5CB1A46 /* Security.framework */, + 078A2566C0415B70FA3C6F10C8EEB9C6 /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + C92682C44DAD917566CA3C016A52D90B /* Support Files */ = { + isa = PBXGroup; + children = ( + 051F14A8C5F58F79DCE1D93262767C25 /* KingfisherWebP.modulemap */, + 807E9A40B51599207F28141B41ACF379 /* KingfisherWebP-dummy.m */, + 9DAFE69F3F304AC496F03B746D4F05B7 /* KingfisherWebP-Info.plist */, + EAD0ABC3813E3B5F2EC92BB34F2DF105 /* KingfisherWebP-prefix.pch */, + B300794F61F87BC9AE775592D972BEE3 /* KingfisherWebP-umbrella.h */, + BD5055592BE65B1AFCBD850A79CCC6B5 /* KingfisherWebP.debug.xcconfig */, + A7D52DBF5B8B5DD78B762AC31DF025DE /* KingfisherWebP.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/KingfisherWebP"; + sourceTree = ""; + }; + CA618CE6A8D9F9BD2214C05A9D85041C /* Editor */ = { + isa = PBXGroup; + children = ( + 9D5338B11E142296D30DC453C617E8F4 /* CropConfirmViewConfiguration.swift */, + 4009BD16431C62C0B7BE3CB189F750B2 /* Editor+PhotoTools.swift */, + A49D1842DD970A77A3B0D605617890B8 /* Editor+UIImage.swift */, + 53F75E2A009040E7C88B0F41EF87FC7B /* Editor+UIImageView.swift */, + 909BD42DC3755A52936AECE9F677FAC7 /* EditorChartlet.swift */, + 34C7C1820ED663FD4EDC639404C09D55 /* EditorChartletView.swift */, + 1B549342902CF998B972113E3FFF6A2A /* EditorConfiguration.swift */, + EFE15059268A18A5A2987D96995CCA9F /* EditorController.swift */, + 1C112C980D7117A563F32576ED0A5757 /* EditorCropConfirmView.swift */, + 3F7EED91CF0B4D7A89C11A806293769A /* EditorImageResizerControlView.swift */, + 422984CB36725E3CF2CFC36BC69EC1FE /* EditorImageResizerMaskView.swift */, + 52D1166499BF80F225745AF3A61670DD /* EditorImageResizerView.swift */, + 155696EF7C4D692123629E939A4CFC88 /* EditorStickerContentView.swift */, + 06ED629B369D759C9255F2C1BD20473B /* EditorStickerItemView.swift */, + B72E217B485757193D8084079600E909 /* EditorStickerTextView.swift */, + 0DB886261132DFF1F39AFB7A34AE0692 /* EditorStickerTextViewController.swift */, + C4BC4E9795B94391814F9D9D11446D5A /* EditorStickerTrashView.swift */, + 53184C1114CEE9521E8AB97A2DB43893 /* EditorStickerView.swift */, + 015B5597E8B9F59CF0D5FAE133C17DEF /* EditorToolOptions.swift */, + 2BEE403D1E699A5CEDB82263240DDC64 /* EditorToolView.swift */, + A0CBE9B053F9FC8D9F31828C0584A37D /* EditorToolViewCell.swift */, + BFA50E72BEA63413CB9C0B4CC48F4F7A /* EditorToolViewConfiguration.swift */, + DFB269DEB8628E1799B027D9BCE9841F /* EditorType.swift */, + 7111115F1C55B2A19B14616B49223065 /* PhotoCroppingConfiguration.swift */, + 8C4E81CAF61B893EC5CDB1338F44D9DA /* PhotoEditorBrushColorView.swift */, + F5D8900915140D4712BA5E20E7EAA3D4 /* PhotoEditorConfiguration.swift */, + 3B9CB5F944772CAB0E89F0484325B547 /* PhotoEditorContentView.swift */, + 4BC960EB9A445C244712AC3B35F7B71F /* PhotoEditorCropToolModel.swift */, + 663A9AAB1644EDF5B89B050210D188AE /* PhotoEditorCropToolView.swift */, + 78663799850368AB5C48ED1F8C841B69 /* PhotoEditorDrawView.swift */, + 62D07C690BC24C555DF4B8EFE24DBD23 /* PhotoEditorFilter.swift */, + 81270878AE486291AC7784104E82FF1B /* PhotoEditorFilterView.swift */, + A58B86B87E69679760C7B7E8604BB766 /* PhotoEditorMosaicToolView.swift */, + EF35938B724A76703B2E4A3A763CF031 /* PhotoEditorMosaicView.swift */, + 560267D27DA0FB5CD68E69E62A79BFF6 /* PhotoEditorView.swift */, + AB260D469E13128154D9E7ABE02CAFB8 /* PhotoEditorViewController.swift */, + 5C94875BC7BE284051E55C4BDC8BA513 /* PhotoEditorViewController+Animation.swift */, + E16FDF7DD49FB5D341120E3EC5AC1D5C /* PhotoEditorViewController+Export.swift */, + 745F624AA53CEDAE08D3E89BB5C6DBED /* PhotoEditorViewController+Request.swift */, + 996E52A9F81C41390E20DE3A4592D278 /* PhotoEditResult.swift */, + 88F9C67E13D04AECC7D6EF209630A8E3 /* VideoCroppingConfiguration.swift */, + F5F108D6C13B18E7F0E70A6661D58574 /* VideoEditorConfiguration.swift */, + 06875FDB4D66D9C998AEF230FEF92724 /* VideoEditorCropView.swift */, + B97AE06C4122280D4E7697B526A08475 /* VideoEditorCropViewCell.swift */, + C10122837DEED57398C463CC0F8E4EB4 /* VideoEditorFrameMaskView.swift */, + CCAFF5A5740D13881CB89FB2332CF4BC /* VideoEditorMusic.swift */, + E8B35159705EBE2193CC79CA9B894E50 /* VideoEditorMusicAnimationView.swift */, + 67B8A8567DA6C52E64E59F0E24001910 /* VideoEditorMusicView.swift */, + 6C25F665BB457D3486FF8820D7DAEFAD /* VideoEditorPlayerView.swift */, + 18A527F6E05456C08754EC86F74615F4 /* VideoEditorViewController.swift */, + 2487C96BE7C199B1C2B818C214ACE2A1 /* VideoEditResult.swift */, + ); + name = Editor; + sourceTree = ""; + }; + CAD41D11E03C75F7ED636D0E2472E2EA /* RxRelay */ = { + isa = PBXGroup; + children = ( + C4D82C83902BC9F0FB3834FA90DDF005 /* BehaviorRelay.swift */, + B7A25DB02EE751E6D01D050A5E7B3A93 /* Observable+Bind.swift */, + C3DE50759EFD988D04743C79471C7618 /* PublishRelay.swift */, + 57392B079508E1A952EB83F397A6AD5B /* ReplayRelay.swift */, + A11B776E936D8D46C6A528A1CE11FAC3 /* Utils.swift */, + CDE08E67CA1FD2012D7A7C12885F425F /* Resources */, + 26ABA9AE35255DFF6F3ACEC229D38FE6 /* Support Files */, + ); + name = RxRelay; + path = RxRelay; + sourceTree = ""; + }; + CDA22605428F8A70751DEE94C3788E93 /* IQKeyboardManagerSwift */ = { + isa = PBXGroup; + children = ( + 866278242C7A5B979A23E63E21719FE3 /* Appearance */, + 43B3AAC0548B91531161C2A20E2DFA38 /* Core */, + 5169B48C1222A1C1D2880F9578AB809A /* IQKeyboardToolbarManager */, + DC9C6F44976A754DB63167E2E4D033B3 /* Resign */, + 033B8765E42B8234A55FA3C94BF730F6 /* Resources */, + 2D59480D417D31C1242C59A486BFA4CB /* Support Files */, + ); + name = IQKeyboardManagerSwift; + path = IQKeyboardManagerSwift; + sourceTree = ""; + }; + CDE08E67CA1FD2012D7A7C12885F425F /* Resources */ = { + isa = PBXGroup; + children = ( + 7D90B17797653D7003F3F7A500E74D96 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + CE7B4B561955B2023D81ECA3371E7D86 /* Resources */ = { + isa = PBXGroup; + children = ( + 11BA9E364F4512BB8B20BE4DE4BD9140 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - 35E526B6E4CA6A7E89FE8C5A5B1F2259 /* Frameworks */, - 45E0ABCC560E63CCDC698046D2CECAC8 /* Pods */, - EFE5927F7E570D4A275ADA784B520553 /* Products */, + E5F5C55E92AC2AAD92797EE3CC9ED22C /* Frameworks */, + 341BDA8F5700F98B3245E94DD113A5EB /* Pods */, + F1F3AB582168068047CB22DFF189D8BC /* Products */, 2B01C5D34569DBC173A53875424B8908 /* Targets Support Files */, ); sourceTree = ""; }; - CFAC46A4B9E993B77CF33E5377EB930A /* Support Files */ = { + D22A784029D0505F8825E2FB6440A13E /* IQKeyboardToolbar */ = { isa = PBXGroup; children = ( - 4E5481FAD7A37F467015F2E5F084A2F1 /* Alamofire.modulemap */, - 57F2F6105FAEB977A72B69CDA9E35CEF /* Alamofire-dummy.m */, - CE5BA2F6D6A3EBD1C8BCA53133492AF9 /* Alamofire-Info.plist */, - 0778C2229489CA4092CFD36A8B0FEBC4 /* Alamofire-prefix.pch */, - 76F3D82220A6BE6531EBF65472D2F31B /* Alamofire-umbrella.h */, - 9748FAB56C967BFAED8A26117036C999 /* Alamofire.debug.xcconfig */, - E614EC925D6A4CB0BB4E4E4562902436 /* Alamofire.release.xcconfig */, - F74E2AACBBD8C244A2E3D3E4A0EC3D58 /* ResourceBundle-Alamofire-Alamofire-Info.plist */, + 4BBF5683D94BE3C129B3F1500E2F0870 /* Core */, + 8DDB28579890664F7606B8D9B6AA6B47 /* Placeholderable */, + 763A9448445192689F3CB9A1C7369710 /* Resources */, + 3DCE3565E12180DA548ADF9D7FEB40F8 /* Support Files */, + ); + name = IQKeyboardToolbar; + path = IQKeyboardToolbar; + sourceTree = ""; + }; + D2E9E39DE97ED52C6B25E9FDD6EE9957 /* Support Files */ = { + isa = PBXGroup; + children = ( + B0191662DEAD607346CE2442458EEB17 /* IQTextView.modulemap */, + 57E3B3CB9A7E71E3C41DDC8AC8973B74 /* IQTextView-dummy.m */, + 12B5B5DF9020B345D986EB097F6AD7BA /* IQTextView-Info.plist */, + 1DD5BEDC44F138136A2BE5B82DDCB24F /* IQTextView-prefix.pch */, + 7196CA4EF95950D8E1B0780E5CB73D1E /* IQTextView-umbrella.h */, + B1A4FD8A8C9FBB2B4AE098AFCDEA027B /* IQTextView.debug.xcconfig */, + DADDA466B0F9556AA080958617E8F666 /* IQTextView.release.xcconfig */, + 92EDBF8FFCFE5EE0F3E29D0ED7298030 /* ResourceBundle-IQTextView-IQTextView-Info.plist */, ); name = "Support Files"; - path = "../Target Support Files/Alamofire"; + path = "../Target Support Files/IQTextView"; sourceTree = ""; }; - D071B5073D0C49B845F36464A79AE10B /* Support Files */ = { + D50473D5C3F8FA62E8B45AFC0D8E6F4F /* lottie-ios */ = { isa = PBXGroup; children = ( - 8B4487F9BD655C90D5A3542E1EEF1E9B /* ResourceBundle-SDWebImage-SDWebImage-Info.plist */, - 8A955D35D02642C236DB7120C844EACE /* SDWebImage.modulemap */, - 9223CD5E46678235221233277EDFE02D /* SDWebImage-dummy.m */, - F9BD6A12132160649FD35B828E639EED /* SDWebImage-Info.plist */, - F77407D011F6375DA8974E897B3533C4 /* SDWebImage-prefix.pch */, - F5F87C6B5FD4C86E35043453DB746469 /* SDWebImage-umbrella.h */, - 238EA027049C445CADBCD723D15850C9 /* SDWebImage.debug.xcconfig */, - 3315C38767856D68C851A907CE93A414 /* SDWebImage.release.xcconfig */, + D00321F8E978E74F4F4D60B3EB34997C /* AnimatedButton.swift */, + C8EAC22AF845ED2317153E3913ACB6B1 /* AnimatedControl.swift */, + CAEA5657079E5ED6EC6D28C57EB4C2BF /* AnimatedProviding.swift */, + AB2DA40F1188D559D2779EB5EC0331BC /* AnimatedSwitch.swift */, + 48C0D0820DEB2784A88DFE222DDC52D5 /* AnimationCacheProvider.swift */, + 8BE3802244F0F467A022E91DB6B2B712 /* AnimationContext.swift */, + C5727BECEE9618152FED1401FF57F6A0 /* AnimationFontProvider.swift */, + 1EF0D735372E69C9AC488BD364C4FBE3 /* AnimationImageProvider.swift */, + B36D5FDE715BA934BD34F8786C8DA5A5 /* AnimationKeypath.swift */, + 5FE1963B6D2F054A9E8BFAFEB6F716FC /* AnimationKeypathExtension.swift */, + 06400FEC0E7815877B9FFAD947B38F12 /* AnimationLayer.swift */, + 5D56323B451627192BECC5104B3D81BC /* AnimationSubview.swift */, + 380D1F16AEB20A423847C1057BF1B74D /* AnimationTextProvider.swift */, + 77F14C85DC9D13A5DDC84E594EEA8EA7 /* AnimationTime.swift */, + 8D04DBC093A142D706FC40A9EBD11889 /* AnimatorNode.swift */, + 312BAA0DB116CC685C2FA70D3B0E3B3C /* AnimatorNodeDebugging.swift */, + FAFFC72036DE0CBF86EEAC95FEBA863A /* AnyEpoxyModelProperty.swift */, + 9945C30FA08BD9EC319748ED2D43517F /* AnyEquatable.swift */, + 8F8D5B1A459FAE61EDF4337A132BB5AF /* AnyNodeProperty.swift */, + F0B37D9643E310BBA7496A4FE4A9FC48 /* AnyValueContainer.swift */, + DF151D352C3F940ACCE3650BDFC0D4D4 /* AnyValueProvider.swift */, + E4F1801A3E01D1794CA3E91A36D21155 /* Archive.swift */, + 0296D5D6EFA25ABAAAA68D3CD8738A76 /* Archive+BackingConfiguration.swift */, + A8363BA837F7E198BFBCA2B3BCA30959 /* Archive+Helpers.swift */, + B9F0A16DB2718E87062DB18D1618AAAF /* Archive+MemoryFile.swift */, + B6DF2C5453F49CAFE051B8FD6D17FCA4 /* Archive+Progress.swift */, + DFDA5F5E6DE9CF3C0BF1AFC98DA6D9ED /* Archive+Reading.swift */, + E8112BFCAD85A1901C75F5AECF9170CC /* Archive+ReadingDeprecated.swift */, + 42FEFD5D7BAEE2B475CA21E3B18847DA /* Archive+Writing.swift */, + 98FE132ACD16AAAFCB4C2207A360977B /* Archive+WritingDeprecated.swift */, + 6A095D9FE603AEF527B68874E180B2A0 /* Archive+ZIP64.swift */, + 901DB6006F9C44DE01F74CB94CF76648 /* Asset.swift */, + CC9713B9525A20943182AB6D5E22A57F /* AssetLibrary.swift */, + 4AC29025924C23D539E1D1221AC29A60 /* BaseAnimationLayer.swift */, + 24B4AEB38B8B095C56E839AEF1BCB6FB /* BaseCompositionLayer.swift */, + BB37EDCCBA41B0C9641257E086DC8ABF /* BehaviorsConfigurableView.swift */, + B37E5F666720987BD19B13495B1D2AEC /* BezierPath.swift */, + B9A58617E989FFAC2B9D2EB8ED1B25C4 /* BezierPathRoundExtension.swift */, + BDE09D4F498218C6D85FACE5AF9F3203 /* Binding+Map.swift */, + 423CB5BAFBC5B1B7B8867FCF7091EAFD /* BlendMode+Filter.swift */, + 22CFA28D77DC2B2A44D160C4087AC3B7 /* Bundle.swift */, + D6ECB7242FE69E5D1474792D4B6FBD21 /* BundleImageProvider.swift */, + 3F24D6C58E498E7B37DF8D75A1208F70 /* CAAnimation+TimingConfiguration.swift */, + AD86A09242BE8D4BF03B42D158E5C0D9 /* CachedImageProvider.swift */, + 9C419E6E04DBFE2E3EFEB4AD94165FA9 /* CALayer+addAnimation.swift */, + 1DBBED0980B464762473A6C89F1C172D /* CALayer+fillBounds.swift */, + F5AFA1348A84302F6F2CBA39EB6F5AB7 /* CALayer+setupLayerHierarchy.swift */, + 2F9DB03149250DF330B6D48C0E61D964 /* CallbackContextEpoxyModeled.swift */, + 31C046C0CC4193B0A2A553D90BB92F7F /* CGColor+RGB.swift */, + 44EA28130A47103E346AEA431BD8AB23 /* CGFloatExtensions.swift */, + 8C9D5E2A219C95745FAF204B1E3FC92A /* CGPointExtension.swift */, + DC327E3E09A630F76C0A3C2C4014967D /* ClassReference.swift */, + 9CF9B4F936F9017EE6FE6902E94AAAEC /* Collection+Diff.swift */, + 0AD6F8BAAAFF98186138E4A6113D787B /* ColorEffectValue.swift */, + B50D229B975056B637CE2A13B0263B07 /* ColorExtension.swift */, + 5D66E4A666F8AD6639F3BB8433543EBB /* ColorValueProvider.swift */, + 15DB7F8C2DB86CE0AAF598E6C439B423 /* CombinedShapeAnimation.swift */, + 3A0488FD76DB5F611BF73447B6E0CF0E /* CompatibilityTracker.swift */, + 3E811FDD3EDFA0440713C2597DF1941A /* CompatibleAnimationKeypath.swift */, + F7FAE59124813F9278DCFBAD69B7244C /* CompatibleAnimationView.swift */, + D5E0182FEE828DC6578A7F76F77A59EB /* CompositionLayer.swift */, + 58FFDDCF04DB129070555E67F7D62F4B /* CompositionLayersInitializer.swift */, + 480D5CF8CBC208B22CD517AAD0704692 /* CompoundBezierPath.swift */, + 0AF5A4FEF1EBB57D68D4832ED9C4B8C2 /* ContentConfigurableView.swift */, + A7AF6E104842D1D774F95573E8ACDFC4 /* CoreAnimationLayer.swift */, + BA10D70D427E316E20ABE84F02DE485D /* CoreTextRenderLayer.swift */, + 7657F084D1FA639C2B0E06330CD5D367 /* CurveVertex.swift */, + E4CF735786E6DCCDD3EC08F8BD99569E /* CustomPathAnimation.swift */, + AC0DEEF56E149FD1D1F4844450CEFA30 /* DashPattern.swift */, + 909D62EF63BD78A83AC24163EEE78816 /* Data+Compression.swift */, + 461F530A1AE9AF2A8B01A2FA5A394E06 /* Data+CompressionDeprecated.swift */, + 53F8B1507A4C52B30BD509386B591FD6 /* Data+Serialization.swift */, + F899F189DB3B7D9DF35DDEA3110CF17B /* DataExtension.swift */, + 11335B714622306F91A1F2FB8E0B3186 /* DataIDProviding.swift */, + 72766BC56FB33D493A0DA75B5189A566 /* DecodingStrategy.swift */, + 4C0D804C76B78471CEB59B3283599A1A /* DefaultAnimationCache.swift */, + B24AB5AFB6F42668409FB20FBF37EFE4 /* DictionaryInitializable.swift */, + 3D3412FCB9DBC857F8F90239397E20ED /* DidDisplayProviding.swift */, + D031895E50BDFD816B263068206932EA /* DidEndDisplayingProviding.swift */, + 1238DCD625C5D81AC5BBEBBA05973B84 /* DidSelectProviding.swift */, + D83A09F42FB0A0DEA3C2CE28C6C23CCF /* Diffable.swift */, + 4781270B7E505D46B77FC0AAE0844B23 /* DiffableSection.swift */, + 9C3603E52BD81ED0DFEA15C65199D20C /* DotLottieAnimation.swift */, + 94C3D7F5F5DD3200C6843026A2749F7E /* DotLottieCache.swift */, + 0547616BE46FF1E17F8F0D22C74EC2E2 /* DotLottieCacheProvider.swift */, + A166E25A3C3451C37A3AB8D76235D632 /* DotLottieConfiguration.swift */, + 4C05ACB5044590C564E48226710D1D64 /* DotLottieFile.swift */, + EE0AA3E0FC0B76C7509CA620EE4FC698 /* DotLottieFileHelpers.swift */, + 992563FFA7421581C3FDF8EA91BA1F9C /* DotLottieImageProvider.swift */, + F57B91C4DA1E7A118360091C50ACB4D6 /* DotLottieManifest.swift */, + A5D91DB00869FD3D156C8E656E0146BE /* DotLottieUtils.swift */, + C224AC4EDC0D96C8B5598D7A2323510D /* DropShadowAnimation.swift */, + 879A2E2A67F78CCEFE0F10240CE24FF9 /* DropShadowEffect.swift */, + D9A80A81973DFC185D749BF15E3B9010 /* DropShadowNode.swift */, + 75D18C3514B0AB93334F121664FB2959 /* DropShadowStyle.swift */, + 57DAE67362F099548C9435D60264C18C /* EffectValue.swift */, + 67F2EC575215EF8F36FE3332C7B8FAB5 /* Ellipse.swift */, + 6CCA2FE51D5FD515273072EB283E8F5D /* EllipseAnimation.swift */, + 3B8C00943FF7F8CFAD73B6BE0A6D3985 /* EllipseNode.swift */, + 50A7A193651AB0CFCF223595CA19AA95 /* Entry.swift */, + 3ACFB997E95585F568A813FF855B02A2 /* Entry+Serialization.swift */, + A06D2EBC68A9A66C6DECE0BA1D733FA3 /* Entry+ZIP64.swift */, + 4FB94AE8C5C0B522D4E322D48D4429C0 /* EpoxyableView.swift */, + 5516434AFE89CDE1669E3995A27B09FE /* EpoxyableView+SwiftUIView.swift */, + 442B1083EAD63EC2E04EE79B2C02102A /* EpoxyLogger.swift */, + 0C6A878365FAE3831D101B7448192821 /* EpoxyModelArrayBuilder.swift */, + DB591B97E8E5DE9272DB70B726C9919E /* EpoxyModeled.swift */, + C5D66152891A6C0CFE6DE74BD7438631 /* EpoxyModelProperty.swift */, + 7772449672CBE48D3FFA0D9317D8AD48 /* EpoxyModelStorage.swift */, + DF4F5D327A12E7ACE2DFF76883BD526E /* EpoxySwiftUIIntrinsicContentSizeInvalidator.swift */, + C490335440F75C578775EFDF160BC241 /* EpoxySwiftUILayoutMargins.swift */, + 76FB8636DE8E4F96063F7028E44A0E04 /* ErasedContentProviding.swift */, + 524B28EBB88699EA3D332A42A3619B8E /* FileManager+ZIP.swift */, + 3F6B9B8EEDDD183E1425AB22C7937309 /* FilepathImageProvider.swift */, + 3712A5FE54262D3B1DDB054BC62A6930 /* Fill.swift */, + FDA2360D1A6E94ECABACD3E1106335EF /* FillNode.swift */, + 56F63B4CF7F8651C02683E839A24EC1B /* FillRenderer.swift */, + 53F52C3A02F01324899BC12175E83B1E /* FloatValueProvider.swift */, + 57A5630091B1B1F7BEB362A6247CA11C /* Font.swift */, + CF71F4E4CAE92E4661A148450BC4B394 /* Glyph.swift */, + 3CFB128BAD33D109C98CF3A44600DE0B /* GradientAnimations.swift */, + E07E0B4611AA88852073CCA616A9032A /* GradientFill.swift */, + 8C79119E0FD1944C9FBEC3DBA813288B /* GradientFillNode.swift */, + 7EEA8F70494527CB93A38C74F7982F83 /* GradientFillRenderer.swift */, + 406F8443BD9B36DA3D96980140325A1D /* GradientRenderLayer.swift */, + 2960647473749EA8AEED48FB2BE7C79A /* GradientStroke.swift */, + 6586E0831A482865F4AE976D099C02EB /* GradientStrokeNode.swift */, + C0AC41EA6D004745BAE6C7B3339BADDD /* GradientStrokeRenderer.swift */, + 969C95064469988CF9DD2C0988D5721B /* GradientValueProvider.swift */, + 85C907F746C2788FC9A636D9BA502E2E /* Group.swift */, + FD075C270BA262E2E0C9C7E705229ABB /* GroupInterpolator.swift */, + E85F341F52AD4EA9051370B4AB27A5BB /* GroupNode.swift */, + D9E1FF60C3DFA18D3698A5B0976068D9 /* GroupOutputNode.swift */, + E4876B235EFC3F79E4FC7B2FAF3A32B1 /* ImageAsset.swift */, + F6A8BD0B26710BD33082F2BBF5BB724A /* ImageCompositionLayer.swift */, + 59E0C671EF5B5B543DDE4A04023C67FD /* ImageLayer.swift */, + 1B096CB908090AF2DD4E15675A33FD06 /* ImageLayerModel.swift */, + F9552D22A9233631F84C168E3F12CBFA /* IndexChangeset.swift */, + F1114FFC890A3B15EDE446EAEE06B9F2 /* InfiniteOpaqueAnimationLayer.swift */, + 5F8CAE6D15F1B3B7A425CDAC4B3BEB3A /* Interpolatable.swift */, + A8E337169F44377E81115D90C19F1BC0 /* InterpolatableExtensions.swift */, + F4EB46D249CB60D0D7A24DFBCDEC31B7 /* InvertedMatteLayer.swift */, + FEB39954F2E0BFA206C3D194C20D02C2 /* ItemsExtension.swift */, + F88405DE450E285D5F5B8F3AA9747866 /* KeyedDecodingContainerExtensions.swift */, + B5EDE4C54CCCF208B2D71DCB9FDB21C7 /* Keyframe.swift */, + 826DA11AB28DAD5B0EB7826B29CFC100 /* KeyframeData.swift */, + D5D131BAEA2B1C0468C915FC762A6341 /* KeyframeExtensions.swift */, + 77D36BE38B7CA86985F86993EB76ED85 /* KeyframeGroup.swift */, + E4047E809A4658ECA83A30E6061F84DC /* KeyframeGroup+exactlyOneKeyframe.swift */, + 3AE15C20A74AE7258AF74FD1B506F1AA /* KeyframeInterpolator.swift */, + 99A13D9C8041EE3BD62071DAE3F0C6B2 /* Keyframes+combined.swift */, + 042A695EB5A0C54C275F88586AB33EF3 /* Keyframes+timeRemapping.swift */, + 6972343F664C52CB3BBB9F28D004156A /* KeypathSearchable.swift */, + 52DE37F1AAEEF218852464F11E143656 /* LayerDebugging.swift */, + A6883A58E11528E040F55C0325D7B37F /* LayerEffect.swift */, + DA18A9D0FE32D587402920F04251F766 /* LayerEffectNode.swift */, + 06C8EC9CBE5189937E85D41906662CC4 /* LayerFontProvider.swift */, + 9BC67518006B19DC55658D20E4359695 /* LayerImageProvider.swift */, + 862203B641B5E8B956897660DF943C86 /* LayerModel.swift */, + 8EFDC55D9C77B32C3928B5308CA1A0C3 /* LayerModel+makeAnimationLayer.swift */, + 97D74D3A2081E4658E8D782F0DFB43C2 /* LayerProperty.swift */, + DE2ABF42C1496614D3DDD6544E992F73 /* LayerStyle.swift */, + DFACA4AD88EF25B756AD0FDF375677F3 /* LayerTextProvider.swift */, + 5D8459D7FBE1CE367D86924BE49985C9 /* LayerTransformNode.swift */, + 3538D5D07C7C1EEA48969493103616C5 /* LegacyGradientFillRenderer.swift */, + 532E9030A15F6711B544C8BEAAB3529F /* LottieAnimation.swift */, + 993E3A197E04AE42791F78A4570F6478 /* LottieAnimationCache.swift */, + 153DDDE8AAB0748444FFC4BC506F42BB /* LottieAnimationHelpers.swift */, + 073E1802D9E834D19ABCCBDA089E92AB /* LottieAnimationLayer.swift */, + EE979B9EDF3477B9352133C921EA1855 /* LottieAnimationSource.swift */, + 9C7EEF7FD983ACD669C21EC0404713ED /* LottieAnimationView.swift */, + 5A6B00582C6F5360841283FCA163063F /* LottieAnimationViewBase.swift */, + 8FECF4078450642BEA0A9B39AB4BE98C /* LottieAnimationViewInitializers.swift */, + EEE5C71E2AA2ED3E55F45F94737D8BF6 /* LottieButton.swift */, + 57F68566C1D13B6EF1FE82022B5A1E98 /* LottieColor.swift */, + B8CF6B41020B1C18360CF68D29A37865 /* LottieConfiguration.swift */, + EBBC4A106EB08D48922BFA7B703838F9 /* LottieLogger.swift */, + 7B6958855F647734EBB24E8340EEC38B /* LottiePlaybackMode.swift */, + 4F193B62510CE37DFCF289B85FBBE78F /* LottieSwitch.swift */, + 59FF368F95FB6496AE29853E9BA5BD14 /* LottieURLSession.swift */, + 1F18B21B8DF3684C2CE65E173E832352 /* LottieView.swift */, + 4538D166A896DAD1AB3BFE037F3EFE5C /* LottieViewType.swift */, + F71C401A793A925B16B2794B641577F0 /* LRUAnimationCache.swift */, + 6DD35593A8572CEFFF1D2C61579D97C6 /* LRUCache.swift */, + 7537436472ABFEAD772B0BF688824449 /* MainThreadAnimationLayer.swift */, + EA123271654EAC1C72B1A246499543F9 /* MakeViewProviding.swift */, + FB7E0915414C93967B126EDE0A3EAE9C /* Marker.swift */, + 99527D922C5842B63773D4E636CAF2A6 /* Mask.swift */, + 694EE45B9AE3A7575F8B867C9D6A78CC /* MaskCompositionLayer.swift */, + 6D3AFCC822EA201EE0774A79F8B66DF7 /* MaskContainerLayer.swift */, + 9668DF6256ACD7532AE815424C1276DB /* MathKit.swift */, + 480FA25861EA5315A0609447A82AA5C2 /* MeasuringViewRepresentable.swift */, + 11B4D2B58D8EC3CA214F9D4A0F71A59C /* Merge.swift */, + C4542B0278922709B2677B3742D449B8 /* NodeProperty.swift */, + A9D622A57312540E1D02274F0ACCE389 /* NodePropertyMap.swift */, + CB216BE0D8FC0CAFD94F4FBE9464267E /* NullCompositionLayer.swift */, + 1196353082FE78E3F0236610EBD8703E /* OpacityAnimation.swift */, + F74E51E407C4A9311284CCF23D154B71 /* PassThroughOutputNode.swift */, + DB42CF3C2FE27263094321A19D8E34CD /* PathElement.swift */, + F5EC0B76BF335CF429B6B623B5DEF288 /* PathNode.swift */, + 41D8AE7E514A94049498276F4D7A2EA8 /* PathOutputNode.swift */, + EF009A9EF803941B4308E2E0875AA35C /* PointValueProvider.swift */, + 7EC8F3147D548524F2105F1B4D734059 /* PolygonNode.swift */, + 213FF271A8C1EF4AFA83B16C94A7CD5E /* PrecompAsset.swift */, + F060B4B84D52BF88E54DC7C9B28D410D /* PreCompLayer.swift */, + 840A962BED1D9BADAEDE3E7E183A317D /* PreCompLayerModel.swift */, + 4FCEA9AD6C802E052AB4F36F955C37E9 /* PreCompositionLayer.swift */, + 1A1FA30BD56F8630D1EBC9B27C1B166D /* Rectangle.swift */, + 1E3BA316C2E40426CD457CC367902F1F /* RectangleAnimation.swift */, + 2E2140737C3E93134F8FDB59AB754F8E /* RectNode.swift */, + 9827171C80049752294AD9E3E7618E0C /* ReducedMotionOption.swift */, + 1BF72D624C3A129C90AEC6EC4E3E5E41 /* RenderingEngineOption.swift */, + 9D185FE7B7678520832236B38A00E369 /* RenderNode.swift */, + 723B33791793F56BD5E9F38531D5874D /* Repeater.swift */, + 640F3024D486EF2882424829BADB5957 /* RepeaterLayer.swift */, + EBC245604F36AD9FEC3CD87AA04F7C2F /* RootAnimationLayer.swift */, + D15EDFC11F19BC7A78A242A7BC5BB452 /* RoundedCorners.swift */, + B35DAB47F413C69F7A5ACA58DFE60344 /* RoundedCornersNode.swift */, + ED970E0B932A9A86C6B9B60E4F4A43DE /* SectionedChangeset.swift */, + A0EDB4D93155CAEB727C0AB45713F6D5 /* SetBehaviorsProviding.swift */, + 35E53EB427E531962F3F3AAD0D6BE4FD /* SetContentProviding.swift */, + 2BDC74945EC8BC04AD74B2B1BE2EB72B /* Shape.swift */, + FE2D768229B35C3FE454C2B95DEEC7BE /* ShapeAnimation.swift */, + B7D13E2DF65446BC4D8E7B407EAA0684 /* ShapeCompositionLayer.swift */, + 6E9D7F05983C95E168849B51B28EC29C /* ShapeContainerLayer.swift */, + E589DCFDF4CA763286693D5151E8C2E7 /* ShapeItem.swift */, + CF265D01BCDF891475E8B6CA021874DD /* ShapeItemLayer.swift */, + 763616BE3E35702DEF0239BC9469B331 /* ShapeLayer.swift */, + 614C8C7093D354C0AC700DB212837602 /* ShapeLayerModel.swift */, + 4C1A9571D4A22125DDC26AAC81C21512 /* ShapeNode.swift */, + 6D8493AA193CAA6E09CB81F3D8A8C477 /* ShapeRenderLayer.swift */, + 248B06013737714E8413242881D097C9 /* ShapeTransform.swift */, + 839BCE2FB3C9925AE8EBE4D4E23D267B /* SingleValueProvider.swift */, + 08BF7E05FE4526682EBDA0F71476A16D /* SizeValueProvider.swift */, + D94DD830C0433EF2212975E170A8EF05 /* SolidCompositionLayer.swift */, + 9E09E8D0DDB0127275867B6DB66EAC96 /* SolidLayer.swift */, + 60FB2512EBA67C9E19A06A26644E2821 /* SolidLayerModel.swift */, + 86A0D05E1B1AF9C0E4BDE710355585D3 /* Star.swift */, + C37E9B0A2752CD48FC43FABF09C7B745 /* StarAnimation.swift */, + 889A561130AB6E4C8C73F23593C54B4D /* StarNode.swift */, + 0C1C877790940F9BEC52E105E2345F63 /* StringExtensions.swift */, + AB272087ABE824979CB58F3810B9CDB8 /* Stroke.swift */, + 9909A72F16EE2DC3ABF5C0F04E9ACEC3 /* StrokeAnimation.swift */, + 2FE035ECA7BD09E6EF69413B6CB12ACB /* StrokeNode.swift */, + 98675E3A1A2936ED5AD80EDCA005B45A /* StrokeRenderer.swift */, + 3333FB4826A1B7E11CD9D053ECCD0B71 /* StyledView.swift */, + AE7C96DF1255DC3006CBEA26F1C9BD7E /* StyleIDProviding.swift */, + F58B1158B39BF41DE17B2D193BD0E0F5 /* SwiftUIMeasurementContainer.swift */, + A6231FD2D37A52E5BFE0B866D8EB940C /* SwiftUIView.swift */, + B92051DFD1B8964C84F2CCBDEA5D52B1 /* TestHelpers.swift */, + B402B8425EBB730BFC58AEB36CC52226 /* TextAnimator.swift */, + 2506741F9F50189A7DD54A4F356E1C0B /* TextAnimatorNode.swift */, + 518C08021C81FCD665925D5FE7DB2D2D /* TextCompositionLayer.swift */, + 18C57118977326E3AB3594BF47E4D50F /* TextDocument.swift */, + 63B4C977FA84E6204CA76F7CD5A2E079 /* TextLayer.swift */, + C214635901487ED70CD287E8BC4AEC74 /* TextLayerModel.swift */, + AE120212B6286301289F194C73D0175F /* TraitCollectionProviding.swift */, + 7A8C2DD3A2C1D03AAA15596C4B5EC68C /* Transform.swift */, + 99865637FCFF7B1AA28FC0923C3042EE /* TransformAnimations.swift */, + 4A821688C0C584B0F53FDAD23FCBF38E /* TransformLayer.swift */, + 6E2020960628625BDC018E48BA326EB2 /* Trim.swift */, + DFFFE5A3E20A221292DEDE2DFCC56A72 /* TrimPathNode.swift */, + CF9DEF0B8FE64352C40FF7FADFC32A4E /* UIColorExtension.swift */, + 4F4A9FE6A3F2ACD446C28FAE8E1F0E53 /* UIView+SwiftUIView.swift */, + 825816BFA5ED9EA8E09C4414305D084D /* UIViewConfiguringSwiftUIView.swift */, + 55B16604977C9DD7CC41867CF659D286 /* UnitBezier.swift */, + 0483E62BDF02CA0C3DE38D03FC2505C6 /* URL+ZIP.swift */, + 3F7489B3075663D6DD35FC554D303EC6 /* ValueContainer.swift */, + 39139551D157EE1146CC15CFBEAFC945 /* ValueProviderStore.swift */, + 0AC56FB29A4BDFF4CF1349AF6A43D9F9 /* Vector1DEffectValue.swift */, + 0DE5DF902C1E8080C92964EA0B0C8D6E /* Vectors.swift */, + 837CE453DD68FD5980A53849C6B2FDE2 /* VectorsExtensions.swift */, + C5E34F664A26E302A185A09496929E75 /* View+ValueChanged.swift */, + 22E6C6B2624EC3C4CEDDDE1149B64473 /* ViewDifferentiatorProviding.swift */, + 488940941E25EEC0F1419CDC1C942616 /* ViewEpoxyModeled.swift */, + C86BA257469B7EDB7C543D6521539A53 /* ViewProviding.swift */, + C36DE6C3FC332032CD0B60D0BDA7563D /* ViewType.swift */, + 173E5A5AC9E0556461707258329978E9 /* VisibilityAnimation.swift */, + E7CDA2FFFAE2097689AF3F32BE7E21DE /* WillDisplayProviding.swift */, + 3505A72458850FC11DA3814D2B095AA5 /* Resources */, + 792F48C1121F4C4727C83EED0CED5BEE /* Support Files */, + ); + name = "lottie-ios"; + path = "lottie-ios"; + sourceTree = ""; + }; + D61BBE141BD5A1FE1FBE1B6CCA689984 /* Support Files */ = { + isa = PBXGroup; + children = ( + E10C79159E195F6C81ED9B2E89F90A37 /* AMapSearch.debug.xcconfig */, + FE7774FEDAEA41B1AA9734250483E1FE /* AMapSearch.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/SDWebImage"; + path = "../Target Support Files/AMapSearch"; sourceTree = ""; }; - D6AE84D7A883F200DE62C54E650BDB4C /* Resources */ = { + D9AC6D9F03DCEE5596A4C6EAB157FD8F /* ZXSDK */ = { isa = PBXGroup; children = ( - 29C1F94D4278A162A285C44FE14DB4F6 /* PrivacyInfo.xcprivacy */, + E1E219131FB54B030C763D283B9FABF6 /* Frameworks */, + 63E726FE4761BFEFC79E1AAB77C7F136 /* Support Files */, ); - name = Resources; + name = ZXSDK; + path = ZXSDK; sourceTree = ""; }; - D98C3FC39CA3292D4531500A177AF707 /* Frameworks */ = { + DAA27F241C38D2B2ADCB38ADC20D98D5 /* Utils */ = { isa = PBXGroup; children = ( - 619D6D0BE97FAA6CFB40BDEB233BD739 /* GeYanSdk.xcframework */, + 2CB958102E3830756508C5AE67B201BE /* OIMDefine.h */, + 5CC360DDD6D3361E48E7695224199158 /* OIMReachability.h */, + 950AF206CB2131B94A4913E8D6D73802 /* OIMReachability.m */, + ); + name = Utils; + sourceTree = ""; + }; + DC9C6F44976A754DB63167E2E4D033B3 /* Resign */ = { + isa = PBXGroup; + children = ( + D0E21354913A22F0F4F3F224BF3699C6 /* IQKeyboardManager+Resign.swift */, + 57F61591FF5B1753F1EDA95DD7F1F221 /* IQKeyboardManager+Resign_Deprecated.swift */, + 86CE596122BF5B193D2C94C75BF941B4 /* IQKeyboardResignHandler.swift */, + 03E67A6EC39FF472B83B7840AF78E292 /* IQKeyboardResignHandler+Internal.swift */, + A6B15A87F23CED5AFFB3908396D1AD38 /* UIView+Resign.swift */, + 16B62285E67238FCDFC2EE5E85A20C18 /* UIView+ResignObjc.swift */, + ); + name = Resign; + sourceTree = ""; + }; + DCCFD82C658FB653ADDC232EAA60F885 /* SwiftyJSON */ = { + isa = PBXGroup; + children = ( + D47AAA9B971BFF2F0C01320573159825 /* SwiftyJSON.swift */, + C01231F6BB5829F4658B0F8ADA7827E4 /* Resources */, + AF7A509B77A950D178DE1E642AB26B72 /* Support Files */, + ); + name = SwiftyJSON; + path = SwiftyJSON; + sourceTree = ""; + }; + DFC6A93A11DD820E89FE7DB4B3E90B6D /* webp */ = { + isa = PBXGroup; + children = ( + 507C90449A9C2A97E2871ACAC9B1A441 /* alpha_dec.c */, + 979C891C173C4B89C451458A3F545DCC /* alpha_enc.c */, + 33F3EFA42D26365BF6A13F0710A58980 /* alpha_processing.c */, + 0951F87C6DE10E5CFAB72203270704EB /* alpha_processing_mips_dsp_r2.c */, + 1CE5CC4648FB6DF842BA008DD474C9D0 /* alpha_processing_neon.c */, + 520200F35D7AC74EBA71E00F2CBF4F38 /* alpha_processing_sse2.c */, + 0D40A187A4C62181827B7D1C0CFFEFFD /* alpha_processing_sse41.c */, + 5F41F37C01FE78AF3EB2EBE2C0063C55 /* alphai_dec.h */, + F671C802188EF41EED437EF1BD461D86 /* analysis_enc.c */, + A29BD49A7C76A70FC93ED9BBE634D6A2 /* backward_references_cost_enc.c */, + 240B3E67D8767688B64A581BA5949261 /* backward_references_enc.c */, + 36867FE9CEB2E51AD35828908BE554DB /* backward_references_enc.h */, + 24D2D7C0AE2ECF3BEFD1763BBEF314B8 /* bit_reader_inl_utils.h */, + 7594C627631107EC787B010DDB216F87 /* bit_reader_utils.c */, + 37A76EC7E372C59E5A53839B2D5EC932 /* bit_reader_utils.h */, + 335078A0CED7AAD0119A29BAF4421016 /* bit_writer_utils.c */, + A509ACD41593F9645F64E6E501A170B4 /* bit_writer_utils.h */, + F537EF39FAE967FAFFB3C95ADE5A3B62 /* buffer_dec.c */, + D6E9D7AF870E8D988924C6290B87CB66 /* color_cache_utils.c */, + 41CEA18D25AEC926DA2658E42254B462 /* color_cache_utils.h */, + 82E48720FDE1FD73E9188821ABBDEB63 /* common_dec.h */, + ADD590C801F4A52D73C98EA6ED07876F /* common_sse2.h */, + E9267C55D20111C7DA6661FF692F1FCA /* common_sse41.h */, + 6BB7796CE00BCED66E4B2F23431A73F6 /* config_enc.c */, + 910B1455FE142F868DB22A1E2D94066D /* cost.c */, + E2604177A3E85192F036556469BE54E5 /* cost_enc.c */, + 01140C390F9C1A5A0B1FA345EDB25D8A /* cost_enc.h */, + A2434F3EB6290F8CE20AB41821143D16 /* cost_mips32.c */, + 940C74F803A7278DA8A603C8A4C8CE5A /* cost_mips_dsp_r2.c */, + 6D70119D576DA10861861869B0B91C91 /* cost_neon.c */, + 3CE5BD03C703D73BE31F3D87E1B5DC08 /* cost_sse2.c */, + 24FC9168D387E6F56C45A5E422ED6057 /* cpu.c */, + A826013E455DCB77EA899538B69425BF /* cpu.h */, + B22FE5811BBCC2B3F4C41290E2AA14F9 /* dec.c */, + 626BED7AFF918C2EB7C12F491DDB7BE7 /* dec_clip_tables.c */, + 3D695561A56C2DD9E3D9132C6DF66CAA /* dec_mips32.c */, + DA3E6508700E6F2FE2BF9BEBCE2BE979 /* dec_mips_dsp_r2.c */, + 1DBE5FAED8A096071298FA384ECCAB5D /* dec_msa.c */, + 815A9A68FC8F5D4B8295C60201EA3607 /* dec_neon.c */, + B581780208A80C4FB8291D723C00EFDB /* dec_sse2.c */, + 46A6A76613C60A158BED1E4B71FF5A5E /* dec_sse41.c */, + 13DD4EB9386FF12834E44BF449F92FC4 /* decode.h */, + 31095D3E6FF883967D59CFEE2575C384 /* dsp.h */, + D1A524C5B6ECAE4BAC7424565E81C313 /* enc.c */, + 046A2C352C7F998A7D82B6A41E402562 /* enc_mips32.c */, + 2CF7AFA4E3D64A4BA4D1B1B57212C941 /* enc_mips_dsp_r2.c */, + D88DF71236E722809CDC054A7C195C5F /* enc_msa.c */, + 5F7C7512CF2FDDA57441C76E292DFA54 /* enc_neon.c */, + 5E5BBE340E41A5864BF05B58060A75F6 /* enc_sse2.c */, + C6D30DDFE1BF6DACA6804172A77CAFA4 /* enc_sse41.c */, + A21AF33BAC1856A8747F2733F50DB38C /* encode.h */, + DAB300A21E292F64E0091E1CB70BE27E /* endian_inl_utils.h */, + 4FF5C188C69C55F5F58943A32C6A5590 /* filter_enc.c */, + DF8B4E43D6A80D3F3D3212D2C78AB121 /* filters.c */, + A2A3A2F1F37FF6F5C217BD219BA3DCFA /* filters_mips_dsp_r2.c */, + C4822263D21DDDA08A1EF2995BBE39B7 /* filters_msa.c */, + 728F4A0612FA1A63487666BF4A4B68DA /* filters_neon.c */, + 52DF6CFFEA5B2F7347476A2524E03780 /* filters_sse2.c */, + 3A5E30809D431C734969D9A65F160C87 /* filters_utils.c */, + 12A797C3A031E57AFC7DDC1C885765D6 /* filters_utils.h */, + 8AA70B6D54C3434DE9C65E169C333587 /* format_constants.h */, + 5C782F6BBA9D908DF2ED57F50C12C768 /* frame_dec.c */, + B01841AD7F4C16405F1596D4FC42C0B7 /* frame_enc.c */, + 68CCF82D67A8D5BF212E5D1E132B0103 /* histogram_enc.c */, + 1FCDFD3479752F715448F3E88166C942 /* histogram_enc.h */, + 803F8F55A8F17B4D7652541124C612C4 /* huffman_encode_utils.c */, + 8493E3C56E90747096AE38907297A71A /* huffman_encode_utils.h */, + D0DE2E7445B1ACF99F6851237BF43962 /* huffman_utils.c */, + 3B59F6D2D32C4EEE3ECDEF9CE11B50D4 /* huffman_utils.h */, + 4CD359CC21DFC73BA0F1DDCAF0486162 /* idec_dec.c */, + 5625B9E2F5C57D4695967DE287CA1547 /* io_dec.c */, + 1B4B16CEF33050278A4A904EC75AD40C /* iterator_enc.c */, + AA7D8697DE6274197EF66543E7204F88 /* lossless.c */, + C6E63714E5163D46EAEF91865D01ECDC /* lossless.h */, + 7AEC81D4CEAFD3F38E344F8311FE012D /* lossless_common.h */, + 69C94D551311BF96B246137BE18B4214 /* lossless_enc.c */, + 57C8B09E9B907A910FA2CA113D4EE94C /* lossless_enc_mips32.c */, + 4F4493CF215BF661CDF160795093A360 /* lossless_enc_mips_dsp_r2.c */, + A06B171ACB56AD93E1BD1EBEF5864588 /* lossless_enc_msa.c */, + 165FE2BA9D7A569098A2DD6DEB322A92 /* lossless_enc_neon.c */, + E62BB35812EB4C99463DE18C1B9EB0BD /* lossless_enc_sse2.c */, + 33F42C258DDB2E31077B9DE98F72F3B4 /* lossless_enc_sse41.c */, + 5C3BD5F1BA48FA5E47E18FBCF7AECCA0 /* lossless_mips_dsp_r2.c */, + D684D3C9D84C465A70ABF5B38AB813C7 /* lossless_msa.c */, + E0EA20F9C28C606A3D5D4FFEF8208E80 /* lossless_neon.c */, + 07D0C4E9495B63B74FEB580EE16DBEC2 /* lossless_sse2.c */, + A89DFF6BEF600D2FD437FB469EB3876D /* lossless_sse41.c */, + 6FB0A97444E8C7D469D5B0FF79C781D6 /* mips_macro.h */, + 41A60F1CDF890259E3C6967417E873B4 /* msa_macro.h */, + 5D73881111D0B6F5672FE5D8E90E98FA /* mux_types.h */, + 924B109D0B5D6A53163A686247653238 /* near_lossless_enc.c */, + F0F4E13F07A961A441A6054F294E1167 /* neon.h */, + 1005FE0354AFFB68DC5891504FCA9BCC /* palette.c */, + 05B1B4DA4C8FF18FC71780D40B4D6E64 /* palette.h */, + 3C07F59A034811F4CBBF62F8E736ECAA /* picture_csp_enc.c */, + E23A82FD88F15BCED19B1985CF16548D /* picture_enc.c */, + 747D0903BDC62FE4C5DA5E8AA4342FAC /* picture_psnr_enc.c */, + FD3856AE45707685922FEF462D919D7B /* picture_rescale_enc.c */, + 103B0BA9D30353B2A3AE6A3E4D345958 /* picture_tools_enc.c */, + 645B1D036F396C3C31884CF44074CB01 /* predictor_enc.c */, + 5163127D0CC7B14BDF70ED1E3ABB888C /* quant.h */, + C30C54F5FE080C171CB0A8068F86BE2F /* quant_dec.c */, + 0ED077EB75CE413B9DB3BDD2E67A5D33 /* quant_enc.c */, + 31391E8B55977047175BC0FA348319BA /* quant_levels_dec_utils.c */, + 76CC33947A6F23A709A9F9686648B932 /* quant_levels_dec_utils.h */, + E1F62D4EADB9E5D416AF1F2EBB690434 /* quant_levels_utils.c */, + 9823236B88743EB6A4D25D711237C722 /* quant_levels_utils.h */, + BC82B7E9975E6980600CDB79F602BDD8 /* random_utils.c */, + ECC43983EFD3D5D2F45DD8A897943511 /* random_utils.h */, + 6427F96BC62F8B8E39CE8CBF47E01176 /* rescaler.c */, + 1C1D9B69A7128BBCC29DD780202F2071 /* rescaler_mips32.c */, + 616CBDDA5612B517A144C40409DE85D5 /* rescaler_mips_dsp_r2.c */, + B2DF02A1C83FCAC61CE81BF9B51677AC /* rescaler_msa.c */, + 6286DBDC946A52B1E86BC5F2EB20BA19 /* rescaler_neon.c */, + 1FB1AF2C85681828F45ABCA77CA811B2 /* rescaler_sse2.c */, + 524F638285FA3A2ABDFCF6B787490342 /* rescaler_utils.c */, + 1CAD8E36D5A47E8FC472AD76480C5F1E /* rescaler_utils.h */, + EC770E47AC11ACA4E82F3988F665DAE0 /* ssim.c */, + CA33EB72D1CACE2D1D5F62ABB5C0D627 /* ssim_sse2.c */, + 71A128A3C931B299C59408CB2AE87451 /* syntax_enc.c */, + 1E154A22F7BFD213343B11EF0EF10A5C /* thread_utils.c */, + A287BBD95D2A3CE560410E6AAEFD0C82 /* thread_utils.h */, + A00EA2624DD142E40DE0ADF47D2A0AB3 /* token_enc.c */, + D06FBFCACDB5DEA5E6A56C03EDB2CCFE /* tree_dec.c */, + 4E8D0DAD81814DB92CFEE73A78339252 /* tree_enc.c */, + 0A53ED458B025D58C4FD11EC93FFAAA2 /* types.h */, + 9AD40EA1CF3BDED2A363F76D9B6911F2 /* upsampling.c */, + 055298DA034E8AA9E33D79D490271D2D /* upsampling_mips_dsp_r2.c */, + CB226B090B92DCBB1D0C6EDDAC487C5D /* upsampling_msa.c */, + D330042F8A70A7845C60AA7BDA165452 /* upsampling_neon.c */, + 7FB09B2B5E42E2CEDD4C919D77689C08 /* upsampling_sse2.c */, + DC0328F98F4917C4905DA2AD95CC417A /* upsampling_sse41.c */, + 8D4A842BE2E110919CE40363C5F007E2 /* utils.c */, + 712994A3D2CF6756C96528319EEF6AA9 /* utils.h */, + 6C98EBBA8FA597707BF0B50B83AE3CE9 /* vp8_dec.c */, + 63A3A7CA60BE4D32F36898432CE921D0 /* vp8_dec.h */, + ADE23998ED27B4812995A97BEF5F323C /* vp8i_dec.h */, + D7E9B43B55164D16B6F6795C9CB4ABD4 /* vp8i_enc.h */, + 375820DF14407C740784DFFB937AD921 /* vp8l_dec.c */, + 7197893149C4441D96B6DD968118BD8C /* vp8l_enc.c */, + 011E89E515BB464178D2AD0A6CBDC760 /* vp8li_dec.h */, + B652E29752B7E03ECA2EB9B62D3DB63A /* vp8li_enc.h */, + C05D0791B25960724D44549980AD74B1 /* webp_dec.c */, + 846FD9A1A5BAE3A6EF9143279169E011 /* webp_enc.c */, + 8FA1F9EE893754FCB88034C3F53B9134 /* webpi_dec.h */, + 1A95E8634ABD3401F658163DA5877CED /* yuv.c */, + 8F648C5A78D49866F4428026C3DBC0FF /* yuv.h */, + FDECDECD34ADFC847CCA706F55AFC610 /* yuv_mips32.c */, + F51E7DE30BC2B5251F76EC0B770D2D23 /* yuv_mips_dsp_r2.c */, + E14EB83C1DB19335E77096319A0E2693 /* yuv_neon.c */, + 4E15CCE57FB545DAC0D33E55EBB19B2A /* yuv_sse2.c */, + 27A43B258704D27FDBD3E9FF44A51207 /* yuv_sse41.c */, + ); + name = webp; + sourceTree = ""; + }; + E14CAAD9AACB44493155D716691D2BB6 /* Support Files */ = { + isa = PBXGroup; + children = ( + CA53A2E29927041974A34C30773D58EC /* ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist */, + 1B7EFA9029C4AA0F8E04C83D67306D6D /* RxCocoa.modulemap */, + 6A6B3C05E2A7710AA4BB0C9B83E2BF36 /* RxCocoa-dummy.m */, + 37CD281275F1894727824699298D37B6 /* RxCocoa-Info.plist */, + E6DCBE3CADE53A7306B36C101337AAE8 /* RxCocoa-prefix.pch */, + D1EC99C6BE34665E03162207933049DA /* RxCocoa-umbrella.h */, + 5B1A0130105B98916AF1D590086BFD66 /* RxCocoa.debug.xcconfig */, + 709B926DD9D3886E0BA907D0A3655373 /* RxCocoa.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/RxCocoa"; + sourceTree = ""; + }; + E1E219131FB54B030C763D283B9FABF6 /* Frameworks */ = { + isa = PBXGroup; + children = ( + D8615B74C79F1A3751FE67C06080A6DC /* ZXSDK.framework */, ); name = Frameworks; sourceTree = ""; }; - DA82333E2C26E6CDAC71C128CC3E9276 /* Support Files */ = { + E33D399FBB585A3939D3AAEC5B6515DD /* SwiftKeychainWrapper */ = { isa = PBXGroup; children = ( - 71CAA31075A3F10488171E1B74FC8B0F /* SwiftyUserDefaults.modulemap */, - 3A5605DFB255E8E50316E27C2AC51298 /* SwiftyUserDefaults-dummy.m */, - 36018657F97ACBD41941D6142C29AED7 /* SwiftyUserDefaults-Info.plist */, - A76FDED2A38259CFBEF42A7E0ADA24C1 /* SwiftyUserDefaults-prefix.pch */, - CD8E93CCDB5866098FEF8856FFB20F0F /* SwiftyUserDefaults-umbrella.h */, - F1A0B9A15DBD2D3F89FC7A2167A4AD3F /* SwiftyUserDefaults.debug.xcconfig */, - 10B1ACF2AADB5AD04163F4674BFE07A0 /* SwiftyUserDefaults.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftyUserDefaults"; - sourceTree = ""; - }; - E08F64891F9C2915133647F92424EA3A /* Support Files */ = { - isa = PBXGroup; - children = ( - ECE162FF4B96BD214DA70E69F32A4DC8 /* MarqueeLabel.modulemap */, - 3046218CAE71E06503DEE56FE37F2119 /* MarqueeLabel-dummy.m */, - C1C0FD80E79D2926FDECD4C655DF8167 /* MarqueeLabel-Info.plist */, - C3FC533DE5E471CA767990817D462FD9 /* MarqueeLabel-prefix.pch */, - 49109E0282ED87E8EDD6FB47CB18C964 /* MarqueeLabel-umbrella.h */, - 1858DBC20C1ACE16F5BE62DD4C23AEDF /* MarqueeLabel.debug.xcconfig */, - 815C778FCFC9DF9AB4BB867705E3D701 /* MarqueeLabel.release.xcconfig */, - 645AE5F27AA607A164905A55BE37FDA8 /* ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/MarqueeLabel"; - sourceTree = ""; - }; - E2A7FEC7F567EF8BD435292F80BDC7E8 /* SwiftKeychainWrapper */ = { - isa = PBXGroup; - children = ( - 1E93437C29905A7527D19EBEC710F418 /* KeychainItemAccessibility.swift */, - FF0025CF7C17D6A5F84D9489FE650FBA /* KeychainWrapper.swift */, - 5761947A8E5C4B96B80D8634E5181BC3 /* KeychainWrapperSubscript.swift */, - 301C9D054BD58240F500E205344E5E3C /* SwiftKeychainWrapper.h */, - C63F2E7201518ECB969AD15C40AC84ED /* Support Files */, + 78F45D1A1EB720928FAD6EFDCCBE1536 /* KeychainItemAccessibility.swift */, + 4EB58ABC19057B8242704E3499769C82 /* KeychainWrapper.swift */, + 2287FFA8D1569A799C7199DEACC54A2A /* KeychainWrapperSubscript.swift */, + 7AA65DC4296085382ABB031FFD4FDBAD /* SwiftKeychainWrapper.h */, + 6B9B000CBA2C2C3B994B0679C462F810 /* Support Files */, ); name = SwiftKeychainWrapper; path = SwiftKeychainWrapper; sourceTree = ""; }; - E38841225B2C182D3288F2B62AC3EEDA /* Core */ = { + E470EDB4DA4C218EBB9CC4297465F767 /* Support Files */ = { isa = PBXGroup; children = ( - F92FC47C21AB70D50DE321EF7CDC1FEF /* YYAnimatedImageView.h */, - 366510E521C9064578CB795725F0EF55 /* YYAnimatedImageView.m */, - 5369DE443FA67414E25C47C16C19CDD2 /* YYFrameImage.h */, - 6815C778E5D2D39FDC2284C3868D2F07 /* YYFrameImage.m */, - 32262A01385AA280BD0BCCC5C70A0237 /* YYImage.h */, - ADB41122F7EEAC1BC2E8C6BA3079508C /* YYImage.m */, - C9A10F0B9F0023A1C363E7C4517DDDBD /* YYImageCoder.h */, - 71E50B64226D3560CAF37B63F959E322 /* YYImageCoder.m */, - C1B302C4A61CD77057994883E8AE64C5 /* YYSpriteSheetImage.h */, - BB7467BE133454D87B61A8895816C0A5 /* YYSpriteSheetImage.m */, + 14A25801BE3681A6B246E467BD8305FE /* HXPHPicker.modulemap */, + DC1E150CEE2FA713EF8E77E76B5F0E06 /* HXPHPicker-dummy.m */, + E3ADD0BE9D6A447D24B498B2BD362212 /* HXPHPicker-Info.plist */, + 9B26973B3CBD32429FC5B8671E715F12 /* HXPHPicker-prefix.pch */, + 27E062A58C2152A34289C191C1908410 /* HXPHPicker-umbrella.h */, + CE33785CC080AE402A8C5B0628D044B2 /* HXPHPicker.debug.xcconfig */, + 7A538427ACB5E54D82B9758C7B881AFA /* HXPHPicker.release.xcconfig */, ); - name = Core; + name = "Support Files"; + path = "../Target Support Files/HXPHPicker"; sourceTree = ""; }; - E5B87255883FF2491827C25D20AA6E24 /* Placeholderable */ = { + E5201F3866F50193E15BB3B6B62DB64E /* Resources */ = { isa = PBXGroup; children = ( - 2082CF6101F2C1D95E6AA64DA48FA9C6 /* IQPlaceholderable.swift */, - ); - name = Placeholderable; - sourceTree = ""; - }; - E8BAC1ABC4D224C9FD7B9EA798FA89CD /* Resources */ = { - isa = PBXGroup; - children = ( - ACA84D9FD7A30E84D64FDD5B306DE077 /* PrivacyInfo.xcprivacy */, + 87F5684EEAC16057EE7CFC5BACC763C4 /* PrivacyInfo.xcprivacy */, ); name = Resources; sourceTree = ""; }; - EA761952229FF5E736A9D51024E3B26C /* Popover */ = { + E5F5C55E92AC2AAD92797EE3CC9ED22C /* Frameworks */ = { isa = PBXGroup; children = ( - FB8BDEA4C7A77BAA0355626608295FB3 /* Popover.swift */, - 82E03FC2739088B6695017EFFF339F6D /* Support Files */, + C850C078C1E24C07530E60B35CF3DF4D /* iOS */, ); - name = Popover; - path = Popover; + name = Frameworks; sourceTree = ""; }; - EB2539048E7BDC98365D91AB0A1E942E /* Support Files */ = { + E60D404C90FA88964FA6392E06D2D272 /* CocoaMQTT */ = { isa = PBXGroup; children = ( - 1D2FE9608AAFE10B6C532B177274353D /* MJRefresh.modulemap */, - 4846DEBD1B88739515A29CBE64DAD34F /* MJRefresh-dummy.m */, - 7CCD874AE1FC5B522BA3D50B6F03D7B2 /* MJRefresh-Info.plist */, - 1DB6B3A6190703C3CC0E2646340F58EC /* MJRefresh-prefix.pch */, - CFC2CA99DCB07C318665A8C26096B21E /* MJRefresh-umbrella.h */, - 7FAA15A80E3EE70FB8617B72A76C5C99 /* MJRefresh.debug.xcconfig */, - 086F64A3B9E25E5506DF53C6A7398B30 /* MJRefresh.release.xcconfig */, - D2F3CE00946882B137C6D3ADE1F17BF5 /* ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist */, + 3354CCF305F029048F29E81C8CBCEF66 /* Core */, + EEC1FFA5679453BBA638BBC65D9FB99C /* Support Files */, + ); + name = CocoaMQTT; + path = CocoaMQTT; + sourceTree = ""; + }; + E67F28A7BFC2D0A10F4A859FF3252BD1 /* Video */ = { + isa = PBXGroup; + children = ( + 5ED4C28A20C58BA223BDDBF5861D744E /* YBIBVideoActionBar.h */, + 1EC1B8C248D81410FDAFCB9BE646654F /* YBIBVideoActionBar.m */, + 4E70EBF8D3A2110BAE7AB2F5C0FCE6B7 /* YBIBVideoCell.h */, + 57A2457AF7E1D5EF7A21A2F3D540DA59 /* YBIBVideoCell.m */, + 8949E81B22A5BA6D918960149D5B3E4C /* YBIBVideoCell+Internal.h */, + 4448D42457474E9CEFD9FDDB43FCDE90 /* YBIBVideoData.h */, + 193E7324AAD235E26ADFD7F5B3EEB6C7 /* YBIBVideoData.m */, + EA7C9A78827F0C1A7A33C41BAAE00C77 /* YBIBVideoData+Internal.h */, + A9F238C824DC5CABA2405329173D8675 /* YBIBVideoTopBar.h */, + C5CFBD20109F66699F30CEBC6AB89D14 /* YBIBVideoTopBar.m */, + 522607A5314BF8105FC7AA0003C2790A /* YBIBVideoView.h */, + CFABCB79861B27F18DA91612184F6887 /* YBIBVideoView.m */, + EEDC9305ED11DC686414C6542BB53A3F /* Resources */, + ); + name = Video; + sourceTree = ""; + }; + E69EBF1C66CE1E6E987817BBE63B224A /* MJExtension */ = { + isa = PBXGroup; + children = ( + 2BD8508309633303254E1D0D64DC2DF9 /* MJExtension.h */, + E3620E9742F07E1E2733403D44E6B104 /* MJExtensionConst.h */, + 637305295B526B7C505220CE2A7893E8 /* MJExtensionConst.m */, + 2D7D7A97A7089AEDDA405B472981349F /* MJFoundation.h */, + 53594C8166DD9CECAC206989DD8F274D /* MJFoundation.m */, + 57DACE5762DB2310A02D85503ED9DED1 /* MJProperty.h */, + FAF290DAFBACC9C13199D9CE5174EDA4 /* MJProperty.m */, + DFD1D7F5AE312A4CF621602C119A807D /* MJPropertyKey.h */, + C1B656B97F0E6F92AF27F46991440302 /* MJPropertyKey.m */, + D80F30B4976169EF9937B6A44FD12D40 /* MJPropertyType.h */, + DE1E6901934EE596740D842380286A4D /* MJPropertyType.m */, + CA1E32AF2B6B2E567E088EE3153CA7E8 /* NSObject+MJClass.h */, + FA212ECF33B3A933473221784ED69166 /* NSObject+MJClass.m */, + 5AB1411EA19E9E5CCE78567975424B15 /* NSObject+MJCoding.h */, + BD344724CF8CFF05B4EC629141908CFD /* NSObject+MJCoding.m */, + CF0EB9FA6D0C021B52847CA29ACE00CF /* NSObject+MJKeyValue.h */, + 89594ACC4AC688E569CADE30241012CB /* NSObject+MJKeyValue.m */, + 3AC8482EF4E24B214C0C7B9E49611EE5 /* NSObject+MJProperty.h */, + 69B4A7FF944AD82C79E440C8DF908199 /* NSObject+MJProperty.m */, + 0531C9A5E841EDBCD66B6F621E48F634 /* NSString+MJExtension.h */, + B335E945CD78406784CCA803F62F16F3 /* NSString+MJExtension.m */, + B50A3A53296A60335F9EC54745F2EA5C /* Resources */, + 85B1E4EC1A97067A50E27785FFF4EB42 /* Support Files */, + ); + name = MJExtension; + path = MJExtension; + sourceTree = ""; + }; + E9E5A69AF7E4BC033E90E0F769D9646E /* Callbacker */ = { + isa = PBXGroup; + children = ( + 7983D53E055B37FF8E25038B02CC164D /* OIMCallbacker.h */, + 5B0150E1B9B7AA3DE6394C130418B487 /* OIMCallbacker.m */, + 90C7FFBD13E7069D7CDB43E2A9F7F81D /* OIMCallbacker+Closure.h */, + CD723E5D168E0DB8A0F018B2A3F37D7A /* OIMCallbacker+Closure.m */, + F21FFCD8871B063FF323D4E6DEEBC240 /* OIMGCDMulticastDelegate.h */, + 423264E105440A0186760072DCD20FCC /* OIMGCDMulticastDelegate.m */, + ); + name = Callbacker; + sourceTree = ""; + }; + EAF84AD095D72F6E0529578F7284CCFE /* Resources */ = { + isa = PBXGroup; + children = ( + 277192D403211FA10EEAC643C35570AD /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + EB0510EACDEE7519FFB716FBB9089BB1 /* SDCycleScrollView */ = { + isa = PBXGroup; + children = ( + B0AB04C5B7E187EB649C48990318B217 /* SDCollectionViewCell.h */, + 33B78742EEB2B26C6433B045E4C130E7 /* SDCollectionViewCell.m */, + 8B4B42635EF69EE9862334DD24CC3566 /* SDCycleScrollView.h */, + 335488488BA5012989636955BBCB8F05 /* SDCycleScrollView.m */, + 158C77258A2351E9D3B6E93C28100672 /* TAAbstractDotView.h */, + F55A04BD28A92256172FFBE62A100A7B /* TAAbstractDotView.m */, + 3526170ED597B2F4DF1BF8DD590D5391 /* TAAnimatedDotView.h */, + 46401BF2160F11FED118E9A0C76EDE18 /* TAAnimatedDotView.m */, + FA45A4A7B7866A3D8115C051623E3CF7 /* TADotView.h */, + 38D2052BC73AF3D0CEB469FDC3D6C867 /* TADotView.m */, + 9EEC0659E54BABA5CEDC5C8D6F2B82C0 /* TAPageControl.h */, + EA130CD648B85D56FD604CD251FFD940 /* TAPageControl.m */, + FD30BE25D5B77C034CA2040AC6EF80E6 /* UIView+SDExtension.h */, + AD1D86B254CE47711A06BBB8609D5C1C /* UIView+SDExtension.m */, + 6A1DF896831FAB9A457EECCA4F045D31 /* Support Files */, + ); + name = SDCycleScrollView; + path = SDCycleScrollView; + sourceTree = ""; + }; + EC1B197DDB5A762DE794CED65B40DE63 /* Support Files */ = { + isa = PBXGroup; + children = ( + C53A4E9FEDAEA9A964D888B3B4ACDE62 /* Differentiator.modulemap */, + 3676B48C2F610BF5A549DEC0E3237259 /* Differentiator-dummy.m */, + C9A1F58E7DA61B4F02959233658F889B /* Differentiator-Info.plist */, + B50687CF3F684AA051CA00760DB2F127 /* Differentiator-prefix.pch */, + 2F2C087558ADE98640782FDA625F779D /* Differentiator-umbrella.h */, + A26A017981C2551A9932A411A10D8C13 /* Differentiator.debug.xcconfig */, + 800097F58750AAC2B2BAF8E599AD7AEF /* Differentiator.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/MJRefresh"; + path = "../Target Support Files/Differentiator"; sourceTree = ""; }; - EFE5927F7E570D4A275ADA784B520553 /* Products */ = { + EEC1FFA5679453BBA638BBC65D9FB99C /* Support Files */ = { + isa = PBXGroup; + children = ( + 6F21BA5E097A8DE88F83DD9522A9D0A0 /* CocoaMQTT.modulemap */, + 3C61A14610D0126017F22A925514C694 /* CocoaMQTT-dummy.m */, + A81A9BF5594B5731597BBC2E2B350AE5 /* CocoaMQTT-Info.plist */, + EA78CE4C4E183B922A11439BE9465823 /* CocoaMQTT-prefix.pch */, + 5630C95267C5EDAFCAA18472484F8E66 /* CocoaMQTT-umbrella.h */, + 1572295F624626F7E6A25BFFD705DE16 /* CocoaMQTT.debug.xcconfig */, + 8510A31B20023A5D55194501EEC480F3 /* CocoaMQTT.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/CocoaMQTT"; + sourceTree = ""; + }; + EEDC9305ED11DC686414C6542BB53A3F /* Resources */ = { + isa = PBXGroup; + children = ( + 6F49859D2EBDF3619C22E8A959FF01BD /* YBImageBrowserVideo.bundle */, + ); + name = Resources; + sourceTree = ""; + }; + F1F3AB582168068047CB22DFF189D8BC /* Products */ = { isa = PBXGroup; children = ( 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire */, 085DBCE7DD98588B2ED103B1C1F36026 /* Alamofire-Alamofire */, C261436D14052AE3C35F240BCD155CAC /* CocoaLumberjack */, 519AF98C92B517DD023896CD077EBFD4 /* CocoaLumberjack-CocoaLumberjackPrivacy */, + E6A4E1627379D6540B81A470C575D716 /* CocoaMQTT */, D51C3D0C53D23B97B032E3BDD4F82C82 /* Differentiator */, B313762A2C974EF09CE7FBAC374B6DFD /* HXPHPicker */, FC7F0CF2EA5DF59C59D9995890DA5C47 /* IQKeyboardCore */, @@ -9331,6 +9711,7 @@ E49D6D248DD1CEE584E6776B9164A1B2 /* MJRefresh */, 7E3097CFEFDA621E9FB0E62009FF87FC /* MJRefresh-MJRefresh.Privacy */, 3756A9BBE41ABEE8DCBF5BCA6972C4DA /* Moya */, + 08DE826BB58AC8456D39338C267DB337 /* MqttCocoaAsyncSocket */, B9084FE779702931E8DF1D00A2D725FB /* ObjectMapper */, FE6B8ABE5D0AD8A55BCFA48D21915C07 /* ObjectMapper-Privacy */, 1D6CFC15839ACA2CFFE42FF0D4017A07 /* OpenIMSDK */, @@ -9363,300 +9744,185 @@ name = Products; sourceTree = ""; }; - F00883E6CC241DFA597CE4D826864AAB /* Support Files */ = { + F27BEC3AFB9CB8C7BE8741955A88428A /* Resources */ = { isa = PBXGroup; children = ( - C117CFE5F649547894B19490E91DC335 /* IQKeyboardCore.modulemap */, - 525CD205D27F9863472F14703FE96F86 /* IQKeyboardCore-dummy.m */, - A22E4F69C2B5364D39225FE8A26D6D52 /* IQKeyboardCore-Info.plist */, - BA1C0686D3B77AFA9CF96045D8924FE4 /* IQKeyboardCore-prefix.pch */, - 6C8F1BE5271921E4112CB6A96BB1E636 /* IQKeyboardCore-umbrella.h */, - ED84EE15E780A4989C1BA79801B0FCF2 /* IQKeyboardCore.debug.xcconfig */, - 94801563DB532EDC0D80A3BCEE705193 /* IQKeyboardCore.release.xcconfig */, - 2860F4098A792B41F328813B0B8C63DE /* ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist */, + 22A0CAC012E06B7CA4430A19FA504471 /* AMap.bundle */, ); - name = "Support Files"; - path = "../Target Support Files/IQKeyboardCore"; + name = Resources; sourceTree = ""; }; - F2B158C56525CB37D0756C301E1ED796 /* Frameworks */ = { + F2885CB689AB458D2550825B8891B537 /* Resources */ = { isa = PBXGroup; children = ( - 8A289C4B349FC18182B850690A731B54 /* AMapSearchKit.framework */, + 088F69851DD20A7E2B4360E4B044A7EF /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + F3C94C83587B7C880837CB978C6057AA /* Resources */ = { + isa = PBXGroup; + children = ( + 81A904CC270F40DAD1A3F3B872317F74 /* PrivacyInfo.xcprivacy */, + ); + name = Resources; + sourceTree = ""; + }; + F622E344DE756B39160F9A2CA8BC57E2 /* OpenIMSDK */ = { + isa = PBXGroup; + children = ( + 140B90127F8284D9D202F085B0596ECE /* OpenIMSDK.h */, + E9E5A69AF7E4BC033E90E0F769D9646E /* Callbacker */, + 89982FE6845276AD7CB7B77D6DE60F37 /* CallbackProxy */, + 2AF197CA5C99CF72FF47CF9E963E3B00 /* Interface */, + 6407C2B50B084AD33143E72B9879A582 /* Model */, + C7A7BA4CEC9739DBC6E1C548D5B3509F /* Support Files */, + DAA27F241C38D2B2ADCB38ADC20D98D5 /* Utils */, + ); + name = OpenIMSDK; + path = OpenIMSDK; + sourceTree = ""; + }; + FA24AC496694CC0F7BDFC3B94CAD8F28 /* AMap3DMap */ = { + isa = PBXGroup; + children = ( + 6F476A0F630588EC001BA726F7230DE0 /* MAAnimatedAnnotation.h */, + 3B3B4B9F481B229260E949B4E0BFD04D /* MAAnnotation.h */, + 536DEEB258E2B70900710B5E8FC66D08 /* MAAnnotationMoveAnimation.h */, + 5AC2A8315BF414FD10417F45C17F129F /* MAAnnotationView.h */, + 328DDF3378405C46687D785CD170BBE8 /* MAArc.h */, + 9DEB529B2C777502325ABEA4D9CFF4A9 /* MAArcRenderer.h */, + FA1B3D33E1E2CC485CB770904F585605 /* MABaseEngineOverlay.h */, + D58502CF1328DAFBECC1FCDA8D9977D3 /* MABaseOverlay.h */, + 278619F364243280567A6DC8713CF090 /* MACircle.h */, + 5395433AE72618F4C6E62E1EAD06583D /* MACircleRenderer.h */, + 0C72CD0DD87596086C9AF0B56109C312 /* MAConfig.h */, + 275C9C22C6613394FF56DA407F7A0984 /* MACustomBuildingOverlay.h */, + DF7D16D0FE91DDE31FC402A033B81E21 /* MACustomBuildingOverlayRenderer.h */, + 3C6C2C1E35F34598B436A9715B3178E9 /* MACustomCalloutView.h */, + 50E7654753D12870F9957B1D05E0070F /* MAGeodesicPolyline.h */, + 72EB134685BD981674EE5719D703B0E0 /* MAGeometry.h */, + 42D00A5C619445D1495B62A932B9DE3B /* MAGroundOverlay.h */, + 44D897C6C7596759284807513D0F656D /* MAGroundOverlayRenderer.h */, + 858773D1E33A099C96526441A987E2ED /* MAHeatMapTileOverlay.h */, + B413FF66AC5CD323A97820A94E4B199D /* MAHeatMapVectorGridOverlay.h */, + 7F9D6946F90005D408F0F33D2D99A653 /* MAHeatMapVectorGridOverlayRenderer.h */, + 04165116172DB6943583A8C0448C2A3D /* MAHeatMapVectorOverlay.h */, + 2753B5C58645A09D290E600E3BC9DA7F /* MAHeatMapVectorOverlayRender.h */, + 7208DE5B0D75C8BD53D09473AD6743A6 /* MAIndoorInfo.h */, + F71D0D26D45B5542A0A8F39277E64753 /* MALineDrawType.h */, + 423169ACF822472DA2500156F0733BB8 /* MAMapAccessibilityIdentifier.h */, + ACA0FD1057D4E019CF3F33E4DD4C7F55 /* MAMapCustomStyleOptions.h */, + 6325F793B5AC4E9D6C23999F997A27B3 /* MAMapKit.h */, + B85B00D192F8CAF5C187AE860E1B7101 /* MAMapSnapshot.h */, + 5BEBB2722A594F06C7EA18F3A1060AC6 /* MAMapStatus.h */, + 58BCBEA4DC72DA1F90CEE9B583D7D999 /* MAMapVersion.h */, + 71A2C4C71126517C40B0DB66C220EBD7 /* MAMapView.h */, + 3D365F8F2795391FEA3A7976186221B1 /* MAMapView+Resource.h */, + 323F33641A0EBD63B2A4092E2A400D62 /* MAMultiColoredPolylineRenderer.h */, + 5DB4F11D14B8046F8001DD637F89FD95 /* MAMultiPoint.h */, + 96F3E5D9B2FF0D6AA2D5960343BEE699 /* MAMultiPointOverlay.h */, + F642CE189FBD1A03236E003623E87E58 /* MAMultiPointOverlayRenderer.h */, + A1458B5A431F562E12F39408D20AACD5 /* MAMultiPolyline.h */, + A0526BE677EE80BEB8B8F270EBF0711B /* MAMultiTexturePolylineRenderer.h */, + 58BCD5CBFF14B89ADBDF291E1F9D9272 /* MAMVTTileOverlay.h */, + DCCCE1F7F46C22320520E6F805D4750A /* MAMVTTileOverlayRenderer.h */, + 1804279EFA58CB40CB913B6BA37A081A /* MAOfflineCity.h */, + BB93E38AD3C52061F96904FE8367EBB7 /* MAOfflineItem.h */, + 18CCEF9F4B1E514EE1C151BAFB108BB2 /* MAOfflineItemCommonCity.h */, + B5D2D3AE65A187B8FEF27AEA68252A80 /* MAOfflineItemMunicipality.h */, + DE691F3994CC695878CAD1302104BA69 /* MAOfflineItemNationWide.h */, + D9AA6644C740DEBA4D2CFE120147749F /* MAOfflineMap.h */, + 259B8BB391902490BE6CB75B27D954D4 /* MAOfflineMapViewController.h */, + E08C9F4051C49DE50433663D3F76F9D6 /* MAOfflineProvince.h */, + 05C843F98BE11FA841C4889FB5BE5773 /* MAOverlay.h */, + 306934A83C5EFAA04DB020939FC11FD0 /* MAOverlayPathRenderer.h */, + 4A1C62F9A38F1FD80FB92031BAFDFAF5 /* MAOverlayRenderer.h */, + 605153200D33EF84B07350CBDC5C1DCB /* MAParticleOverlay.h */, + 8CCA2E44E59981BE0EACCD1B13A784DC /* MAParticleOverlayOptions.h */, + 55D46CF71D5154F263AC8564AA723692 /* MAParticleOverlayRenderer.h */, + 64C6220B00E5F0A013BFFA10F5EE99E1 /* MAPathShowRange.h */, + CA06EA67576AB4DA1C662F80B2FC1A3A /* MAPinAnnotationView.h */, + E02B5460C16F5447650288B96410B6BF /* MAPoiFilter.h */, + 072418454C445A6F822370D323C70103 /* MAPointAnnotation.h */, + 000906441E421AC44EFD2B17AF49ABEF /* MAPolygon.h */, + AFEDB749D90165E90B360880E2B0BF0F /* MAPolygonRenderer.h */, + 9EC2A9DDAB7BEE8FDC3EACBC3C4C1D1E /* MAPolyline.h */, + 1E591870392035106E96512F65102385 /* MAPolylineRenderer.h */, + 957ABD5CBD7C6C587953F24C9B4801B8 /* MARouteOverlay.h */, + 153604802C3D5B8223956E5CB7AAA14F /* MARouteOverlayModel.h */, + 22F35B08FE80D620A4E10C301B3181A6 /* MAShape.h */, + D70C39F07A6519EF9AAB2BE1DF2272BA /* MATerrainOverlay.h */, + 5A3F99D429B6905052BB416F92885D5F /* MATerrainOverlayRenderer.h */, + DF26523D4FE930F3F717C1C2811DC2D6 /* MATileOverlay.h */, + 731CEBC2B0AC7F996BF22CAFD8482D40 /* MATileOverlayRenderer.h */, + E12432D22B9EE08D0AAFE1409868E544 /* MATouchPoi.h */, + 7CB54E37C3D8E8221EED74772BBAB72B /* MATraceLocation.h */, + 5F862FDF6BDB6EA81D6FAD1A68F9B444 /* MATraceManager.h */, + 6860AFC57864328E2A00C39E5DCC17C9 /* MAUserLocation.h */, + DD18BE8DE0EF2EA417D20CE3978E8782 /* MAUserLocationRepresentation.h */, + 4DF06C65934AA46F4928AB88AF81DC06 /* Frameworks */, + F27BEC3AFB9CB8C7BE8741955A88428A /* Resources */, + 1599095F42B10F407428B81B12177944 /* Support Files */, + ); + name = AMap3DMap; + path = AMap3DMap; + sourceTree = ""; + }; + FADF433389EC6E744C22289B13560776 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 3D87137706F35911310CFABBD8880A4D /* AMapFoundationKit.framework */, ); name = Frameworks; sourceTree = ""; }; - F456D54BFDB45606FD2826FBEEC75A16 /* MBProgressHUD */ = { + FC8142659FBF40BE9B6BF0EA9829EF8A /* Resources */ = { isa = PBXGroup; children = ( - 937ADC586D7A9572D0499B091531BB27 /* MBProgressHUD.h */, - 4C2FF52A2AD4EFB49CA6B7904FDF26EA /* MBProgressHUD.m */, - D6AE84D7A883F200DE62C54E650BDB4C /* Resources */, - C035CC7FFE41C3C574BD25F1D57B32F3 /* Support Files */, - ); - name = MBProgressHUD; - path = MBProgressHUD; - sourceTree = ""; - }; - F56875C21757957BEF6B761DC98D8504 /* Resources */ = { - isa = PBXGroup; - children = ( - 79991E2B9E282CACD293EC27C823FE3E /* AMap.bundle */, + 45F9E01CB1B5AD57F4855BEAFABE70FF /* PrivacyInfo.xcprivacy */, ); name = Resources; sourceTree = ""; }; - F7C7D0A1E1783A005ECB525ED5C4FBD2 /* Resources */ = { + FD24351E668B6206CE5BC360C713BFB5 /* Support Files */ = { isa = PBXGroup; children = ( - 5631AFA1B502DB722A84A7D8AEBC9608 /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - F7FCEF70C7D9750C1B6ED3C89E1E04E3 /* iOS */ = { - isa = PBXGroup; - children = ( - C77D66DCCBD20AA11966F53C867FF4FB /* Accelerate.framework */, - 51BA12DF890414FF3DD09E9C68FA652D /* AssetsLibrary.framework */, - F22AAF79A7B61FB53A870AA54CECA0A5 /* CFNetwork.framework */, - BB070EEA28E7CED98A5D3FBC546B2023 /* Combine.framework */, - E04FBA11E10D9D33996D230B6C10B978 /* CoreFoundation.framework */, - 29F796D6472EA6FC82B038C97ECF4785 /* CoreGraphics.framework */, - 4BAE82BA654C7CDA2022A2F964E00DC3 /* Foundation.framework */, - 65CFE3481B5AC8650B206B3A373CA75D /* ImageIO.framework */, - 84364ADC8106E744D74626D2D0AEC0B7 /* MobileCoreServices.framework */, - 9DD1638A7E851D89BA5A60B16C3122AA /* Photos.framework */, - 1296678825E509F2A6EBEA9A83A60147 /* PhotosUI.framework */, - 58B9B2BED448FF6B8E278E87D6D430A3 /* QuartzCore.framework */, - 9542D08E68E56D8CFEDBC7CD5F29AE32 /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - F92D38EEB283873DE3BC6F7542FD9F5C /* GTCommonSDK */ = { - isa = PBXGroup; - children = ( - B8175D252F228A82B4B468FE53FE1054 /* Frameworks */, - 21764D062FBD199DAC83E1EB5A269654 /* Support Files */, - ); - name = GTCommonSDK; - path = GTCommonSDK; - sourceTree = ""; - }; - FA3643B9EB0DC348D5E145744C5C997D /* IQKeyboardManagerSwift */ = { - isa = PBXGroup; - children = ( - 06E4BE89938F40F906CC60D72240FD70 /* Appearance */, - 875EAE81E1A431FDF6BB486F0E3129A2 /* Core */, - 4F0CDE059BDFC8D56B1C035A7A27130C /* IQKeyboardToolbarManager */, - B60B395FEF9D2B980EC8C3072FCC6020 /* Resign */, - 02143E9AFEAEC702FE2D8A4CE262415A /* Resources */, - A1787D86241D5231123FE52CE70DB675 /* Support Files */, - ); - name = IQKeyboardManagerSwift; - path = IQKeyboardManagerSwift; - sourceTree = ""; - }; - FA73FB89FFC6C041D2C971504BC4F6B0 /* Callbacker */ = { - isa = PBXGroup; - children = ( - 722CBBE05AA45B4D4BCC2A8D48EC1CFB /* OIMCallbacker.h */, - 3E47F234141A9130E3D666C798E5329B /* OIMCallbacker.m */, - 8068E8070D96B799FC962E5A1BC5511B /* OIMCallbacker+Closure.h */, - A3AF198343EDA479FAEFF07AB3155C1A /* OIMCallbacker+Closure.m */, - DD55E3EE49E45A74B40D393DA730FB1F /* OIMGCDMulticastDelegate.h */, - 36E652E445F8CECC432D298A13A78229 /* OIMGCDMulticastDelegate.m */, - ); - name = Callbacker; - sourceTree = ""; - }; - FA8BC2C4FFD28ECB131D96288CDC922C /* Resources */ = { - isa = PBXGroup; - children = ( - 43E68058B169D1FBD605BEB82E2A7B8F /* PrivacyInfo.xcprivacy */, - ); - name = Resources; - sourceTree = ""; - }; - FB8F2C6262E7A6E43D78BD8E5D73242E /* Frameworks */ = { - isa = PBXGroup; - children = ( - 486BC245372C2FC6F3B475C1D0AC365B /* OpenIMCore.xcframework */, - ); - name = Frameworks; - sourceTree = ""; - }; - FDB60DA6F3D82B35536E04AFE17973A0 /* Core */ = { - isa = PBXGroup; - children = ( - 2F5E0EBA29568C35DF864FAF6CBA4DD6 /* NSBezierPath+SDRoundedCorners.h */, - 3F4975EE0DFB3B2FF2DC34F0C3FAD60E /* NSBezierPath+SDRoundedCorners.m */, - CE6A24FF0DA7E2B9D9E7D6432F783172 /* NSButton+WebCache.h */, - 8F878A7EA007A0B25D711F68CEC2F467 /* NSButton+WebCache.m */, - AB2DDA3D7CBE2D21345D27AC7AF3D8B6 /* NSData+ImageContentType.h */, - 453CA5B7C2555E48218CED21C1BC8519 /* NSData+ImageContentType.m */, - 96A774383BDFCF0DCC96A12872CBD4BB /* NSImage+Compatibility.h */, - 6D47897E34F522D3CF1F0C22AB710E89 /* NSImage+Compatibility.m */, - B13292BD10906E86B88551C19BEBC246 /* SDAnimatedImage.h */, - A8F92E2A7462A6E9C1EBE6F316F7E10B /* SDAnimatedImage.m */, - 1C4A3B8F09E406012F86745357A1CD7D /* SDAnimatedImagePlayer.h */, - F1230DFA99D00D6DA8C2465727F22D30 /* SDAnimatedImagePlayer.m */, - 81EEAD77C593182D302DEC7E521078E3 /* SDAnimatedImageRep.h */, - 584B397D010BE3052C3967E87A313165 /* SDAnimatedImageRep.m */, - EB7E2AEED7BA2AEFE99F0369B0A398E2 /* SDAnimatedImageView.h */, - BC8B0B4D9A47EDA4FB888829AF560CD8 /* SDAnimatedImageView.m */, - 6737E046AAEEC1377A37635597AD9339 /* SDAnimatedImageView+WebCache.h */, - 75FE13F045D517683751F241C2D07B5D /* SDAnimatedImageView+WebCache.m */, - AD6C858EAA13A54CA0AA44CC1CE1B01A /* SDAssociatedObject.h */, - 6DFC47471DC57CA8A3990D13F5421EC2 /* SDAssociatedObject.m */, - 36203684131055DB499F60D39CE2F9CA /* SDAsyncBlockOperation.h */, - B552EFCDA8BC74439CF19FF88D4BA03C /* SDAsyncBlockOperation.m */, - D42BD13DE088E55D9440C64037EC2796 /* SDCallbackQueue.h */, - AD1C37483F1765480EA3F2E60B78344D /* SDCallbackQueue.m */, - 56C8858466B5059D32D3438BB36FF23C /* SDDeviceHelper.h */, - EF1552FB2882AE6292A41E0FE732D03B /* SDDeviceHelper.m */, - 0EFE005BE578C2D2E402895822FD412B /* SDDiskCache.h */, - E1D1566EFC577C509F7BD737CAC55973 /* SDDiskCache.m */, - CD0484F6BC5E5083AA0A3493E6A7E299 /* SDDisplayLink.h */, - 4D8BD69420673B5C0598B75F654685F3 /* SDDisplayLink.m */, - 9421E603875C52CCF37AA01A75D831F8 /* SDFileAttributeHelper.h */, - 541F4A250353BC493AD6863F891D9F95 /* SDFileAttributeHelper.m */, - 32FEFE432FBEFC662E16C8BDE4DA9817 /* SDGraphicsImageRenderer.h */, - C14B726FB27D2B21A55B33ADEC4ECFB9 /* SDGraphicsImageRenderer.m */, - 6B0442B2E380011F57D531EC0553CF0A /* SDImageAPNGCoder.h */, - 639CF52A40302ABAD0394A3F45CD9342 /* SDImageAPNGCoder.m */, - 0C4A299CFB1CC50C15D414460381F776 /* SDImageAssetManager.h */, - 944D14CC3340E5906FB0AE787C227F8A /* SDImageAssetManager.m */, - 812CB0666B267F4A5171B774F6D0D99B /* SDImageAWebPCoder.h */, - AD3F046E6A26BC1343E61DFF8913EEBD /* SDImageAWebPCoder.m */, - 6B34C0675FA28CE45E9A9E5129638E48 /* SDImageCache.h */, - A90426A3569DFD849BCC6A1F9C5CCD8D /* SDImageCache.m */, - D3C3F3D9536425D441065A0DD49296FA /* SDImageCacheConfig.h */, - BA191322E165A18078EB558F6D18F31E /* SDImageCacheConfig.m */, - 078588641DE48A9F8B942FE651C967F5 /* SDImageCacheDefine.h */, - 5FE0AF0A4A942C9B375AB754DEE35103 /* SDImageCacheDefine.m */, - 9F7376569D3C3F89560606F792EFCAE3 /* SDImageCachesManager.h */, - DF51400637F64015372A2214FB9C7DBC /* SDImageCachesManager.m */, - DB2F9EE6399F9C70D28AB93C2F3695D3 /* SDImageCachesManagerOperation.h */, - 06C6D818FF85158065EEB29C708DF89F /* SDImageCachesManagerOperation.m */, - 707AC05913DB1E5066C5D4A3117A8D94 /* SDImageCoder.h */, - 50ED832AF109F2B258D94F54C004E6F6 /* SDImageCoder.m */, - DC1657AFEF441E5B1C0C549DEC563130 /* SDImageCoderHelper.h */, - E4D3017944C2D05C9DAE6514D3E169CD /* SDImageCoderHelper.m */, - E059300BBA1B1C6E282AABF76CB9A425 /* SDImageCodersManager.h */, - 7D21B5AC77BB1F5C1839961C7C149A4F /* SDImageCodersManager.m */, - 64DA66D7FA4D6D1DFF8EB0A3D5A1B537 /* SDImageFrame.h */, - 1724A41AA97890D9CB0895E2B99DCD9E /* SDImageFrame.m */, - 564EC0EDD2FAFB0AF6925E211B89F1CD /* SDImageFramePool.h */, - 386033983F3A03681989750FE5B69703 /* SDImageFramePool.m */, - D68AE9C63479784FDA72DE0494BF25A9 /* SDImageGIFCoder.h */, - 0846B8700232494BFCEC5F1561A0AD7C /* SDImageGIFCoder.m */, - 65116B7F8B410E440874CCFA63662B20 /* SDImageGraphics.h */, - 7FE1BA63F690470C059660AF0B0F5AC8 /* SDImageGraphics.m */, - 7C431CF55C1DEA301F7009AC22BAF420 /* SDImageHEICCoder.h */, - DF48A0B567CF35580C11362739F02501 /* SDImageHEICCoder.m */, - 42B2824679F61129A99A02FB3B02A3D9 /* SDImageIOAnimatedCoder.h */, - 60EDA73CDAB249744F8D82D94147C9E2 /* SDImageIOAnimatedCoder.m */, - E92A2F23BD154B929E5D231A46F3FCA1 /* SDImageIOAnimatedCoderInternal.h */, - 680A5B1FAD29D5052E4E207406B38187 /* SDImageIOCoder.h */, - 4D6D43780E33C2CDBD9719B5CA9CD786 /* SDImageIOCoder.m */, - 9A4D97DA05C3A8E92FE31917D35A2473 /* SDImageLoader.h */, - B9D4067406FA8209E984A168CBD3D6A7 /* SDImageLoader.m */, - 7F033F3D3DD2BD7F88B3CFEBDF396ED5 /* SDImageLoadersManager.h */, - 6D1715A4AEA9E504CD864D3449B29041 /* SDImageLoadersManager.m */, - 1F58995D9C873B51C91694DA3DF853E2 /* SDImageTransformer.h */, - 680A88CC00CB2961A0B5247C9F2AFDEB /* SDImageTransformer.m */, - 035A29367C3694753943C9E78FE114DE /* SDInternalMacros.h */, - EDB10F862D32D2EB8157A71B23F041C5 /* SDInternalMacros.m */, - A18CEDAEF818C6AB48438A2230736E32 /* SDMemoryCache.h */, - 5E47BC20E69F8FD24594FFC1D8910599 /* SDMemoryCache.m */, - A8167F7A91C1C9DD4217753A632852CD /* SDmetamacros.h */, - 2FA02D6C631F6C170C069CABD449F276 /* SDWeakProxy.h */, - 972CC00CAA521E6FA780F098E389470A /* SDWeakProxy.m */, - 847FB0FA98CE4AC2E60D73CCAC2CF1AF /* SDWebImage.h */, - D86878EE3183A9473ECB5A2110815050 /* SDWebImageCacheKeyFilter.h */, - 0DA807B3AA45AE66EB8FD6744357C386 /* SDWebImageCacheKeyFilter.m */, - 10EE3A5EAF25A1133FE1366F3E35BD6F /* SDWebImageCacheSerializer.h */, - 8472C6305564D304D3D3D434D7191E22 /* SDWebImageCacheSerializer.m */, - BBCDF59E6D69248934B4BC8F30930BBC /* SDWebImageCompat.h */, - 78936EC2DBF2CF8634C0CC3581635D28 /* SDWebImageCompat.m */, - CACB3BCA3DB641C9B591E625330BA336 /* SDWebImageDefine.h */, - 5CC6895CB40EF7ADB0A3C945CEDFF07F /* SDWebImageDefine.m */, - F98D9C1BCC770B8E7D5CE310E26D0F4D /* SDWebImageDownloader.h */, - 7F5CFA1AE264D0A7CC41E863C86C294C /* SDWebImageDownloader.m */, - 11E4FA4C2B1EA9C47652450BD97F5DAC /* SDWebImageDownloaderConfig.h */, - C3F217B8362CC3E3556A8BBDC8F0693C /* SDWebImageDownloaderConfig.m */, - A677DBA18E68A3B1473D33FD77407ADD /* SDWebImageDownloaderDecryptor.h */, - 41FEE0B7FFF23C3578AAA6B48F10FD1E /* SDWebImageDownloaderDecryptor.m */, - 726A570EB3A764BD9182B257D8A9B086 /* SDWebImageDownloaderOperation.h */, - AA79DD3CDCB73818B02AC1D089A6D543 /* SDWebImageDownloaderOperation.m */, - 9AACEF2C953C3C0DBC735A19E819E97D /* SDWebImageDownloaderRequestModifier.h */, - 5DB84D16310CC6D943255E049A9E9D77 /* SDWebImageDownloaderRequestModifier.m */, - 1E8354D6F5407F2DBB7BAE63AF881072 /* SDWebImageDownloaderResponseModifier.h */, - 38A2C4F42AAAE1661BF9821201515A70 /* SDWebImageDownloaderResponseModifier.m */, - 8CD15BB092F57C56BCAA6B4B7F799504 /* SDWebImageError.h */, - B838E8CD32B3E7AF843A57E9E5C5B435 /* SDWebImageError.m */, - 08E79F539A51EF5624368459D580FDA3 /* SDWebImageIndicator.h */, - 3934EA26369C7ED8AC99BDB4DF11A6E2 /* SDWebImageIndicator.m */, - EAB7003BBB2F9EF9DA4E095D91280CC0 /* SDWebImageManager.h */, - 850D41C7AEEAD377501D1391EFF8CD50 /* SDWebImageManager.m */, - A9A5A6309F39C14ADCA5F233F829C0AB /* SDWebImageOperation.h */, - D77A6E5E115865516443F9DA796B6091 /* SDWebImageOperation.m */, - 769581DC9784BD5739E44A9BD1FEE12D /* SDWebImageOptionsProcessor.h */, - 736BB63679A232597C9253B4A0B634D1 /* SDWebImageOptionsProcessor.m */, - 7DA0874C875EC9052754A0E09B82B4E6 /* SDWebImagePrefetcher.h */, - 52F73D847B989EAAA31283582D8074C4 /* SDWebImagePrefetcher.m */, - 57C5F40A9D38F5D71424CF3307F62112 /* SDWebImageTransition.h */, - 1C50D5AF6E97AE83A91CBEDB011B783C /* SDWebImageTransition.m */, - ADFA2645467E0829AC032303FE5EA3B0 /* SDWebImageTransitionInternal.h */, - EA7F7E45797654B45F07848151665690 /* UIButton+WebCache.h */, - FE4D3EFFD11310558DF46FD1F4BC3E8C /* UIButton+WebCache.m */, - 8F8F9A75D00E6A2AE71D19B551AD747C /* UIColor+SDHexString.h */, - 1C1449F57688BEF3B9D5DCFB485E606C /* UIColor+SDHexString.m */, - DDAEE0D2FE71C52FD936AF6D2095F23E /* UIImage+ExtendedCacheData.h */, - 16355D6BA368A1364975051A8532358E /* UIImage+ExtendedCacheData.m */, - DA1B465FAF1DF8179501C93F8925EAA1 /* UIImage+ForceDecode.h */, - 872036297568467805CDE1401346D2B1 /* UIImage+ForceDecode.m */, - EE69701659551D2EA95E581E43FAAE49 /* UIImage+GIF.h */, - 355C2A9EBE4A9B292FB4090BC017E1E8 /* UIImage+GIF.m */, - 659ABEE73565FB13D1D253ACC5C5F5EB /* UIImage+MemoryCacheCost.h */, - 2707006BD41B87DF0C15833B3D8A4253 /* UIImage+MemoryCacheCost.m */, - 0DC1922990EE3C6470B7E270DD74209C /* UIImage+Metadata.h */, - 27D9BE3D24E10967CFE1D61E94371D91 /* UIImage+Metadata.m */, - 1227C89CE60E2237AF4BD0EB74800DFD /* UIImage+MultiFormat.h */, - 3081092804875B0A054049768857C958 /* UIImage+MultiFormat.m */, - 5E9446A922C299F4C733B3E3B64FC4DF /* UIImage+Transform.h */, - 9E1546130068EEAD3189EC41869D6F14 /* UIImage+Transform.m */, - 065D063BBA4E2E76DE8E4F0FC55DEC82 /* UIImageView+HighlightedWebCache.h */, - 5EA628EB8F76497538FA2290CB38448E /* UIImageView+HighlightedWebCache.m */, - 2C37D8F8F5792C0FBB119534DD5A5838 /* UIImageView+WebCache.h */, - 05E906325386DD455125AD4ED4D148D2 /* UIImageView+WebCache.m */, - D076B59FCDF9A92CE3960EA4ADC0446E /* UIView+WebCache.h */, - 16193DA5A0D7C1CE6F0645E191E3B728 /* UIView+WebCache.m */, - EB7396B87B6C023F0EC483AD518CC57D /* UIView+WebCacheOperation.h */, - 7D3DCF34621F9247483D8AC14424E3D9 /* UIView+WebCacheOperation.m */, - 9C9DAE1505A940BA7AE87B8FD412527B /* UIView+WebCacheState.h */, - 51F6B5ECB20B05B4A5117043241B8C90 /* UIView+WebCacheState.m */, - 0C0F35F6B3D37E54F23853FDD1CA32B0 /* Resources */, - ); - name = Core; - sourceTree = ""; - }; - FE1D993C35E23F57C7F678604B14B362 /* Support Files */ = { - isa = PBXGroup; - children = ( - B6728F00D1736A5EA82B7A41A3FE632D /* URLNavigator.modulemap */, - 457470DF1C51CF053BB4ED593859965A /* URLNavigator-dummy.m */, - F956AF2B26CA388284D8AC5398D2DE02 /* URLNavigator-Info.plist */, - BCB8986ADEB13628FCBEE6A879989156 /* URLNavigator-prefix.pch */, - 193191BB278021F213BF3AEF417EBFFA /* URLNavigator-umbrella.h */, - D8D4E72FFA61743609A51FAE174F8833 /* URLNavigator.debug.xcconfig */, - 0F326E73494C37B436B25DC1DD104CFE /* URLNavigator.release.xcconfig */, + 47B192A3DA152CDAA23C460A7AE465C0 /* AMapLocation.debug.xcconfig */, + F9A39A1F349D79A7CA652C614515AFCB /* AMapLocation.release.xcconfig */, ); name = "Support Files"; - path = "../Target Support Files/URLNavigator"; + path = "../Target Support Files/AMapLocation"; + sourceTree = ""; + }; + FDE346877AC0D4457693B942D31074B0 /* Support Files */ = { + isa = PBXGroup; + children = ( + D1B597661EBD1744C9ED9D0DF6770F00 /* Moya.modulemap */, + 94057504769A3A6E724B5B40972FC141 /* Moya-dummy.m */, + B75E188BCF351E3AFA06D9B5C90A1DD1 /* Moya-Info.plist */, + 86D333D81D219F0C8A1F7714AD9A1C6E /* Moya-prefix.pch */, + 58E05B5C93BADAEFD58E919F0B6DB5D0 /* Moya-umbrella.h */, + F9C185543B30AD5DE41DCA09C4929D61 /* Moya.debug.xcconfig */, + 3FB7A78444CD136A1E106D7281BB2012 /* Moya.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/Moya"; + sourceTree = ""; + }; + FFA90A54CF1FB8501D2D40721BC02ED1 /* Support Files */ = { + isa = PBXGroup; + children = ( + D9C6AC3FDFA670E0F4363A7F5CCA5E45 /* SwiftDate.modulemap */, + 77A1006A98BEC8471B208887084BC2DC /* SwiftDate-dummy.m */, + AC69131AF9EA014107D0800E6C683B52 /* SwiftDate-Info.plist */, + 7DDECA542B8616BF9C2AD135D1790970 /* SwiftDate-prefix.pch */, + 245230D60496C156AA01F11BF0F5812A /* SwiftDate-umbrella.h */, + A4A7F2883A127431D6E6E825F82B1CD1 /* SwiftDate.debug.xcconfig */, + 1A0AD4B77AA2B0C8F61E913F33E32B5D /* SwiftDate.release.xcconfig */, + ); + name = "Support Files"; + path = "../Target Support Files/SwiftDate"; sourceTree = ""; }; /* End PBXGroup section */ @@ -9700,6 +9966,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0A1ADBD78E3F07C5417FE41171CD8FF6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3812BEA7F8A1D931C4C8BA0B782A92A8 /* IQKeyboardToolbar-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0A3C36B0909C1076801B26E74787825A /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9742,6 +10016,65 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 109D8502A54BB6BDA8CDE803768984A2 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 31F42206CBE3923A5758B97AD729A7DB /* alphai_dec.h in Headers */, + 89B9718F6328E69EB494F036512691D1 /* animi.h in Headers */, + 28B54402C159A5D46AE0930CC115B860 /* backward_references_enc.h in Headers */, + 7EFB074DB7112E352E4C8F16337C65DD /* bit_reader_inl_utils.h in Headers */, + 3F2D23F9C43322FECE50FFDBAC5EBDA9 /* bit_reader_utils.h in Headers */, + 0064701BFCF9493C543F9EA81131D857 /* bit_writer_utils.h in Headers */, + E68D8B20567D40A88FD6D438E2DEC82A /* color_cache_utils.h in Headers */, + 69E18ED7FA1CFA345EF5D00B7ABA156B /* common_dec.h in Headers */, + 50D00DC42BB5C1BE2352D3464EFB94CB /* common_sse2.h in Headers */, + 33FF3CD3E08555DFBD99128351618032 /* common_sse41.h in Headers */, + F8E6EAF5CAD39A590A6080E2458B7B7B /* cost_enc.h in Headers */, + F2CAB82F6922D2E31AE4AB1EA47D78D4 /* cpu.h in Headers */, + 7752B9B3776841659476CF994354E9FE /* decode.h in Headers */, + ABA94A91427B1911BD12BF9E63471453 /* demux.h in Headers */, + 89B8FDF95E703B9B1D6D9B056906A1A2 /* dsp.h in Headers */, + D6EDEA4B0E659AFF6E7077B418A69EA3 /* encode.h in Headers */, + EA0EC730ECD108B415C89082EC38F80A /* endian_inl_utils.h in Headers */, + 7909FCB28ECBECC829CCBDDC60E65519 /* filters_utils.h in Headers */, + 36771549218157A81F13322EF18824E1 /* format_constants.h in Headers */, + DBE151E83EF0795D63B966BA72493B35 /* histogram_enc.h in Headers */, + 0760006FCC7B25877D2946A874A40FCF /* huffman_encode_utils.h in Headers */, + BA47662F9A5020F099D17EA1CADB05BE /* huffman_utils.h in Headers */, + 55699564BB44B2104A443E6D48923E90 /* libwebp-umbrella.h in Headers */, + C2D8DE91BD230A156FD26EF3E11CD2F0 /* lossless.h in Headers */, + 4BB0CA2D3BBB9A3D60EFB691B070B3D3 /* lossless_common.h in Headers */, + 5DE57E6CA0FC3C9752AA4E895D3F4B10 /* mips_macro.h in Headers */, + D912BAA92B710E431466F00CFD74B839 /* msa_macro.h in Headers */, + 5727F454DBE214ABD764FD2AC05BC7C4 /* mux.h in Headers */, + 2A3F75428348E6B2AB9828388AD4B9CD /* mux_types.h in Headers */, + 508F0749C8CE0782F435CE83E8883BD7 /* muxi.h in Headers */, + 77F24BC228EABC6538B11AC83E85336A /* neon.h in Headers */, + 646D5CDC2EB30283ACEBFC0AEDBF75CD /* palette.h in Headers */, + 19EB3D966E33BFCF2240BCB10D24A2E2 /* quant.h in Headers */, + 1B289229F7E62A4EABA042918B85CEEA /* quant_levels_dec_utils.h in Headers */, + A837370033A5D6274750FFC197CD5517 /* quant_levels_utils.h in Headers */, + FDD025445312AFB33EA31D1EADAEDBF1 /* random_utils.h in Headers */, + AF2A94909F2C7470ABB6995ACDB756F6 /* rescaler_utils.h in Headers */, + 6E67A4985A0D1F75DF8A4ADE6E9317F0 /* sharpyuv.h in Headers */, + DD19644625120193D3829CD28947BD5D /* sharpyuv_cpu.h in Headers */, + F9CD0CE99E62359BD1197482B1B252AE /* sharpyuv_csp.h in Headers */, + 79B7DBB43E06A5F65799B8AB51B39A77 /* sharpyuv_dsp.h in Headers */, + 1FFFC2B6E599D4C2125E35182E161F2B /* sharpyuv_gamma.h in Headers */, + AE98272854C73D89242B359616498EEF /* thread_utils.h in Headers */, + 14435C7937441FB8744FDD53F12A4711 /* types.h in Headers */, + 00A2D7844984BB5F3786A89A8583B088 /* utils.h in Headers */, + A29A43CF3053CFBF94A3EF7CF2324F70 /* vp8_dec.h in Headers */, + 4AEC3CC4368A996534E603361B5D7940 /* vp8i_dec.h in Headers */, + DC8A5E54801009B75FAF7209FC87940D /* vp8i_enc.h in Headers */, + 785E695163038FE0296501AE72DF1BAA /* vp8li_dec.h in Headers */, + 979EE714FBC877B08294DDDAC01C1BDE /* vp8li_enc.h in Headers */, + C0A1130442B239AC2610C6878C2C6869 /* webpi_dec.h in Headers */, + D52966A0BA4ADF8470C6E99A4A2D2D8E /* yuv.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 135061D7D4932B44CE6E9D0F9398BF47 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9750,11 +10083,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 15904C570F65433C8D6B842579F35988 /* Headers */ = { + 13BA45E0D772BF298A07A8B164843527 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CC70B453E389190B300C8CB7AB6A788E /* RxRelay-umbrella.h in Headers */, + A87F51B875525B9EFCF8E484CB3EEBA0 /* IQKeyboardNotification-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -9782,11 +10115,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 1CCF9F9F94B853C9A16E712C9D0A2436 /* Headers */ = { + 1E730CCD415F2AFF367A6A095471BEF3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6094AAEC695E16343CEA6679DE1928E4 /* IQKeyboardReturnManager-umbrella.h in Headers */, + E5C456FCAC3DA10DC08919AAF20A3626 /* IQKeyboardReturnManager-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -9823,73 +10156,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 239C68A724D71408289AB7EAF090BEAB /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 771CE2A036FA11F4B146E7CD81415142 /* alphai_dec.h in Headers */, - FAB169480639A185A5D86CA50D382BA4 /* animi.h in Headers */, - ED1AB9A592D2AE39400348BF0D201B45 /* backward_references_enc.h in Headers */, - D05D499E426C4CEEAEA63704CF36569C /* bit_reader_inl_utils.h in Headers */, - ED737F7F6498DD3542CD014AB696A02E /* bit_reader_utils.h in Headers */, - B32135C2E38D3F46CAB71F02B695E1A9 /* bit_writer_utils.h in Headers */, - 72A1A7BC05EB7651BE8BA9908DDF4554 /* color_cache_utils.h in Headers */, - A4D9CEEE49AA3EF5064EB426E05BF774 /* common_dec.h in Headers */, - CE58C177ED6AD34ADB5596F4FBBA0A0F /* common_sse2.h in Headers */, - 9CBDE95F15D7D2F7926F74170A23E8F1 /* common_sse41.h in Headers */, - 1A7B9ED5CA59C67DD04CAC926E695425 /* cost_enc.h in Headers */, - B229312BD26C96CA7BBDD079EA82CA7B /* cpu.h in Headers */, - 8BE4081312CA9A9E19E299210C143A69 /* decode.h in Headers */, - E0069EDC3753BF4A03707B9C82F5802D /* demux.h in Headers */, - 3206FC7A03AAE9D7995E1C20BAC2A741 /* dsp.h in Headers */, - 7FCED58A456951FB7579DA3DAE904546 /* encode.h in Headers */, - E97E56E8F38113E2CFB63B3A66953903 /* endian_inl_utils.h in Headers */, - 4EE26FA7C7FB130C57FF22FF1CAC2B3F /* filters_utils.h in Headers */, - DCED4E4B0F4985056B32DF79783981AF /* format_constants.h in Headers */, - 2592486071DE6F98A5C55F487F7FA386 /* histogram_enc.h in Headers */, - 1BA63FA9A4AB11699E3B8636B3F7A504 /* huffman_encode_utils.h in Headers */, - 5429EFE2AEFCBAE8C5D9FE99E813B322 /* huffman_utils.h in Headers */, - 33868191124C9202405A7A4B640C7372 /* libwebp-umbrella.h in Headers */, - 01A8F02D2B45B1A7995955F2FA96BE80 /* lossless.h in Headers */, - C2504EF0A847BB416ECE80CA2F9BC2ED /* lossless_common.h in Headers */, - DB1708B7C82FA44676C239921B21209E /* mips_macro.h in Headers */, - 6DF9A1A26E26014E7551926E7329F1F0 /* msa_macro.h in Headers */, - 5EFF6487E656A2A2D4324817F28CD5B8 /* mux.h in Headers */, - 97BD0BC7A9938C464C3D919699CAE7B0 /* mux_types.h in Headers */, - DC06A1D5ADAFEA4996B96A0FF2812066 /* muxi.h in Headers */, - 1FBB47887AF2968FBFB65187522F2BFB /* neon.h in Headers */, - DDBA4D50BFCFA2AB8F7955CE701A7867 /* palette.h in Headers */, - F08FB6404C03C32B6797A313FCFA26E8 /* quant.h in Headers */, - C84BF5FCC4846F6CA4C505BD25E266C2 /* quant_levels_dec_utils.h in Headers */, - 8B8DE512FB2E9193A16BC295E3BD17D2 /* quant_levels_utils.h in Headers */, - 02137A1D7F2DA49192522B3CF40ACB6F /* random_utils.h in Headers */, - BB38C83C7216E02ACF4EE149FD2ABC71 /* rescaler_utils.h in Headers */, - CA27CEC4815701402243AC17FF3D8209 /* sharpyuv.h in Headers */, - E22B29F35FA7B9A571C95C500C12F120 /* sharpyuv_cpu.h in Headers */, - 5547D47E48CD0F4AE65CB8DEFF8E0D53 /* sharpyuv_csp.h in Headers */, - B49B2D5BC6CD6BE522D76CC1B4B78B71 /* sharpyuv_dsp.h in Headers */, - F298ABA2514CA9C0132231985603A5D8 /* sharpyuv_gamma.h in Headers */, - 1E5AAE8872B0EA30EF8795F9ADD121CC /* thread_utils.h in Headers */, - 210F7EA56537707CB22ED35A96752D3C /* types.h in Headers */, - 01DB231356AA70412D3F0CFD9DDD5536 /* utils.h in Headers */, - 2DD1C0AC76A3D56A0B95C39413C9C5A7 /* vp8_dec.h in Headers */, - C8F8EF7F872F391808687A0875D07F23 /* vp8i_dec.h in Headers */, - 10176A35E59957F7BEF5D7CC5C75D6BF /* vp8i_enc.h in Headers */, - 283D02109109BBD9F05A22C4EBA4E3B5 /* vp8li_dec.h in Headers */, - E4D62C8F5788C16CE8FDD00107251863 /* vp8li_enc.h in Headers */, - B008E06B51A57F11E9A195A14B80F6C2 /* webpi_dec.h in Headers */, - 5357356A8E071A949B0A89105C330C2E /* yuv.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 318601919E3743ED449C246D87E001FA /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - BB06C36A7FC540F344FE52110DDB261B /* IQTextInputViewNotification-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 35BFD39CD04E54A30B68C67B27EF8984 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9906,19 +10172,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 40E8608A45A6663CB24FD171688536F7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 08DE41CEAAE46D4F36B5A49C0215C73F /* YYAnimatedImageView.h in Headers */, - 0D7A87A56DA3B690ECAE9690D7D86E89 /* YYFrameImage.h in Headers */, - 0B72E2D6759DA3AD821EFD74DDD47A52 /* YYImage.h in Headers */, - F8C3D698F829A6F10872C99EB6ADE46B /* YYImage-umbrella.h in Headers */, - 10ED26F8959949C6A935D09FA076BDA7 /* YYImageCoder.h in Headers */, - D5DEA67CF8E95AB0E51A175E91769482 /* YYSpriteSheetImage.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 41C2E8D70816C79059A34333A0AB78D7 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9927,6 +10180,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4267F1536A6AD942385A2C98EED8318B /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 917F9BB22E1E892B4144A812C2F49096 /* IQTextView-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4CC4A2D6B1305F5EE1DFA5830208CA72 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9936,14 +10197,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 519FBAB53C2A084293F6820C2039993B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D87ACEE630B7A52130B62DFFE5D00488 /* IQTextView-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 5B1500FE995B9224E0AF0B42CE93C03B /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -9952,87 +10205,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 62EC0EE14DF494A83101325DA76039F0 /* Headers */ = { + 79CA09845E5444D46A42008314213DA0 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7C8D5357287A3F34A0F2CD2BBFC29270 /* NSBezierPath+SDRoundedCorners.h in Headers */, - 6C56558199B60AB6A4090D2F4ACE67ED /* NSButton+WebCache.h in Headers */, - 724F464814668A050CC7066026C57B9C /* NSData+ImageContentType.h in Headers */, - B56F252576BC6F84DE40D50006FC21E6 /* NSImage+Compatibility.h in Headers */, - F7E50993F8A838F860941A1B9DA6BEC0 /* SDAnimatedImage.h in Headers */, - AAF9494BBBCBF94960369A5624E1DF5D /* SDAnimatedImagePlayer.h in Headers */, - 9CA7295DFA502275B960E09DE8FA8BA2 /* SDAnimatedImageRep.h in Headers */, - B9C4A527640636F2E81CE6B3DAA86A76 /* SDAnimatedImageView.h in Headers */, - 391B27BAE013804D48948F0985BA840F /* SDAnimatedImageView+WebCache.h in Headers */, - 426DF2A1F33269F713D3949662213765 /* SDAssociatedObject.h in Headers */, - 495788561F6ADE88310B49BDB3A049C8 /* SDAsyncBlockOperation.h in Headers */, - 4DA27FD55659157AB453E2F3CA143AE1 /* SDCallbackQueue.h in Headers */, - 938A1624E7E0AA2C636073D50916A3AE /* SDDeviceHelper.h in Headers */, - 86ADEC1D9102F901343EFCB62D423D2E /* SDDiskCache.h in Headers */, - F6A36E290DE040FDBFEC708F4C06237F /* SDDisplayLink.h in Headers */, - B1FD607CDF2E95D05BA3B880BB410E7B /* SDFileAttributeHelper.h in Headers */, - FE104235E87599AA0A971D024286E855 /* SDGraphicsImageRenderer.h in Headers */, - 89E31B923A29D5465F7BA83D2107345A /* SDImageAPNGCoder.h in Headers */, - 146980AB2006B0CD80481D0F8B4E254C /* SDImageAssetManager.h in Headers */, - 927FB34ED26E3AAC260DE630EC4B5862 /* SDImageAWebPCoder.h in Headers */, - 33D4E19DAC45622690570E3E4E106BAF /* SDImageCache.h in Headers */, - 396607D0F1FBB75736DD27CB92EB9999 /* SDImageCacheConfig.h in Headers */, - 2D62BA53B0142D84D921DB41ABDC5434 /* SDImageCacheDefine.h in Headers */, - CA31FEFC92EF7C84991037F938677068 /* SDImageCachesManager.h in Headers */, - F0957C2AA649E01C0FF1FF23272DBF2E /* SDImageCachesManagerOperation.h in Headers */, - F5194E7C5178D14021699602C11C9B16 /* SDImageCoder.h in Headers */, - 4610A18A58F46FF1F7500A6BF7741023 /* SDImageCoderHelper.h in Headers */, - 43192D92EC7DA0AEE6330B1931314D59 /* SDImageCodersManager.h in Headers */, - 24A4CC474AE353733E5372A03F61BF2B /* SDImageFrame.h in Headers */, - 33798D67D14D1204B31A48503769D2E7 /* SDImageFramePool.h in Headers */, - 3F418D0580A3DCBB2387B300F3E441C0 /* SDImageGIFCoder.h in Headers */, - A2BBF60D463B5DA1E57EB843B63DED87 /* SDImageGraphics.h in Headers */, - A20FD3BD7888CA75CCBE32C513D7E076 /* SDImageHEICCoder.h in Headers */, - 965ABCBF7A409A106D970E220F43F0D2 /* SDImageIOAnimatedCoder.h in Headers */, - E1DD651C52693F6D44F67698D02C7D82 /* SDImageIOAnimatedCoderInternal.h in Headers */, - 40AC034D9E5CD7A5BA0BFB394D59D47E /* SDImageIOCoder.h in Headers */, - 0A5209C46796D51E1A1887AD438B2B68 /* SDImageLoader.h in Headers */, - D43B99296130183FFF11E193E38C42F8 /* SDImageLoadersManager.h in Headers */, - 58D1B8BFF33B272CF5655439B621F2B1 /* SDImageTransformer.h in Headers */, - 63E0DD5A7FA5099D1811E8C9E709830C /* SDInternalMacros.h in Headers */, - 513171B8A7FF210CDAAD8F89082D354A /* SDMemoryCache.h in Headers */, - 0F00F218544256F621E912A1B2D31E14 /* SDmetamacros.h in Headers */, - 7DF4855DCBE2691D7348F8E654F5960D /* SDWeakProxy.h in Headers */, - B3B7D430ECBFB270DB1E8D1F17ABE8D2 /* SDWebImage.h in Headers */, - E1CAAC3585EB1C15CD85EC2F1491E04C /* SDWebImage-umbrella.h in Headers */, - 4518B315DD773DC7EBA8BD3EDE4E2B44 /* SDWebImageCacheKeyFilter.h in Headers */, - 414940B9A0191884E8BBCA71D0E738B0 /* SDWebImageCacheSerializer.h in Headers */, - 3CA7EFA98EF3857A8C31A29776E6C55F /* SDWebImageCompat.h in Headers */, - F57662901DFE32CF41A632EAE684DC81 /* SDWebImageDefine.h in Headers */, - CC9E38183A1E0569E132A6DA920A9E48 /* SDWebImageDownloader.h in Headers */, - C71F72A5BEA7E7E2DA06517FD28CD703 /* SDWebImageDownloaderConfig.h in Headers */, - B3AF4BD0E1246FDD4F23204C1EAAFE18 /* SDWebImageDownloaderDecryptor.h in Headers */, - 277E92350B422767A7A8C06B450D05E0 /* SDWebImageDownloaderOperation.h in Headers */, - 9B8F1984A1F831434EFB36B7BC03C431 /* SDWebImageDownloaderRequestModifier.h in Headers */, - 8F8EEB10D95D5FC6FBC08E87B2000EBB /* SDWebImageDownloaderResponseModifier.h in Headers */, - AA5BF2DFB10400AA27950626CF7948DF /* SDWebImageError.h in Headers */, - 4C1D69C1BF682CA3960720F66538C07A /* SDWebImageIndicator.h in Headers */, - 572CD95503502CDF3ED788F0B24C252E /* SDWebImageManager.h in Headers */, - 07CA17824EC0D3FEE27CD298B01DF318 /* SDWebImageOperation.h in Headers */, - 01251B0F77150F7AB43D9384DF6307B5 /* SDWebImageOptionsProcessor.h in Headers */, - 17950D311BAF4B98B5BDB1D63C25457D /* SDWebImagePrefetcher.h in Headers */, - C5320CD53E83230B2207534005DDD183 /* SDWebImageTransition.h in Headers */, - B3F47B7393090017F4BD01635B052462 /* SDWebImageTransitionInternal.h in Headers */, - B008CBC52C3135A6FCF0532177D46D43 /* UIButton+WebCache.h in Headers */, - B74FEE33ADD328185A51EE3A14BF754B /* UIColor+SDHexString.h in Headers */, - 9C4901CD6CC93184585BD5E765C9841C /* UIImage+ExtendedCacheData.h in Headers */, - ECCB9573EE1FC50A834CE1A38B186FCD /* UIImage+ForceDecode.h in Headers */, - A93F0AB3530D12C4DA9F4C4389C7F2B1 /* UIImage+GIF.h in Headers */, - 590F07818244814004FBBEAB1DD57CF4 /* UIImage+MemoryCacheCost.h in Headers */, - 29D4B4F01F898A67E67DCC582FD06AAF /* UIImage+Metadata.h in Headers */, - 2E9C5A7894CD69E92C70E00B0510C1A8 /* UIImage+MultiFormat.h in Headers */, - 08BAC516D9FC9F41B4BD38C7D32EEB00 /* UIImage+Transform.h in Headers */, - E42A5C1780E7E37B3383F387DE14C3AB /* UIImageView+HighlightedWebCache.h in Headers */, - 5D616EA4592D70E951F33BDA4A7C8DA3 /* UIImageView+WebCache.h in Headers */, - 9468675C9202DD78D32E8C7888DBC731 /* UIView+WebCache.h in Headers */, - 478BCD3392E5988621AE61164403A89F /* UIView+WebCacheOperation.h in Headers */, - 13FA81FF80477E468F9F24ED719D367D /* UIView+WebCacheState.h in Headers */, + F1ED7598E0D75E704B52BFCF77193A27 /* MGCDAsyncSocket.h in Headers */, + 1C3F07299171B82493D3696239A11BAF /* MGCDAsyncUdpSocket.h in Headers */, + 2F44F439C70D865DE857F8A71E11D548 /* MqttCocoaAsyncSocket-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -10126,6 +10305,98 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 8C8791591AC8DF09F458119E235D92DB /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4F03E118D2391DA8DF72DF10152F07C8 /* IQKeyboardToolbarManager-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 90E88CBAC178FB7B4C880A2ABF406C5C /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 0069ED224FBE6CB9E7C00EFE24D18CE8 /* NSBezierPath+SDRoundedCorners.h in Headers */, + B876DC1AD722CC2597B54B608293FA84 /* NSButton+WebCache.h in Headers */, + 6F0838C80554CA46CEEC7CFFBA26B9E7 /* NSData+ImageContentType.h in Headers */, + 1AB69E4AB50F68DA1FC1473E49F2A502 /* NSImage+Compatibility.h in Headers */, + 018484B9FC55FBB212B6A2A24558C516 /* SDAnimatedImage.h in Headers */, + 02B594763EB091EDFBEBB557DC9389E2 /* SDAnimatedImagePlayer.h in Headers */, + 114C81D88949616817C9CC12A151EAE6 /* SDAnimatedImageRep.h in Headers */, + 19D1AC27CED63C2BF64F14D47BA96A17 /* SDAnimatedImageView.h in Headers */, + 7053223F22305B4166BD83EFC451E575 /* SDAnimatedImageView+WebCache.h in Headers */, + 278E08ECD06CE42D68C327B7ED07B31E /* SDAssociatedObject.h in Headers */, + 4E11FC5197231B7FC95109CBEFB6615B /* SDAsyncBlockOperation.h in Headers */, + DED29495981A4879132B212D29F011E0 /* SDCallbackQueue.h in Headers */, + 5259F923E04070DB3B5FD9F1A98B62FB /* SDDeviceHelper.h in Headers */, + 205C83B3629F462C40CBBFC1E1FCBC3C /* SDDiskCache.h in Headers */, + 77B41C6CFE0B92758119A593633C0233 /* SDDisplayLink.h in Headers */, + 635C4536301F19B49DF66A23969A9D15 /* SDFileAttributeHelper.h in Headers */, + 88E0FD7941654F2DC21D27A34DD3CD56 /* SDGraphicsImageRenderer.h in Headers */, + 3A3F68777F9F40041E582D489B12AA57 /* SDImageAPNGCoder.h in Headers */, + 9644417C8C310B2FC3EBDB998596F3C8 /* SDImageAssetManager.h in Headers */, + F71350F6F7159EB8B0DF0ECD7F059A05 /* SDImageAWebPCoder.h in Headers */, + 846291975C27066CBC64574C9A91ECFA /* SDImageCache.h in Headers */, + 9FDC5D39EE8B3B84BDE0191BDE69A4AB /* SDImageCacheConfig.h in Headers */, + C29048D82709E1E770DFE0EDE18A350D /* SDImageCacheDefine.h in Headers */, + D99628FF1D127B3AAE385EDC25AA3BD7 /* SDImageCachesManager.h in Headers */, + 5F81D7B4079A62D601FB3264F3E526C0 /* SDImageCachesManagerOperation.h in Headers */, + 0698F5A9D63CA4D0197FA0E1AC614229 /* SDImageCoder.h in Headers */, + 174C03CECE0755237E65408465CACD10 /* SDImageCoderHelper.h in Headers */, + CA6BEF6E85FEBDD24B3845FF2252DDB7 /* SDImageCodersManager.h in Headers */, + 865C9E00F47572630D3FA6ECC1AFE3D9 /* SDImageFrame.h in Headers */, + C6CEDE25513EE580A409D2FE1EBB14BD /* SDImageFramePool.h in Headers */, + 40CA3D5F4E23459A974B7C886260F70D /* SDImageGIFCoder.h in Headers */, + 43A8337B50D483F93A22E1941C18671E /* SDImageGraphics.h in Headers */, + B147ECB892B7C79FE4B1B46436E885B8 /* SDImageHEICCoder.h in Headers */, + 9C80A0175BF8E8B561F88F78FD8027C1 /* SDImageIOAnimatedCoder.h in Headers */, + A243EC482D57F45F646DD0769BA8D5AA /* SDImageIOAnimatedCoderInternal.h in Headers */, + B25C6013B93EF08F819A23AAB22285D5 /* SDImageIOCoder.h in Headers */, + B86CE44BAAF1C2379BE06AE0C9C3835A /* SDImageLoader.h in Headers */, + EAF7893AAEF99828D21EAC0593AC879B /* SDImageLoadersManager.h in Headers */, + DC2A18D6757FC43108332EBAF1A08533 /* SDImageTransformer.h in Headers */, + 81FC65E558B3CF7EFD2635E9B2D38478 /* SDInternalMacros.h in Headers */, + A013D216E8894F541CF684EF88305EB3 /* SDMemoryCache.h in Headers */, + 4FBF89FE470E2F4A0E7E8546A469967A /* SDmetamacros.h in Headers */, + 2DB9E576AE22E204A74411EF598FD0D8 /* SDWeakProxy.h in Headers */, + 32EBC704E71F378249AD902DDA6B9925 /* SDWebImage.h in Headers */, + 522BAB997E48EA6A808C89BA298FE55B /* SDWebImage-umbrella.h in Headers */, + D96E2F7DFB6141B690667AFEC61FA224 /* SDWebImageCacheKeyFilter.h in Headers */, + 5F73B8422D7F873146B63613F05D2059 /* SDWebImageCacheSerializer.h in Headers */, + 9D0684B3B738D7D21EAA1387D127C782 /* SDWebImageCompat.h in Headers */, + 6EEC267E5A4D42DC73361B1417C34E2A /* SDWebImageDefine.h in Headers */, + 533A88E45962B5D9C58C2C8CDF68B408 /* SDWebImageDownloader.h in Headers */, + FA00D4B3C909624A6332E038A6DB41FF /* SDWebImageDownloaderConfig.h in Headers */, + 48A5FF7B0107E13FDFA349294CE41359 /* SDWebImageDownloaderDecryptor.h in Headers */, + 94A1B8EAF5E302028F0E33406D1C2D2B /* SDWebImageDownloaderOperation.h in Headers */, + 14FD166E09E03302D347CD373DB56DB1 /* SDWebImageDownloaderRequestModifier.h in Headers */, + 3AF22D14F94A221F4364191126E08D30 /* SDWebImageDownloaderResponseModifier.h in Headers */, + E6F716B03ECC7EF34A1D0584DCDC6C0A /* SDWebImageError.h in Headers */, + 75166BBBCEB03EF71AF8D26E2B4DF828 /* SDWebImageIndicator.h in Headers */, + B09CA827B18A5EC0404B38B1F5351AAC /* SDWebImageManager.h in Headers */, + 51AD982F51665703357600F04DCD328F /* SDWebImageOperation.h in Headers */, + 490AEEAF2B7281C716A29CF7BEFD6E33 /* SDWebImageOptionsProcessor.h in Headers */, + F02729146154EF6B9187305230290CD4 /* SDWebImagePrefetcher.h in Headers */, + 5F6AAEF831D378F4E6A3FF51825ED87A /* SDWebImageTransition.h in Headers */, + ED3C727C9AAF04C05ADFF6ABAEFFEA8D /* SDWebImageTransitionInternal.h in Headers */, + 4569889593FF212F0BC397FE2ABC5312 /* UIButton+WebCache.h in Headers */, + A0534AEA682DDCE2360B05C9EF82C8FE /* UIColor+SDHexString.h in Headers */, + B3DE6FE1EC85A2D9631122D41AE6AB35 /* UIImage+ExtendedCacheData.h in Headers */, + 3EC79AF239C06987A9C62AA7FEC1B96F /* UIImage+ForceDecode.h in Headers */, + 12BFAC7BBCEADD5934026623E8FB8B59 /* UIImage+GIF.h in Headers */, + C1300DFF8872E46FD85689A4D06A5C2E /* UIImage+MemoryCacheCost.h in Headers */, + 4ECDB9E3C46C6B4233DA2AC4DA514932 /* UIImage+Metadata.h in Headers */, + 491D049834F6F84A3D0785A682FCAE39 /* UIImage+MultiFormat.h in Headers */, + 533C838059890F6AFF29075B9A7D4C6D /* UIImage+Transform.h in Headers */, + EDBFC4DEE1C21470926DF2EF13131904 /* UIImageView+HighlightedWebCache.h in Headers */, + 5C44470EF1044429D6457EFEC81C018A /* UIImageView+WebCache.h in Headers */, + 5B41F4CE095824F7FBA30F59241A020B /* UIView+WebCache.h in Headers */, + F1C6A9649B5FDCB480FD7D7774FFF8B3 /* UIView+WebCacheOperation.h in Headers */, + 7D9A3C79C7741EAB604C5BBA70BA72C0 /* UIView+WebCacheState.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9A8871E23F769D3719C8AE9D1B2A65C2 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -10134,6 +10405,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9B7B8664B89664F1C8286E05338A5CA3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + A983DF87C622A2FBC2DC71F27911092C /* Pods-QuickLocation-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A6393C4D6FFDDD38F34CED09FCFA2220 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -10150,6 +10429,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + AB88581FF933CF69BBB0E15137F88F7A /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F5EF1E2426930587F2F1AD8D2B7B1A25 /* RxSwift-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; ABB9DBEF89E605AB2428F8DE8382506F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -10187,6 +10474,27 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + B140A8F9807A2A947D7A2DFD0D48ED8E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + BBF958606E2F274F7FEF9F54B7A8308B /* YYAnimatedImageView.h in Headers */, + 12FEC145834F9E1CAEF646C4BCBCC378 /* YYFrameImage.h in Headers */, + 300B7BFD749B06AE3B711426442E41A3 /* YYImage.h in Headers */, + C81A012F3A85BC343EC5C412F8D68834 /* YYImage-umbrella.h in Headers */, + E90C1EC062107478A1ED904273F0D170 /* YYImageCoder.h in Headers */, + CC38F0303BE0BFBF1E573561D01FB082 /* YYSpriteSheetImage.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B5EAA3937121469A8724C96FCC88A075 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C9E4124129EBA01A46BC58D63017EC3 /* CocoaMQTT-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; B9D06F7443086FD18D2F6596BEFA3BD5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -10213,6 +10521,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + CE14A1B2AC014777D86ABF76B78591C7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8DB634AD509A72F1980DCB26BABB92DB /* RxRelay-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; CE8A0429AC94A4510B7341047DE45093 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -10289,43 +10605,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D893447AB16953A17BD0C74F8F5D8E05 /* Headers */ = { + E9C253F48E424996C0098227A7DDB0A3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 869413419A22C3834700E726484CAFDB /* IQKeyboardToolbarManager-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E554F405EEF5E215C189FCD81FD1336F /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F1AD95BA0DBDE87A562B836694A21410 /* IQKeyboardToolbar-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F3A536E36F6FF7344A815F868C2E74FF /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 99EF2A49CBC5CB056F28CB5BE9635468 /* RxSwift-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FB7CD51FACD057EFC34D2053A49C2843 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 7B20820FD55F1B574D96C1631ABE247C /* IQKeyboardNotification-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FC8E41F3FDA4136BA6EC764F4D6CA06A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B42C81138A67C0F5F5319692819E0F00 /* Pods-QuickLocation-umbrella.h in Headers */, + 2ACBCEA4A2C9BF7E1DE378F47A085951 /* IQTextInputViewNotification-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -10344,8 +10628,8 @@ buildRules = ( ); dependencies = ( - 24F5C489A5CAB8B16DED42BA2A359BCD /* PBXTargetDependency */, - 1F6B9529EA8851EFFFDF3AE7A59897C1 /* PBXTargetDependency */, + 97F5677077D12F150E9E2A81F9C5C267 /* PBXTargetDependency */, + C9790921DBE75E75BD1923A5433D496E /* PBXTargetDependency */, ); name = OpenIMSDK; productName = OpenIMSDK; @@ -10354,19 +10638,19 @@ }; 020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */ = { isa = PBXNativeTarget; - buildConfigurationList = AB54FD55C44E74B81F98130A2F89111B /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager" */; + buildConfigurationList = 9FC117AC9D899E1F16FF60429B123876 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager" */; buildPhases = ( - D893447AB16953A17BD0C74F8F5D8E05 /* Headers */, - EAE616CE827CD647AF659A0331E9E818 /* Sources */, - 14B3CCFC54C48FF903C4430B0CB61D11 /* Frameworks */, - 6821795096DB743034896811810EF1F9 /* Resources */, + 8C8791591AC8DF09F458119E235D92DB /* Headers */, + 13FA7BFD74C2C193D076A6264259CE14 /* Sources */, + 482C5B1970165B23261707783962CC96 /* Frameworks */, + 37E2E612BC8369F3D0A183A3A7CB91F7 /* Resources */, ); buildRules = ( ); dependencies = ( - 589545B23EBD0FAC78937DBAE7B1A19A /* PBXTargetDependency */, - E31B8ADFB939C29A420C91B025937B5A /* PBXTargetDependency */, - FF0B57E9EB26306BBB98E52B91423F15 /* PBXTargetDependency */, + DAAD65E821D02F91D43F7A3A62CBBDA8 /* PBXTargetDependency */, + 22FD2D9961CFCF2D03384022B321BE58 /* PBXTargetDependency */, + D759FA7EE75F394744201482262719BF /* PBXTargetDependency */, ); name = IQKeyboardToolbarManager; productName = IQKeyboardToolbarManager; @@ -10375,18 +10659,18 @@ }; 0981F89DB5DA3FFCFFEBDE1F56287054 /* IQKeyboardReturnManager */ = { isa = PBXNativeTarget; - buildConfigurationList = 27E6C1DA6E893A20C30FD7A93AFC374B /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager" */; + buildConfigurationList = 74CA0743989155B4C5D31007514878C4 /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager" */; buildPhases = ( - 1CCF9F9F94B853C9A16E712C9D0A2436 /* Headers */, - 77B92F3E962AB128EA18C60F9CB941BA /* Sources */, - 2B6239E683B57810A0877D78BE796C47 /* Frameworks */, - D5609EC3502F839C77C6DC1D58408E17 /* Resources */, + 1E730CCD415F2AFF367A6A095471BEF3 /* Headers */, + 4C6D39C725B13E768A35C11599741CC9 /* Sources */, + 1E2B6A394F883A79D7671E5A135C602E /* Frameworks */, + 048341746DD7E8EE813D71F10918B271 /* Resources */, ); buildRules = ( ); dependencies = ( - 8C9B20CA05D6610DBC8634EA66CA201D /* PBXTargetDependency */, - E3BA0C8E703DE59FB19C26D247A970A0 /* PBXTargetDependency */, + D5651A70BE15EFB4982444B5B2512219 /* PBXTargetDependency */, + 06B6359C2148234D64D3CF1461F00BDA /* PBXTargetDependency */, ); name = IQKeyboardReturnManager; productName = IQKeyboardReturnManager; @@ -10405,7 +10689,7 @@ buildRules = ( ); dependencies = ( - 1E34ADB9A2FEDE5D364BB05A2BB68BFB /* PBXTargetDependency */, + 6D9C59384F3559350AFE1FDB2CA37BE0 /* PBXTargetDependency */, ); name = "lottie-ios"; productName = Lottie; @@ -10424,8 +10708,8 @@ buildRules = ( ); dependencies = ( - AEF4127D51E2B1A6B9A82E278A399887 /* PBXTargetDependency */, - BF6E306977B6E64CFC3ADC3266986004 /* PBXTargetDependency */, + 5321810D064BBAE1E9CDBF73A2AAE428 /* PBXTargetDependency */, + 2C4C823F501A47C36E0AABE5C9C2EFE6 /* PBXTargetDependency */, ); name = KingfisherWebP; productName = KingfisherWebP; @@ -10434,11 +10718,11 @@ }; 11779BD43CF8155A53E2C00B1566A19F /* RxSwift-RxSwift_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 355641FA650FE0A47CAFAEF548CE37D0 /* Build configuration list for PBXNativeTarget "RxSwift-RxSwift_Privacy" */; + buildConfigurationList = 7163CE213F73888D42781422F65C7896 /* Build configuration list for PBXNativeTarget "RxSwift-RxSwift_Privacy" */; buildPhases = ( - FF8726859A2FDCDAA260B4B9716AE1A2 /* Sources */, - 30CBDF3C2C6AD00BB734B3714F0F8794 /* Frameworks */, - 25617855BF8FBC9CC08A0545E3DF12ED /* Resources */, + F71B644154811CF94B90B2EF77E8653B /* Sources */, + EA57FD53CD6CF350CFD35FC143E54D17 /* Frameworks */, + CAAB5769287A1527C19DBC52617AB995 /* Resources */, ); buildRules = ( ); @@ -10451,18 +10735,18 @@ }; 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */ = { isa = PBXNativeTarget; - buildConfigurationList = D19A882E9703087238F6DCEADF438F1A /* Build configuration list for PBXNativeTarget "IQTextView" */; + buildConfigurationList = 4F5BECF0073A6C526CA38FBEEAE65366 /* Build configuration list for PBXNativeTarget "IQTextView" */; buildPhases = ( - 519FBAB53C2A084293F6820C2039993B /* Headers */, - C27D4907B15A73D8EA10928092B172A8 /* Sources */, - AFD31CE975B174D16F411C4BAF7804F7 /* Frameworks */, - 2EA41950ED522603811A5832D4613E29 /* Resources */, + 4267F1536A6AD942385A2C98EED8318B /* Headers */, + C858D393F19697D85A403464DDAF1E07 /* Sources */, + 5AD337ADA1AEF4CA3BF4F85311013FD8 /* Frameworks */, + E0124A1E59B0E67FB5A1D2F394D1A689 /* Resources */, ); buildRules = ( ); dependencies = ( - F9E3CB353BAFA9E9E26238DB24750CB9 /* PBXTargetDependency */, - F3FD20E5A63C1BFA024C5E8E681CD267 /* PBXTargetDependency */, + ABACB0A175D8B505AFEA6FAA85221E85 /* PBXTargetDependency */, + 9A16765A9DC1FB99C242C68E7264FACC /* PBXTargetDependency */, ); name = IQTextView; productName = IQTextView; @@ -10481,7 +10765,7 @@ buildRules = ( ); dependencies = ( - 93ABE1C778AFF8E2A9551EF47F2263AD /* PBXTargetDependency */, + 731036B6B7F1CCD04A28C88363BE792B /* PBXTargetDependency */, ); name = ObjectMapper; productName = ObjectMapper; @@ -10500,7 +10784,7 @@ buildRules = ( ); dependencies = ( - CA923E8E6E0A16A454FA2C47B6696544 /* PBXTargetDependency */, + 23950B2FE9701D22FAB1B2F3CEAD4003 /* PBXTargetDependency */, ); name = Moya; productName = Moya; @@ -10519,7 +10803,7 @@ buildRules = ( ); dependencies = ( - 16E79159685C75B532CEF6D862DAABC8 /* PBXTargetDependency */, + 21281E0511BBBAA3B120421BDA31D470 /* PBXTargetDependency */, ); name = SnapKit; productName = SnapKit; @@ -10564,11 +10848,11 @@ }; 276021C4482165D46E0CBBEFB822FE95 /* CocoaLumberjack-CocoaLumberjackPrivacy */ = { isa = PBXNativeTarget; - buildConfigurationList = F34FCEDC1D5872EBC62EDD44DA6477B3 /* Build configuration list for PBXNativeTarget "CocoaLumberjack-CocoaLumberjackPrivacy" */; + buildConfigurationList = 6A29205CCB770D69C4CE94DAE16F442F /* Build configuration list for PBXNativeTarget "CocoaLumberjack-CocoaLumberjackPrivacy" */; buildPhases = ( - 39C0DE2BF57DC4E328FDDA370CDB05D2 /* Sources */, - E3B5144A411ABAD0C7783D05BEEE9BFC /* Frameworks */, - 5B0176AE1F954EC48322EC9860C4E2AE /* Resources */, + 71692A15AD05B88CD11C28F6DA73CF9B /* Sources */, + 5B6537CFC952FC20C4EEDE8D0C5409FC /* Frameworks */, + E242152B887656FEB7CE67250DBBDD53 /* Resources */, ); buildRules = ( ); @@ -10581,18 +10865,18 @@ }; 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */ = { isa = PBXNativeTarget; - buildConfigurationList = 39B74D0BE7AD9880E60F5DFCD0523612 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification" */; + buildConfigurationList = 36A794AD3BEBCCD2C0BE75DC3D13CEC0 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification" */; buildPhases = ( - 318601919E3743ED449C246D87E001FA /* Headers */, - 4F27EA5776A48D0363ACB688FFD4C68A /* Sources */, - 4B344E39C34BAC4E674B21008D14E588 /* Frameworks */, - 73A3F3E0D6A61129CCD3FAFB550211EA /* Resources */, + E9C253F48E424996C0098227A7DDB0A3 /* Headers */, + 4913C2F4121E1C16187D360E215881B2 /* Sources */, + 5AA94748A595AC7488968B9CBB02CD39 /* Frameworks */, + 97F1C6B10A94C792FC583039581CFEFB /* Resources */, ); buildRules = ( ); dependencies = ( - 2E4D8563217D17E396DC1DC6DD804833 /* PBXTargetDependency */, - 2B851C01CA72080372960C311BC1C3A1 /* PBXTargetDependency */, + 9AB57BB286C6B3B66A9922B2D4690340 /* PBXTargetDependency */, + 8874094E975774071CC66CE460F5C6FE /* PBXTargetDependency */, ); name = IQTextInputViewNotification; productName = IQTextInputViewNotification; @@ -10601,11 +10885,11 @@ }; 2B8FF445A5162845FAB9EC00FC92B694 /* IQKeyboardNotification-IQKeyboardNotification */ = { isa = PBXNativeTarget; - buildConfigurationList = 6A6EAE788828FAC84CA851AF9513C395 /* Build configuration list for PBXNativeTarget "IQKeyboardNotification-IQKeyboardNotification" */; + buildConfigurationList = EE84F2E720E0F4CCA0AA5D9753F54CF1 /* Build configuration list for PBXNativeTarget "IQKeyboardNotification-IQKeyboardNotification" */; buildPhases = ( - 0D1CF396363093333F5FEE0FC1D941D6 /* Sources */, - E6292162CEFD75B0B4A16072BC9C5ED4 /* Frameworks */, - 23C2EC80D38A7F93DDB7710AC2ECB3A0 /* Resources */, + A8D891EB4676BA49A7DE130898522C2D /* Sources */, + EB3A6F364D9092D07EE373210EB67CEA /* Frameworks */, + E8EE26654911879E9E0B76323B6AD16F /* Resources */, ); buildRules = ( ); @@ -10618,17 +10902,17 @@ }; 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = D25D1A86881D18DF2B01C871873DA4FD /* Build configuration list for PBXNativeTarget "SDWebImage" */; + buildConfigurationList = B25EFB22FA9E922D7EFE7E9BF5C8EB0E /* Build configuration list for PBXNativeTarget "SDWebImage" */; buildPhases = ( - 62EC0EE14DF494A83101325DA76039F0 /* Headers */, - C543215097EDF2FAA2CFBEC2ED4FF0A4 /* Sources */, - ADDFCDC2EA09AB785B0D83C34C20DE39 /* Frameworks */, - 33D6AC982E0314666BFDEAFAE9C482E6 /* Resources */, + 90E88CBAC178FB7B4C880A2ABF406C5C /* Headers */, + D567B5EB900BCD8C3D681FD57ED56BE9 /* Sources */, + 09DC200874950881346CB5CF3030DCDE /* Frameworks */, + 7944F12A776C87062880289B4AEF0345 /* Resources */, ); buildRules = ( ); dependencies = ( - 57D0AB67F94696CE24C38704A19E8ACE /* PBXTargetDependency */, + 9C5610B5C59B89EEAA95B61A07D4619C /* PBXTargetDependency */, ); name = SDWebImage; productName = SDWebImage; @@ -10637,11 +10921,11 @@ }; 39101A2B1096DFB129FCDE5490875054 /* RxRelay-RxRelay_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = D2D7ECC79626771DD3DBA21E3D2A1666 /* Build configuration list for PBXNativeTarget "RxRelay-RxRelay_Privacy" */; + buildConfigurationList = 86DB1A97ED27CD00080CD6C1BF42DBFA /* Build configuration list for PBXNativeTarget "RxRelay-RxRelay_Privacy" */; buildPhases = ( - 413BD44DB0856D8E0358F350768D70B5 /* Sources */, - 3A85F096B63B0C12EE15D40EDFCE39F7 /* Frameworks */, - C9D2BA17597BD9D10A8BACD6D530524E /* Resources */, + E873BFFDF3BD266B69A127FD928FE93D /* Sources */, + 2DA6307D2FA15E8E4881319ADDCC6DE0 /* Frameworks */, + E571BE96E47797830317E0AB23389499 /* Resources */, ); buildRules = ( ); @@ -10654,11 +10938,11 @@ }; 3AE57FC4CF27B0BC540B3112353377BF /* MBProgressHUD-MBProgressHUD */ = { isa = PBXNativeTarget; - buildConfigurationList = 5E922FEE2AD37BFC983DCA4DA7B6181F /* Build configuration list for PBXNativeTarget "MBProgressHUD-MBProgressHUD" */; + buildConfigurationList = 757798FC7D05DC5B159999BF40BD2456 /* Build configuration list for PBXNativeTarget "MBProgressHUD-MBProgressHUD" */; buildPhases = ( - AAF72206400F9816CEECD411989FA0FF /* Sources */, - 7019CB1612D089CFE4E3335DDD7699EA /* Frameworks */, - F82883CC8E1C24098B8B224C4243A017 /* Resources */, + 894E07E0B8F5D85643A8FC94E64FE049 /* Sources */, + E33664E8D18621F813D4AEBF9D1CA702 /* Frameworks */, + 034D494659D3083A2B910182B7C4CC5A /* Resources */, ); buildRules = ( ); @@ -10699,9 +10983,9 @@ buildRules = ( ); dependencies = ( - 4563B0373B6E25797E0E63BA07DB9A12 /* PBXTargetDependency */, - 3A9372AAC6B93BA7412E41FFFFBC65D1 /* PBXTargetDependency */, - 809C6BB1B364064A1EB1A7BC9739B2D1 /* PBXTargetDependency */, + 9FA9141BF656042985FBEE89022581C7 /* PBXTargetDependency */, + B12B4CF458578356E489F06F6219F4B5 /* PBXTargetDependency */, + 9CFE6EF2F769A079911AA46CAD3E782D /* PBXTargetDependency */, ); name = RxDataSources; productName = RxDataSources; @@ -10710,11 +10994,11 @@ }; 4502C7427440BEB17A50C0BF6E638A85 /* IQTextInputViewNotification-IQTextInputViewNotification */ = { isa = PBXNativeTarget; - buildConfigurationList = 1F1CC3D499493FAF0DD04E927FB9C62C /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification-IQTextInputViewNotification" */; + buildConfigurationList = 2CFDEC658879BF3F8755C0D94533DD07 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification-IQTextInputViewNotification" */; buildPhases = ( - 347E0C664DDF370093C3E30925757EC8 /* Sources */, - 2DBE7820B8A8EC06685821AFE0665F89 /* Frameworks */, - D4DE6C908D537B3C4D297D6CFEC155C6 /* Resources */, + 46B69E7E6B89A55EF747BFA0FC4F54E9 /* Sources */, + 40D2C207639D2CA6A4F3F69BD60D6C88 /* Frameworks */, + BC38D500BCF8EA94CB65449B2D776BD7 /* Resources */, ); buildRules = ( ); @@ -10727,18 +11011,18 @@ }; 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */ = { isa = PBXNativeTarget; - buildConfigurationList = 983007A441D8557EA03BD116DF150079 /* Build configuration list for PBXNativeTarget "RxRelay" */; + buildConfigurationList = B810A89EE45327E8558B0455BE1BFE6F /* Build configuration list for PBXNativeTarget "RxRelay" */; buildPhases = ( - 15904C570F65433C8D6B842579F35988 /* Headers */, - 5D7BB7090ECA84FF50BF60E73FC9B09F /* Sources */, - 5E44D54AD5CEEC2711966638831C7F79 /* Frameworks */, - 8BA0C2630E6B153BC254A807D0295A6A /* Resources */, + CE14A1B2AC014777D86ABF76B78591C7 /* Headers */, + 01C24295C8287BE4F6E5F15479124477 /* Sources */, + BDAA83BE9DECB0452B6AB5A57C3A2237 /* Frameworks */, + 7E1420486D12C8D91F9F9E74C8E88A39 /* Resources */, ); buildRules = ( ); dependencies = ( - 0A270D927D85F31292A0BA59517E8649 /* PBXTargetDependency */, - 5422A638FC545C95EBA20704B1FCD8E4 /* PBXTargetDependency */, + 7733274C6E0C595785A2E7696BD16672 /* PBXTargetDependency */, + 623EADCF50D7FB34CDAA0B88F5DFBF97 /* PBXTargetDependency */, ); name = RxRelay; productName = RxRelay; @@ -10747,12 +11031,12 @@ }; 47D2E85A78C25869BB13521D8561A638 /* libwebp */ = { isa = PBXNativeTarget; - buildConfigurationList = 6C8AAC430878C55132CE101BE3947ECE /* Build configuration list for PBXNativeTarget "libwebp" */; + buildConfigurationList = 6EE0C580D4B4F5DF5D297308DC4983AF /* Build configuration list for PBXNativeTarget "libwebp" */; buildPhases = ( - 239C68A724D71408289AB7EAF090BEAB /* Headers */, - C672A28881304CE3555816F1C4553B1E /* Sources */, - 27D85D2DE824EC39A220D5DF3A1B3700 /* Frameworks */, - A23213350E6A48CA2BF78B674AD6BF82 /* Resources */, + 109D8502A54BB6BDA8CDE803768984A2 /* Headers */, + D2DA36F1282A4EEF40487329493B3581 /* Sources */, + 2FD6D6D3C27D1F0E3E43C4A839524669 /* Frameworks */, + 6EAEA7B9CC2849523DAB27705D5AA08D /* Resources */, ); buildRules = ( ); @@ -10775,13 +11059,32 @@ buildRules = ( ); dependencies = ( - FD2A66E21108EDDB256389A4711EB95B /* PBXTargetDependency */, + 55DF357831ED9BC1DB0033056C869B0F /* PBXTargetDependency */, ); name = MJExtension; productName = MJExtension; productReference = 2B276B0A79173A1D6E83C9B4FB9A4A57 /* MJExtension */; productType = "com.apple.product-type.framework"; }; + 4EB168A830EFA6136FA93357D1F1511A /* CocoaMQTT */ = { + isa = PBXNativeTarget; + buildConfigurationList = 701421AC78CFCB06DED14D7A82780FB3 /* Build configuration list for PBXNativeTarget "CocoaMQTT" */; + buildPhases = ( + B5EAA3937121469A8724C96FCC88A075 /* Headers */, + BB2714530DE387EE457ABD49CD4A5789 /* Sources */, + 277FF12C2651061512FB3A26F0AD2308 /* Frameworks */, + A4A6D9B820D143969128BE3EA029773A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + CAFDA423A8120F3A8DD11D314C11111B /* PBXTargetDependency */, + ); + name = CocoaMQTT; + productName = CocoaMQTT; + productReference = E6A4E1627379D6540B81A470C575D716 /* CocoaMQTT */; + productType = "com.apple.product-type.framework"; + }; 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */ = { isa = PBXNativeTarget; buildConfigurationList = AAA1F8799DB68036C3BE983C05FAA2C7 /* Build configuration list for PBXNativeTarget "Masonry" */; @@ -10802,11 +11105,11 @@ }; 5C92E047D2B317BFB31393F449A9EA0D /* RxCocoa-RxCocoa_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 8D4601F2FE970FD358D36EAA7D359464 /* Build configuration list for PBXNativeTarget "RxCocoa-RxCocoa_Privacy" */; + buildConfigurationList = 74E7BB30B8789F5471E13D1D9C21C66C /* Build configuration list for PBXNativeTarget "RxCocoa-RxCocoa_Privacy" */; buildPhases = ( - 11A34DDE224D2836079EABADCD8A8E04 /* Sources */, - 9825A28BFE907B062A94929F53216E87 /* Frameworks */, - A8CC6628C022C383E8605C29ED144DB1 /* Resources */, + EB1788181A2BB691931C15EE395D5DAD /* Sources */, + 4C91894590E9C4C8EFBADF42B0003F66 /* Frameworks */, + ABF2CC011CB4DC1485360C5CA8B27157 /* Resources */, ); buildRules = ( ); @@ -10837,11 +11140,11 @@ }; 677650A76A720691B88A6959EFED6418 /* SwiftyJSON-SwiftyJSON */ = { isa = PBXNativeTarget; - buildConfigurationList = 7D3E39350E8F78F3C28A7E4F78B6E0B8 /* Build configuration list for PBXNativeTarget "SwiftyJSON-SwiftyJSON" */; + buildConfigurationList = 3CA9216911EF16B6BFFD055F1953965D /* Build configuration list for PBXNativeTarget "SwiftyJSON-SwiftyJSON" */; buildPhases = ( - 25FB831060853C6D988172BD51F4B7DD /* Sources */, - CA9CE68CE719691AA3A4ADACC21F0AF9 /* Frameworks */, - DB978B93646DEAB6DFF5ADC3AF6CB41B /* Resources */, + 3E86D5855CF181CDB972E342F4E02FFE /* Sources */, + 2C20BFE194DD149BC347E329960B93DA /* Frameworks */, + 1FA8FA7F15BCC1A3F21958216CFFA096 /* Resources */, ); buildRules = ( ); @@ -10864,7 +11167,7 @@ buildRules = ( ); dependencies = ( - 7223D67E1534958016F47E100734166E /* PBXTargetDependency */, + 4CAC7E59316C2FDE7A939824D0EDD010 /* PBXTargetDependency */, ); name = MJRefresh; productName = MJRefresh; @@ -10901,9 +11204,9 @@ buildRules = ( ); dependencies = ( - 4DF6DC90A69ABF06C5FE87ADFB9F481D /* PBXTargetDependency */, - EB3A666E9AC00B8B6AE940FA6874A778 /* PBXTargetDependency */, - E641EE970C8C6EC0575D11D9128B2887 /* PBXTargetDependency */, + 00A1072D085D33FF9E229983C05DBFD6 /* PBXTargetDependency */, + C23A0C6F18CC3C8FB09F11EB7C356E83 /* PBXTargetDependency */, + 2442F750D27033389D5ADDB48BD56A14 /* PBXTargetDependency */, ); name = RxCocoa; productName = RxCocoa; @@ -10912,68 +11215,70 @@ }; 7B2FF6E8662313DAC1DB23D6B750D43C /* Pods-QuickLocation */ = { isa = PBXNativeTarget; - buildConfigurationList = EA941C1047FD4F475EBCF2297A47EEF3 /* Build configuration list for PBXNativeTarget "Pods-QuickLocation" */; + buildConfigurationList = 6E3711E75C912F7271040F0F928F9A89 /* Build configuration list for PBXNativeTarget "Pods-QuickLocation" */; buildPhases = ( - FC8E41F3FDA4136BA6EC764F4D6CA06A /* Headers */, - 5617F9353C3A30E22C044791BBAADAB3 /* Sources */, - 16AB0459A23AC69B658C7E57E2D4A6F2 /* Frameworks */, - E9E84DCA31807AF25979678C55CAA0C0 /* Resources */, + 9B7B8664B89664F1C8286E05338A5CA3 /* Headers */, + BC407DD2244E3D84B04992F1E0D8BB1B /* Sources */, + 2C871119D45F7AA4DA2DF9BF90E0CB7D /* Frameworks */, + AE203C28EFDBF9F11219F7DE18744178 /* Resources */, ); buildRules = ( ); dependencies = ( - A7251C0B1CD15B90F362B6371D9ABEB2 /* PBXTargetDependency */, - 5F38C0ED219C3396D3234A7027D1D999 /* PBXTargetDependency */, - FC8EF6355BA5F6C6FD2BD0348C24DE14 /* PBXTargetDependency */, - 6995BCBDB8E4C3A8A27B6C53031785EA /* PBXTargetDependency */, - 06EDD5B89C3D0C2108751E14413DA766 /* PBXTargetDependency */, - 474BA1D6BA459E5E6306C93E0E31A41A /* PBXTargetDependency */, - 61E289E0A9065296349039D1D6E9F9BA /* PBXTargetDependency */, - F98B4F6C1E5D43B2281CD4D147C752A5 /* PBXTargetDependency */, - F921C1A1EF134BAC85F4DF9606458914 /* PBXTargetDependency */, - 27F0CDE14281B8CB610803FBB1B167D7 /* PBXTargetDependency */, - AB2ECBAF111733CC1E8352C2268369B9 /* PBXTargetDependency */, - D991E1747DECD8EF3091A3C02FF0BD58 /* PBXTargetDependency */, - EA400D6D6B28C34C0608A602D119CB89 /* PBXTargetDependency */, - 5F02745808F174D51E57F01436ABB372 /* PBXTargetDependency */, - 29E3F9DFCC9FBE2FAE76790C4ECAED2C /* PBXTargetDependency */, - 689454A68DEC3ACBD89C2AF2BDF7E4FF /* PBXTargetDependency */, - 714C6A6DE5889D6FEF0C0D3F6B46824A /* PBXTargetDependency */, - 75D1C2E049377428E0F5BAD89A42CDAC /* PBXTargetDependency */, - 3807AD07A236EA168BF6A364ED07C782 /* PBXTargetDependency */, - E76212A3A2D1721BA51C1D262DF271D4 /* PBXTargetDependency */, - 63FBBF33E794DF4852E334EC554EF841 /* PBXTargetDependency */, - EE3D14813A7F1781B2A0689D95DF691E /* PBXTargetDependency */, - DF953A6B0F070C79FFDEB6B95072FB36 /* PBXTargetDependency */, - 418A5F7852FD349835E60C16DD507C67 /* PBXTargetDependency */, - B8757CEC296AE79AAE009388BE836685 /* PBXTargetDependency */, - DB546251EA6DB2A51377E50F06779EA6 /* PBXTargetDependency */, - BBCAD01738D428E18C51619FEB646864 /* PBXTargetDependency */, - 776ED604F2D6B820B3270532E2127EA8 /* PBXTargetDependency */, - 0E0E74C2D4426EA2441F10A0A60BF5C9 /* PBXTargetDependency */, - 9C63E297360D2C008DB2A7A057984497 /* PBXTargetDependency */, - 6A65BC82B097A262E0ECC8104999C714 /* PBXTargetDependency */, - E9A3E7D15D6686E38B55421279DE4D16 /* PBXTargetDependency */, - 52D2E18D5980B4CAEB5BC8A9694601EE /* PBXTargetDependency */, - CF7AA26E6D68D6289431F15F070521F4 /* PBXTargetDependency */, - EDAC16EE2188486D189990FA13B3456D /* PBXTargetDependency */, - FAB28E7185E42F14BA8E7C81771E7BF9 /* PBXTargetDependency */, - 8602DE5A03B3206977FCE64395F9BC6F /* PBXTargetDependency */, - 2793407C6B54BE79E0F479BDFFE4F0D8 /* PBXTargetDependency */, - 925E49A503DD65CF0410C5E0C24E16F9 /* PBXTargetDependency */, - 24BD652E0B8C2522FEC261C98350926B /* PBXTargetDependency */, - DB3FA8A17D62B44653577F81BBC78D4F /* PBXTargetDependency */, - 6917B6E71FCEC314AB67E58C93947011 /* PBXTargetDependency */, - DF0192CB058D6E4DAA11A8136A3002F4 /* PBXTargetDependency */, - 8F28C015BFED2FBC5A4F2EE229EE4298 /* PBXTargetDependency */, - FF66E54E7CF9D1BB190AF4ADC129371C /* PBXTargetDependency */, - EEDC1E39AB51D6AAC6540D06A24AB984 /* PBXTargetDependency */, - BC0D789B7BCA7AB5F8580B8AF266CA7D /* PBXTargetDependency */, - 4B58B6D9FD62717F08C97DC2873BCB87 /* PBXTargetDependency */, - A64B4139FBE40A8C7EDA0251EF0F4859 /* PBXTargetDependency */, - 0423424C517A6FF31FBC7257498A4912 /* PBXTargetDependency */, - 229DF5CC4CE2B68D7FC375271C40DD18 /* PBXTargetDependency */, - 6E2911D5C5E2792E0D3E97DAF942B8ED /* PBXTargetDependency */, + 67D619A424F2BC1B051F9CAB4BFA9804 /* PBXTargetDependency */, + FFFBFAB00B10E1ABC9ED8CA155436E90 /* PBXTargetDependency */, + 4A9B378EC57730012AB00FFA7E1BA3CD /* PBXTargetDependency */, + 81D0C1CE48C78D8960A21CC9B8BB66E2 /* PBXTargetDependency */, + A0B59B7EED6E088DDE107DE1E609B795 /* PBXTargetDependency */, + 02DCF412CCF54ABF196C58318A06952F /* PBXTargetDependency */, + 844EE58D8052C7FA612D8983BB848A7A /* PBXTargetDependency */, + C91890FA12733C2B65D6C2A630A8E11B /* PBXTargetDependency */, + 5212F0408404D38D8B1703FBFF1A0195 /* PBXTargetDependency */, + 061A0A7A6AC73DE97E2687A75901F5C8 /* PBXTargetDependency */, + 14C2A59A23B990EC78D9686BFD09C2E4 /* PBXTargetDependency */, + 06CC905783430DCBA4B28924A156B219 /* PBXTargetDependency */, + 9943B828208CC1B8924821C99D81BA93 /* PBXTargetDependency */, + 8ECC0F686D557BA3FD2C4823EECDC82D /* PBXTargetDependency */, + 5EAFBF615DAF48A2F3E28F72217759F2 /* PBXTargetDependency */, + 053F080C03AA720B6C921F0EA8B4B378 /* PBXTargetDependency */, + 8D0DABD68F75AE005635BE2D6B73E6E5 /* PBXTargetDependency */, + 119FBF0B2F7BE1CE61569418C63670C8 /* PBXTargetDependency */, + 3D7C07273E2759A8305988ECF754865E /* PBXTargetDependency */, + 8D7361C4F6FE5F91025E75836705AA22 /* PBXTargetDependency */, + 89D1D0D1D4489194150C65BB3B0729E3 /* PBXTargetDependency */, + 87B3CF7A6AEA4860A117BE6197DF4608 /* PBXTargetDependency */, + 6461C8BD9A5F27DC75A5E6BA7AAA64E0 /* PBXTargetDependency */, + 71CEE74B9E1954F63D1CA59CF9FF432F /* PBXTargetDependency */, + BC0345E0443F779BCAA4606B48AFDE3A /* PBXTargetDependency */, + C2C1B24DD139892A57A460B78898AAA1 /* PBXTargetDependency */, + 3DF275744C0F1F92E2A45684C525CD7B /* PBXTargetDependency */, + 05931D2B26F77153CB3201A4A1B1FB10 /* PBXTargetDependency */, + 11C9AC3D696902A308FAC527831E4214 /* PBXTargetDependency */, + 2D1FFB6A11AC395B33C7986274813725 /* PBXTargetDependency */, + 09E258F4CBA9A48361CE274E9A3B7F86 /* PBXTargetDependency */, + 3DCF89CB2DF6A9464255DB3BC9FBC079 /* PBXTargetDependency */, + 3DA49EDBDF22679824B4053DEDE74E38 /* PBXTargetDependency */, + 565F3DFF9BA679342F9043CC623DC846 /* PBXTargetDependency */, + 41378EFE1B6698D2B8BDE3375AA5BCBC /* PBXTargetDependency */, + 9F38598720ADB94FCD5D729271A29639 /* PBXTargetDependency */, + 4F160F00FC669AB62227CBF1A69D8CC4 /* PBXTargetDependency */, + EF8A7784AE5CDC5DA53D690528846AB3 /* PBXTargetDependency */, + 1C4F4702C94163ACD0D7378F24244C9E /* PBXTargetDependency */, + A8988DDA2B032FA533D262B179690162 /* PBXTargetDependency */, + A9BE54AB584D7D98F5ED5E3B41EE4578 /* PBXTargetDependency */, + 4E7D8402DD5720638C3D65337010A923 /* PBXTargetDependency */, + 8FC66720C41E4AE84F637B0A2DD14EE2 /* PBXTargetDependency */, + 08CB616BE7CC88F7F2A67328CB21EF5E /* PBXTargetDependency */, + B3E194739BBE5563CEADD1783522BA9F /* PBXTargetDependency */, + 24ACCCFD5AC8526CB6FEEC407A94E172 /* PBXTargetDependency */, + 69B99208E6BA6AD0321E7F37C298C0F1 /* PBXTargetDependency */, + 317B2AF08FF5FC2546411F885D9E4AA3 /* PBXTargetDependency */, + E3A3706048E530DEB7C582F6A987E2A3 /* PBXTargetDependency */, + F76072662756082232E539FB6FAD05B2 /* PBXTargetDependency */, + C43B7F857249763D7A59CDE2501B860E /* PBXTargetDependency */, + 14566B4B65F642562FC97EA6C971D955 /* PBXTargetDependency */, + B30A38F1D067613698D0ECBFF82F45EB /* PBXTargetDependency */, + 13814B5F73D6A9D057A4645F22952380 /* PBXTargetDependency */, ); name = "Pods-QuickLocation"; productName = Pods_QuickLocation; @@ -10982,11 +11287,11 @@ }; 7C5613175BBC4BF67E36DB4FBEBC01D0 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */ = { isa = PBXNativeTarget; - buildConfigurationList = 3606C6C7473BDDA747B961013F63837B /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager-IQKeyboardToolbarManager" */; + buildConfigurationList = D37672541719AF3542039591D846B1A2 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager-IQKeyboardToolbarManager" */; buildPhases = ( - 3D5797597F20D575447F0E4DBF2DEE3B /* Sources */, - 9070E29A77AEF224DAD68D5CE02D9E9D /* Frameworks */, - 43133C2CC5378A5FFDAFA8AC6FD32D21 /* Resources */, + 16593F496A72F1F2DCBBDD63B5268EEC /* Sources */, + B55C9F1352AC4E1A79DEF57943336A49 /* Frameworks */, + 15CEE2FE6FB1E7CB15E47DC66C1120D4 /* Resources */, ); buildRules = ( ); @@ -10999,12 +11304,12 @@ }; 822E44240F2922DAB12018A6B649BD19 /* YYImage */ = { isa = PBXNativeTarget; - buildConfigurationList = 18CC7E116881CCCFF50C55897144816E /* Build configuration list for PBXNativeTarget "YYImage" */; + buildConfigurationList = AD16F0FCAD771A357F473A4AFE0DAD13 /* Build configuration list for PBXNativeTarget "YYImage" */; buildPhases = ( - 40E8608A45A6663CB24FD171688536F7 /* Headers */, - 81F03CCECDA1FC18435042180C600368 /* Sources */, - D04E0124F8432BD77BD51B9C2D21EF3E /* Frameworks */, - 9AFD80F930BB91B2BACB91FBD00027E4 /* Resources */, + B140A8F9807A2A947D7A2DFD0D48ED8E /* Headers */, + 587DD1DB8F7D5493853619236C13DE5D /* Sources */, + BEB9B0D56F4008740021BAADA40238A3 /* Frameworks */, + 72771E06402A203535CC6D24FF18A83C /* Resources */, ); buildRules = ( ); @@ -11027,7 +11332,7 @@ buildRules = ( ); dependencies = ( - EA90E841FE1B83FD460BE5DF34C8A3B7 /* PBXTargetDependency */, + 16D37F6F9C0102A83E71C6BE6B84C6CA /* PBXTargetDependency */, ); name = MBProgressHUD; productName = MBProgressHUD; @@ -11036,11 +11341,11 @@ }; 88810798DA63A2F6611B0970EA276DEC /* IQKeyboardReturnManager-IQKeyboardReturnManager */ = { isa = PBXNativeTarget; - buildConfigurationList = F48896F2B355944D89133495B349A209 /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager-IQKeyboardReturnManager" */; + buildConfigurationList = FE928EFF4FD3F75514DA375AC225A59E /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager-IQKeyboardReturnManager" */; buildPhases = ( - 39049C2CAC5FC1ABE0794D667C168BDF /* Sources */, - 7E3F89ED6BDF72DF1BBFF1EBFA833D09 /* Frameworks */, - D7646EAD557C397466E006267CDFCA14 /* Resources */, + DFC181D4377A1BAD6585D3C9978A2C3D /* Sources */, + 53C0E00DF3D2426FEA276C429C101E9B /* Frameworks */, + 9AB2255FB04B22BB592652DD75CA5531 /* Resources */, ); buildRules = ( ); @@ -11071,11 +11376,11 @@ }; 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 71C54D251EC42560EFF3CE4B275E8DA4 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; + buildConfigurationList = 2DF8257610A4F0250953B8B24B9302A6 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */; buildPhases = ( - BE584699783D4EFA62AAE2E14CF198D0 /* Sources */, - 5FC385F019F30F8056E28B6D1E8B86B9 /* Frameworks */, - 76E0B413CC41F691A4ECFE72FB07F0F1 /* Resources */, + 1276B092A22EE1538E4B050B85645B70 /* Sources */, + 01AE4BFCC836B4A0E0D7BFBDA19C9A6C /* Frameworks */, + 9DEC9B64BC463675671DFE0ED675F654 /* Resources */, ); buildRules = ( ); @@ -11088,11 +11393,11 @@ }; 94CFBA7D633ECA58DF85C327B035E6A3 /* SDWebImage-SDWebImage */ = { isa = PBXNativeTarget; - buildConfigurationList = E8B5922B5EAC07270F7EBC177288A753 /* Build configuration list for PBXNativeTarget "SDWebImage-SDWebImage" */; + buildConfigurationList = B9C98F60F3068C7DB86F9997E7ADC7D6 /* Build configuration list for PBXNativeTarget "SDWebImage-SDWebImage" */; buildPhases = ( - A47F439B8D061FAF926B29A112E34AF6 /* Sources */, - 28953E19C2005E9193DC91008D1DE7BB /* Frameworks */, - 7ABA347695C011F034F6B84EDD41B548 /* Resources */, + BBAD2C14A04F3915F9568482BFC47E26 /* Sources */, + 06328DAD038631B177DE7D4FD4AA9DD9 /* Frameworks */, + 025054388155064A6AAAC9C02D172AE3 /* Resources */, ); buildRules = ( ); @@ -11105,11 +11410,11 @@ }; 976126A1CE06DC6E162563800E1BDF14 /* Alamofire-Alamofire */ = { isa = PBXNativeTarget; - buildConfigurationList = B4235B903770F2009D5C2863EFB72F2F /* Build configuration list for PBXNativeTarget "Alamofire-Alamofire" */; + buildConfigurationList = 294F585694949ACBE0279FE7F4677EF2 /* Build configuration list for PBXNativeTarget "Alamofire-Alamofire" */; buildPhases = ( - 6EB6B062252682B121E3120653AF2BC7 /* Sources */, - 24D572644A965DFE839190D36A91A35A /* Frameworks */, - E052CE5A875358208B4E3DFC8DE00B32 /* Resources */, + 70BE4224601F75D96D377EDDB8084DAF /* Sources */, + 01975CBDD3B70D1E18BB91B8301AE617 /* Frameworks */, + 24B5E37AE776DE36B4BF7C13BF3E3A3A /* Resources */, ); buildRules = ( ); @@ -11122,11 +11427,11 @@ }; 9828BBC09E9FB1238624113D7456E59E /* Kingfisher-Kingfisher */ = { isa = PBXNativeTarget; - buildConfigurationList = 950D6D814E279F5AD0981351D37170B0 /* Build configuration list for PBXNativeTarget "Kingfisher-Kingfisher" */; + buildConfigurationList = AC300E7B80778A8B1063AA52F7BB053A /* Build configuration list for PBXNativeTarget "Kingfisher-Kingfisher" */; buildPhases = ( - 0E510E418804381A0F002D582B2D688C /* Sources */, - FA994E5F3F5CBAFCD1C9D3AB03A4C48D /* Frameworks */, - 04ADE83A29D4A315B8053EDDB2EE3ED3 /* Resources */, + 09EACC9E3A742CD64040127B378ACB39 /* Sources */, + 01DFC48E1F53F491E4BA276CB013D8FB /* Frameworks */, + 4A3538B2E3C9B71D22582C87C57E492B /* Resources */, ); buildRules = ( ); @@ -11139,11 +11444,11 @@ }; 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 2FE321B4B52F6E212AA0AC623949A1D1 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */; + buildConfigurationList = DA5E7F9090E0F51DF371BAD15789BA85 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */; buildPhases = ( - CA6DBC72AA33333BCAC9445A32BD908F /* Sources */, - 6AC1271961B00B1E2C927BD726508CF5 /* Frameworks */, - 09D727F15F09039C2251695BA61D1B38 /* Resources */, + 2941C4E22687863CE625E6A88386A22A /* Sources */, + E3AF7819D3384DD52FC3A8D2752EFAE8 /* Frameworks */, + 4B7442CE4009F1C6B46EB1E0F2FECA1B /* Resources */, ); buildRules = ( ); @@ -11174,17 +11479,17 @@ }; A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */ = { isa = PBXNativeTarget; - buildConfigurationList = 7B3ECF9B14E831C1E69A740F6EDD2397 /* Build configuration list for PBXNativeTarget "IQKeyboardNotification" */; + buildConfigurationList = 464447B68542887B4E815F2387D67490 /* Build configuration list for PBXNativeTarget "IQKeyboardNotification" */; buildPhases = ( - FB7CD51FACD057EFC34D2053A49C2843 /* Headers */, - A2F44179063046C06A348D012B5D9DBC /* Sources */, - 9044335B6F58888C40BF8DAB731BD484 /* Frameworks */, - 89AFF5D66BA54960CB1EA89A8ACFA33E /* Resources */, + 13BA45E0D772BF298A07A8B164843527 /* Headers */, + B2A31197323F230D6200DFFF253D9F8F /* Sources */, + 2DE5D894FF69B5E9F0E4EFF2354C0653 /* Frameworks */, + 6CFC083652B60F73E6AAEEDFBFCE3B47 /* Resources */, ); buildRules = ( ); dependencies = ( - 1A6D8A996B55A6BB9FB4E590163AD294 /* PBXTargetDependency */, + 9E397E80B5B748D13CF4BCD1E4A99E2E /* PBXTargetDependency */, ); name = IQKeyboardNotification; productName = IQKeyboardNotification; @@ -11193,11 +11498,11 @@ }; A6602BCAA6F4F932A586C41D0B7E019C /* IQTextView-IQTextView */ = { isa = PBXNativeTarget; - buildConfigurationList = 9F4308D7D5046F7288DB3693BDD9D2FA /* Build configuration list for PBXNativeTarget "IQTextView-IQTextView" */; + buildConfigurationList = F9FAD43D2A0DEB921B66E27E37C7E5B9 /* Build configuration list for PBXNativeTarget "IQTextView-IQTextView" */; buildPhases = ( - 39067DE68C862D6B997E0441CCF512B0 /* Sources */, - DC5E36FEFA1FBB27AEBDCF22AA3C06EB /* Frameworks */, - EBF88CC2A0107A48F104387FBED6454C /* Resources */, + 3B52A5A8596F88A8BFD84799F2875071 /* Sources */, + 12B469B686D5B69A29FDCCD4BFD6C715 /* Frameworks */, + B9977E2DBE9FD6904FDEF4A2EE660825 /* Resources */, ); buildRules = ( ); @@ -11208,13 +11513,31 @@ productReference = 847044E56CBBCE1235A6F3CEF3F9F607 /* IQTextView-IQTextView */; productType = "com.apple.product-type.bundle"; }; + B017CC75E2704C686AA0A2203247D9C7 /* MqttCocoaAsyncSocket */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3D1CBD8549563FAC742CB31571F622FE /* Build configuration list for PBXNativeTarget "MqttCocoaAsyncSocket" */; + buildPhases = ( + 79CA09845E5444D46A42008314213DA0 /* Headers */, + 7E26ECFCDA20DC6B3FC07CDBEDF6A947 /* Sources */, + 5A1052A1D08809487D5D3AEF8E2C85A6 /* Frameworks */, + 0887CC9B9397F86E33A2ABE14BA4BCB6 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MqttCocoaAsyncSocket; + productName = MqttCocoaAsyncSocket; + productReference = 08DE826BB58AC8456D39338C267DB337 /* MqttCocoaAsyncSocket */; + productType = "com.apple.product-type.framework"; + }; B247F77A0CD5E19C8187A9BA1EB58C09 /* IQKeyboardToolbar-IQKeyboardToolbar */ = { isa = PBXNativeTarget; - buildConfigurationList = 37D8640B118856AE776EA78AD4DAC492 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar-IQKeyboardToolbar" */; + buildConfigurationList = 8A8565B186B9103A7BC8FE64942C270E /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar-IQKeyboardToolbar" */; buildPhases = ( - E95AA2DA471BE0C97D4B9E100073684D /* Sources */, - 2B63BE43F73E8B74C6CCC14ED87B1CA6 /* Frameworks */, - EC406E27915FD3A58994BC8134D8E022 /* Resources */, + 575A5516E291354D4BDEC321451B2DF3 /* Sources */, + A10D2F79E7AE84861E35970014FF750E /* Frameworks */, + D1487D0AA735B6F409777D8C5BCBDD9D /* Resources */, ); buildRules = ( ); @@ -11227,11 +11550,11 @@ }; B26054DF1DEA11585A231AF6D1D80D5E /* MJRefresh-MJRefresh.Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = 15E1625229AEEF76B371C85A30BEC8D8 /* Build configuration list for PBXNativeTarget "MJRefresh-MJRefresh.Privacy" */; + buildConfigurationList = 0B93C26B016DBDD8A7FA041E0E6D87CB /* Build configuration list for PBXNativeTarget "MJRefresh-MJRefresh.Privacy" */; buildPhases = ( - 4156DE582C2412C01D011A772DA02929 /* Sources */, - 8E714EDDA0F6731D47EF41DFD8F372CD /* Frameworks */, - DDF3690F444FABE35265342ECB139433 /* Resources */, + EA5A1E1084CCFC39C15254A90B1AE19A /* Sources */, + E386FCD9D8F479EEDED94B4214191574 /* Frameworks */, + E2AE0D864B9ED466159D8FD87FB07DA7 /* Resources */, ); buildRules = ( ); @@ -11244,11 +11567,11 @@ }; B32AF3F43989CBA171BB1FB3957A4509 /* MJExtension-MJExtension */ = { isa = PBXNativeTarget; - buildConfigurationList = CDD88F74A6576E75408DEB54D8367BA6 /* Build configuration list for PBXNativeTarget "MJExtension-MJExtension" */; + buildConfigurationList = 0ABD335369805811737BE0F97C6C7353 /* Build configuration list for PBXNativeTarget "MJExtension-MJExtension" */; buildPhases = ( - FBB63F3C895372F15B9D7DA98AD1BC8D /* Sources */, - 6C6E81B9C8466DCF26580F0595755D0B /* Frameworks */, - 73C89D1C9CF255EE8CE2D4284579C51E /* Resources */, + 097801BCCC68798C07B247CB7D9C8C10 /* Sources */, + EDF83DFA2B9A14CD4ED7411626774CF6 /* Frameworks */, + 78F5FCFA47AABD26EA3584AD03F86FB7 /* Resources */, ); buildRules = ( ); @@ -11289,12 +11612,12 @@ buildRules = ( ); dependencies = ( - F2523D133596D9DAA94F301030473634 /* PBXTargetDependency */, - 0C758B3319CE3765BD94EF42337CCC3F /* PBXTargetDependency */, - F6918A53726776461E823475A47C47EF /* PBXTargetDependency */, - 2A9641E11BC725AE467BFE3CBD3E55A2 /* PBXTargetDependency */, - FE5B9817129F124FE2216068BE379B31 /* PBXTargetDependency */, - CD6625D0A5E51DDBD5BE9B906CD190E3 /* PBXTargetDependency */, + 7DC915678E8254CF93E03735EE74B0A7 /* PBXTargetDependency */, + B178318E6B06FEBDFCA880490160D2DB /* PBXTargetDependency */, + FA78E89559F608171A318EA1A1A05625 /* PBXTargetDependency */, + 718FB82B61EAA6741EEF657ACE476A08 /* PBXTargetDependency */, + 03BE676D6E796F73D6FDE561982E015D /* PBXTargetDependency */, + 331EE3C0890333418E0AB093E5D012A1 /* PBXTargetDependency */, ); name = IQKeyboardManagerSwift; productName = IQKeyboardManagerSwift; @@ -11313,8 +11636,8 @@ buildRules = ( ); dependencies = ( - 69F32127477388DB1EF47C989653AA3C /* PBXTargetDependency */, - 6FDE263B4B3D335FF258B018B24FB7EF /* PBXTargetDependency */, + 2E65B9D035B07836C53FC44882FD5411 /* PBXTargetDependency */, + 2670CA7666FADB6C71B574E88FF46068 /* PBXTargetDependency */, ); name = YBImageBrowser; productName = YBImageBrowser; @@ -11323,11 +11646,11 @@ }; BF2A15FEC3F3424BBC4B9AD5F86F2D54 /* lottie-ios-LottiePrivacyInfo */ = { isa = PBXNativeTarget; - buildConfigurationList = 99544DFEA3ABAD73EE22C7B670A27277 /* Build configuration list for PBXNativeTarget "lottie-ios-LottiePrivacyInfo" */; + buildConfigurationList = A8D2F4A6CDB15363D2B7CD87F959C43E /* Build configuration list for PBXNativeTarget "lottie-ios-LottiePrivacyInfo" */; buildPhases = ( - D2DFF319A95580F59BC9410B687D2748 /* Sources */, - 7936B8B37C6C2E82AEC25493A2EAB735 /* Frameworks */, - CE0420E86FAC21EC82D24F8818797E90 /* Resources */, + 7D1E213D772FF9DBC51F426D48BF0C22 /* Sources */, + 967D01C15ADC84B0D6F6465C3150ACF1 /* Frameworks */, + B431ABB5D5BAE8BCCF5375BFBA981581 /* Resources */, ); buildRules = ( ); @@ -11350,7 +11673,7 @@ buildRules = ( ); dependencies = ( - 80A6E6B2BD507370373167F3DF66659C /* PBXTargetDependency */, + 6B7A1136FEC9630E5810811A03304F70 /* PBXTargetDependency */, ); name = MarqueeLabel; productName = MarqueeLabel; @@ -11369,7 +11692,7 @@ buildRules = ( ); dependencies = ( - 34D74EF0976DCD06A98A329EEB6A9A6B /* PBXTargetDependency */, + CB4D5BDDFF21ECC88677A198F7E338BD /* PBXTargetDependency */, ); name = SDCycleScrollView; productName = SDCycleScrollView; @@ -11378,11 +11701,11 @@ }; CBFB5A372F4DE9D4BC6B9ADA98B80BFE /* MarqueeLabel-MarqueeLabel */ = { isa = PBXNativeTarget; - buildConfigurationList = E98AA333BE2F80C5073C19F7D874B291 /* Build configuration list for PBXNativeTarget "MarqueeLabel-MarqueeLabel" */; + buildConfigurationList = 1A401D82B16E9AE11902CE16E77EE8CD /* Build configuration list for PBXNativeTarget "MarqueeLabel-MarqueeLabel" */; buildPhases = ( - 5657F5827C3348B57780F212BA7104ED /* Sources */, - C2C83C8CA83F939FDC972D46AD672DFA /* Frameworks */, - F0684009A025997176847D4F180AFBBE /* Resources */, + B1A34CED0B05549FB1A36F61C44D0DE5 /* Sources */, + 9F142B267B422862220164D4351D1977 /* Frameworks */, + D81B899AB5D5FDFD30FF35B92088DBE2 /* Resources */, ); buildRules = ( ); @@ -11423,7 +11746,7 @@ buildRules = ( ); dependencies = ( - DB812A3F914FF838A6360E92BE18ACF1 /* PBXTargetDependency */, + FBF93ED7FC482938418EE1D10B88E153 /* PBXTargetDependency */, ); name = SwiftyJSON; productName = SwiftyJSON; @@ -11432,11 +11755,11 @@ }; E68E71E462C154107C49C379E539826E /* ObjectMapper-Privacy */ = { isa = PBXNativeTarget; - buildConfigurationList = B2ABF0C77AFF3164F71BADF22DE56125 /* Build configuration list for PBXNativeTarget "ObjectMapper-Privacy" */; + buildConfigurationList = A2A7560779BF2CE98594D4DD95618156 /* Build configuration list for PBXNativeTarget "ObjectMapper-Privacy" */; buildPhases = ( - 50B57A4B4C432838C27154E4075204E2 /* Sources */, - 72DC59A6CF54BE63D611BEA35D572B2A /* Frameworks */, - C27265C131AF96E9E3C2901A4926EB72 /* Resources */, + D3B7F4CF2F6E65F3DE5121DE7D972D66 /* Sources */, + AFC8FAED3CBB80D1E3253859DF9AF754 /* Frameworks */, + C06A6D6B134EC6BC0C829D6C2B6AB5B7 /* Resources */, ); buildRules = ( ); @@ -11459,7 +11782,7 @@ buildRules = ( ); dependencies = ( - A4415C13DF30CDB026B7F465A25913D6 /* PBXTargetDependency */, + 02D15F927AE4B4488778259A1FDCF822 /* PBXTargetDependency */, ); name = Kingfisher; productName = Kingfisher; @@ -11478,7 +11801,7 @@ buildRules = ( ); dependencies = ( - B1771CC8AEC0A0F67E148386180E2090 /* PBXTargetDependency */, + 7CC9A74710C42D1501C895BAF55B9B55 /* PBXTargetDependency */, ); name = CocoaLumberjack; productName = CocoaLumberjack; @@ -11487,17 +11810,17 @@ }; EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */ = { isa = PBXNativeTarget; - buildConfigurationList = 07168E72BCBCF2C5EA9E6C96F7DEA930 /* Build configuration list for PBXNativeTarget "RxSwift" */; + buildConfigurationList = 53ADEEB74F5FB98F256688E4189ECC79 /* Build configuration list for PBXNativeTarget "RxSwift" */; buildPhases = ( - F3A536E36F6FF7344A815F868C2E74FF /* Headers */, - 50ABD95842350CD3501B3D3065FAED26 /* Sources */, - BD2E7A934A2FF328A64E6344985665A6 /* Frameworks */, - 25EA31F5EDF6C6DA50358EA938087BA1 /* Resources */, + AB88581FF933CF69BBB0E15137F88F7A /* Headers */, + 872A47048D204F3DC75A059AD43414CC /* Sources */, + 3C03A0F1C3858E353A966927052F1609 /* Frameworks */, + 672EF01293BF244D8B92AEB579B4680C /* Resources */, ); buildRules = ( ); dependencies = ( - 9F154867C1546E6B38EE53F105E0E6A4 /* PBXTargetDependency */, + 1539E005446B7DAA5069E44BDB998F19 /* PBXTargetDependency */, ); name = RxSwift; productName = RxSwift; @@ -11516,7 +11839,7 @@ buildRules = ( ); dependencies = ( - B2072E6A13996825B6F5921C0E227A76 /* PBXTargetDependency */, + 8C40FA741B59320725CF534BF3EBAE33 /* PBXTargetDependency */, ); name = Alamofire; productName = Alamofire; @@ -11535,8 +11858,8 @@ buildRules = ( ); dependencies = ( - 5D710C4ED1B517BEDDD1A633C1827954 /* PBXTargetDependency */, - DD21BD7E9672B4F13EF7DE2FFEA26DFB /* PBXTargetDependency */, + A814D6E3E166EE1D154579D9DB9CD4D8 /* PBXTargetDependency */, + 0E721B89BF12521E129E16FB49548BBA /* PBXTargetDependency */, ); name = RxSwiftExt; productName = RxSwiftExt; @@ -11545,11 +11868,11 @@ }; EEE261386011CDF271BE289F73FF5959 /* IQKeyboardCore-IQKeyboardCore */ = { isa = PBXNativeTarget; - buildConfigurationList = 8BECD56FE2C07A3980EF80DAF29BEDD9 /* Build configuration list for PBXNativeTarget "IQKeyboardCore-IQKeyboardCore" */; + buildConfigurationList = B6E2A2C8667DB5ECDD64557EAEE2B908 /* Build configuration list for PBXNativeTarget "IQKeyboardCore-IQKeyboardCore" */; buildPhases = ( - 07347DABC6C087FC78C6EA216F81E8EA /* Sources */, - F57A48E3CEA6A2A74CD89B2D260FAD89 /* Frameworks */, - EDB32818FC10E1AC64CBECAD2FB1BEC5 /* Resources */, + CD025D31F5EBDE4E708C3204A90F59B6 /* Sources */, + FCF72B5CA4B711A9EF957FF9913B2161 /* Frameworks */, + 1D43E155665E7CE8DE218A6323D494AC /* Resources */, ); buildRules = ( ); @@ -11562,18 +11885,18 @@ }; F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */ = { isa = PBXNativeTarget; - buildConfigurationList = CED9CFC3D76AAC6B7819937B55C8760C /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar" */; + buildConfigurationList = 193B5ADBE19033B315CCB5C55ABE0522 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar" */; buildPhases = ( - E554F405EEF5E215C189FCD81FD1336F /* Headers */, - 0A27C34AA951DA0FA805812E29F7017D /* Sources */, - 71AA829AB846AF235426263C08793A12 /* Frameworks */, - E67FAFF439A0CAB8E318F62FC87DB286 /* Resources */, + 0A1ADBD78E3F07C5417FE41171CD8FF6 /* Headers */, + 06B25A182DF89594FDC3926C80B381A8 /* Sources */, + B23C743B74BC309410049E6A67B6727B /* Frameworks */, + 9A3EA60CB43987637C055D11C587C53A /* Resources */, ); buildRules = ( ); dependencies = ( - 28BD5273C13642D7BA13101F0911C7E5 /* PBXTargetDependency */, - 48985134A9454E26DE54FC95B60DF4B6 /* PBXTargetDependency */, + C5286BCEE3FC137F2FA80EE171F418A3 /* PBXTargetDependency */, + 468FC4A3520CA783060276F1FA9E72D6 /* PBXTargetDependency */, ); name = IQKeyboardToolbar; productName = IQKeyboardToolbar; @@ -11592,7 +11915,7 @@ buildRules = ( ); dependencies = ( - C1934C77AE323069AA421850DE47831F /* PBXTargetDependency */, + 94C567E329025F741BC2E50B5EB8DD0F /* PBXTargetDependency */, ); name = IQKeyboardCore; productName = IQKeyboardCore; @@ -11619,7 +11942,7 @@ mainGroup = CF1408CF629C7361332E53B88F7BD30C; minimizedProjectReferenceProxies = 0; preferredProjectObjectVersion = 77; - productRefGroup = EFE5927F7E570D4A275ADA784B520553 /* Products */; + productRefGroup = F1F3AB582168068047CB22DFF189D8BC /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( @@ -11632,6 +11955,7 @@ 54F872FDE6669F86C58C8075211FE643 /* AMapSearch */, E95654B155D25890BE8E26081FCA8265 /* CocoaLumberjack */, 276021C4482165D46E0CBBEFB822FE95 /* CocoaLumberjack-CocoaLumberjackPrivacy */, + 4EB168A830EFA6136FA93357D1F1511A /* CocoaMQTT */, 212F79CE462FC723AF42979B57FBB8A6 /* Differentiator */, 997E783A70C18DC9BA830488608C03AA /* GTCommonSDK */, 17D542296AD0C26B1C5815268E5C6BF6 /* GYSDK */, @@ -11668,6 +11992,7 @@ 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */, B26054DF1DEA11585A231AF6D1D80D5E /* MJRefresh-MJRefresh.Privacy */, 17F9141D333DA1A7BE5937F227221070 /* Moya */, + B017CC75E2704C686AA0A2203247D9C7 /* MqttCocoaAsyncSocket */, 162E649F50FEC62B61BDD87D1BD422B4 /* ObjectMapper */, E68E71E462C154107C49C379E539826E /* ObjectMapper-Privacy */, 0028E46539689892CC926BB8D811EF54 /* OpenIMSDK */, @@ -11704,19 +12029,34 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - 04ADE83A29D4A315B8053EDDB2EE3ED3 /* Resources */ = { + 025054388155064A6AAAC9C02D172AE3 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - F7ED5E8C81EAD309CD59C56C8D880D70 /* PrivacyInfo.xcprivacy in Resources */, + 24E37A83108B1C7DCCCEEF273881A6A5 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 09D727F15F09039C2251695BA61D1B38 /* Resources */ = { + 034D494659D3083A2B910182B7C4CC5A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5028A68DA5ED8F5524765AA3A07B4007 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 048341746DD7E8EE813D71F10918B271 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FEBD6D063AA753708127F5CA20880175 /* IQKeyboardReturnManager-IQKeyboardReturnManager in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0887CC9B9397F86E33A2ABE14BA4BCB6 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - CFEC116AEDE187E92C82DDDB62782D15 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -11735,6 +12075,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 15CEE2FE6FB1E7CB15E47DC66C1120D4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 32E39C6EB2A04EC7B64B5E22567CD4B2 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 17250F6B5CED28AD551BAE70B5F6AC83 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11751,6 +12099,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 1D43E155665E7CE8DE218A6323D494AC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 820C82AC96BB3513DB5BC2D00ABDB5D4 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 1DEDF411E550D85A1218E1655456A9CD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11766,6 +12122,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 1FA8FA7F15BCC1A3F21958216CFFA096 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6C780F3D2186743F9015C2B1AA6ACD7D /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 208CA54F7A9B2296A366628AEDB45C82 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11774,27 +12138,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 23C2EC80D38A7F93DDB7710AC2ECB3A0 /* Resources */ = { + 24B5E37AE776DE36B4BF7C13BF3E3A3A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 35AA2D02723EC5CB583C6CC4B077EDA8 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 25617855BF8FBC9CC08A0545E3DF12ED /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 017B571D84F5F8CE98B17E0221D123EC /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 25EA31F5EDF6C6DA50358EA938087BA1 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9D02329C05D857C2BDD3089FB523862D /* RxSwift-RxSwift_Privacy in Resources */, + 634EDF12A3BC3BED298B2DC6E2A000D3 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -11805,14 +12153,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2EA41950ED522603811A5832D4613E29 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EE2CDA0384DB3DCB746E7BD58B7DF517 /* IQTextView-IQTextView in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 30325A914D6527C8259F46363D6D7531 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11821,14 +12161,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 33D6AC982E0314666BFDEAFAE9C482E6 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9FBC6A5DB0E8F77EC6EC2D6B98C81BD2 /* SDWebImage-SDWebImage in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 35D5CEF8B78A8BEEE66C16F2A6C3758E /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11836,6 +12168,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 37E2E612BC8369F3D0A183A3A7CB91F7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 89CC589A21EE67EE5A904D350EA92A11 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 3AE15AB47E6AB840630160F62F907577 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11844,11 +12184,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 43133C2CC5378A5FFDAFA8AC6FD32D21 /* Resources */ = { + 4A3538B2E3C9B71D22582C87C57E492B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - AAF1D044A1BFEB95FD91F7381DD2A5BA /* PrivacyInfo.xcprivacy in Resources */, + A3AE0AE632B34C3FED84760D5BD8502A /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -11861,6 +12201,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4B7442CE4009F1C6B46EB1E0F2FECA1B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ADEF5F16FEE9FCE6638ACC79A7ABF82A /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4F08CE07F9035A8581CF32E4F0FE860C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11876,14 +12224,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5B0176AE1F954EC48322EC9860C4E2AE /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B53D9A285B3015EA413FA05765041026 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 5F86C3D723237043C92A33E251A610E5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11908,59 +12248,65 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6821795096DB743034896811810EF1F9 /* Resources */ = { + 672EF01293BF244D8B92AEB579B4680C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1C2F9A89151532ECE06B20206EEACCE5 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager in Resources */, + 957C254909D1EAC5C8A62D6AA468F6BA /* RxSwift-RxSwift_Privacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 73A3F3E0D6A61129CCD3FAFB550211EA /* Resources */ = { + 6CFC083652B60F73E6AAEEDFBFCE3B47 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - BA2BF63F7311BB19D1584B948436162B /* IQTextInputViewNotification-IQTextInputViewNotification in Resources */, + F32563E5603EC6D414A5E77F4271074E /* IQKeyboardNotification-IQKeyboardNotification in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 73C89D1C9CF255EE8CE2D4284579C51E /* Resources */ = { + 6EAEA7B9CC2849523DAB27705D5AA08D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4638347B66B53464CBB12F41BE228CAD /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 76E0B413CC41F691A4ECFE72FB07F0F1 /* Resources */ = { + 72771E06402A203535CC6D24FF18A83C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 42F5E58DA58FC66B2E6048976760F1B4 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7ABA347695C011F034F6B84EDD41B548 /* Resources */ = { + 78F5FCFA47AABD26EA3584AD03F86FB7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 755D9CA16B51789C4BBEB377F7DE65FC /* PrivacyInfo.xcprivacy in Resources */, + A332C0B8334B1F42C06DA96434ADED1B /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 89AFF5D66BA54960CB1EA89A8ACFA33E /* Resources */ = { + 7944F12A776C87062880289B4AEF0345 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - D03BD90BE0856C6DAD452338935F1F39 /* IQKeyboardNotification-IQKeyboardNotification in Resources */, + DE61A14BAFA5A642937ED99AED8A3BF0 /* SDWebImage-SDWebImage in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8BA0C2630E6B153BC254A807D0295A6A /* Resources */ = { + 7E1420486D12C8D91F9F9E74C8E88A39 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 311B7A37EF82A4625087384B10A169D2 /* RxRelay-RxRelay_Privacy in Resources */, + C687C1E3C0B426A37D557A2C863E7EE9 /* RxRelay-RxRelay_Privacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97F1C6B10A94C792FC583039581CFEFB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0128B45833224DCB79FCE4EDBD501E43 /* IQTextInputViewNotification-IQTextInputViewNotification in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -11972,10 +12318,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 9AFD80F930BB91B2BACB91FBD00027E4 /* Resources */ = { + 9A3EA60CB43987637C055D11C587C53A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 0C5A1A53C0ED5FCC9083DF46369A0345 /* IQKeyboardToolbar-IQKeyboardToolbar in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9AB2255FB04B22BB592652DD75CA5531 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 55B11D2C4DDF75F774137344BF028AF6 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -11986,6 +12341,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 9DEC9B64BC463675671DFE0ED675F654 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DA2EA670260D4E9CCFC579A878E5B4ED /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A1E223F7D6E8144EF7EF5AA266EB8194 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -11993,26 +12356,57 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A23213350E6A48CA2BF78B674AD6BF82 /* Resources */ = { + A4A6D9B820D143969128BE3EA029773A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A8CC6628C022C383E8605C29ED144DB1 /* Resources */ = { + ABF2CC011CB4DC1485360C5CA8B27157 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 34A90FA56CA4751EE718D8FC7B800C52 /* PrivacyInfo.xcprivacy in Resources */, + 824D4C02186994BB3F19D1C2BB25BB8E /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - C27265C131AF96E9E3C2901A4926EB72 /* Resources */ = { + AE203C28EFDBF9F11219F7DE18744178 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 64AF3888E1DB7049200A3A5C28A26D9D /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B431ABB5D5BAE8BCCF5375BFBA981581 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D7047855F58ADD6E380310E6715EE862 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B9977E2DBE9FD6904FDEF4A2EE660825 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 4A91D925DDACC63C464346C6EB1CED3E /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BC38D500BCF8EA94CB65449B2D776BD7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5CAB0AB09FE4A8EF175E154539E3CC36 /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C06A6D6B134EC6BC0C829D6C2B6AB5B7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B7CBF06317A4D75FAB6B9A0E9463E6A0 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -12023,14 +12417,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C9D2BA17597BD9D10A8BACD6D530524E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 77EC03B0F9D4FF3F96A18E8B1B6235FE /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; CA079CE9479E3B6703DB3A0AFBD88DBE /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -12038,11 +12424,11 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CE0420E86FAC21EC82D24F8818797E90 /* Resources */ = { + CAAB5769287A1527C19DBC52617AB995 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - A0B9F8C32DCAE928C8485766B4CAB172 /* PrivacyInfo.xcprivacy in Resources */, + 39B43DD4DA5782166B4E6273C183E55A /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -12054,27 +12440,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D4DE6C908D537B3C4D297D6CFEC155C6 /* Resources */ = { + D1487D0AA735B6F409777D8C5BCBDD9D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FEA10484BCDCE23F63CDABE169AC7398 /* PrivacyInfo.xcprivacy in Resources */, + D8FE4883BF58160CC625580FE1FF2D8B /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - D5609EC3502F839C77C6DC1D58408E17 /* Resources */ = { + D81B899AB5D5FDFD30FF35B92088DBE2 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 02F77CF19A41C0AB44D560F038B17E47 /* IQKeyboardReturnManager-IQKeyboardReturnManager in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D7646EAD557C397466E006267CDFCA14 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D2134585517FBCB5CD2463B4DBEE8E84 /* PrivacyInfo.xcprivacy in Resources */, + AB3D4041F79C0E504824AE124753F01D /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -12085,14 +12463,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DB978B93646DEAB6DFF5ADC3AF6CB41B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4AEB94C02388DC97E65AEAF58412F14B /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; DD391D2DE12A3727FCFFAF52F3E35F8C /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -12100,19 +12470,27 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DDF3690F444FABE35265342ECB139433 /* Resources */ = { + E0124A1E59B0E67FB5A1D2F394D1A689 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 706FFD08EBEB41ECFBD99F46227A31B9 /* PrivacyInfo.xcprivacy in Resources */, + 3CA8AA8FFEC560A25DFD5EBFCF187AFC /* IQTextView-IQTextView in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E052CE5A875358208B4E3DFC8DE00B32 /* Resources */ = { + E242152B887656FEB7CE67250DBBDD53 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 75B018D32C8A344D1CFDE4B192378DC5 /* PrivacyInfo.xcprivacy in Resources */, + D1E29D4E3A8F4E6EA0802C90B0729BDE /* PrivacyInfo.xcprivacy in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E2AE0D864B9ED466159D8FD87FB07DA7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40B6C52B85E307B53FF06DF1ECD6D046 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -12123,18 +12501,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E67FAFF439A0CAB8E318F62FC87DB286 /* Resources */ = { + E571BE96E47797830317E0AB23389499 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 39CD61C38849FB1D75225ECB96384C43 /* IQKeyboardToolbar-IQKeyboardToolbar in Resources */, + 6B469D8584D94A1E7A2B749689A56555 /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E9E84DCA31807AF25979678C55CAA0C0 /* Resources */ = { + E8EE26654911879E9E0B76323B6AD16F /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 88F4CA6C1D8268726FB5EAFA1B8B60DB /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -12146,22 +12525,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - EBF88CC2A0107A48F104387FBED6454C /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BFEA22DAE56385193B4231D5761611F /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EC406E27915FD3A58994BC8134D8E022 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 8427A2B8905686251B6DEC1152C41087 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; ECD6B9A8E754DF142B323DF2D7E0D112 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -12169,22 +12532,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - EDB32818FC10E1AC64CBECAD2FB1BEC5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 76C8BE0DB8DE9BFD4D551465F246B2D5 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - F0684009A025997176847D4F180AFBBE /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0A064677F67C9C59B3EC08EA2C6882C0 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; F3CD92FF3F32F7654415A0EDC22AE220 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -12192,14 +12539,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - F82883CC8E1C24098B8B224C4243A017 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - F5695140D67045D5A1716FA7724E7A3F /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; FCBF93A965DD17FF24BCB8637B2F2407 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -12220,6 +12559,23 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 326D11B4BB33F302B3E3C1BBC9BB42AD /* [CP] Copy XCFrameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/OpenIMSDKCore/OpenIMSDKCore-xcframeworks-input-files.xcfilelist", + ); + name = "[CP] Copy XCFrameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/OpenIMSDKCore/OpenIMSDKCore-xcframeworks-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/OpenIMSDKCore/OpenIMSDKCore-xcframeworks.sh\"\n"; + showEnvVarsInLog = 0; + }; 6C1F0AE00B88ED4F09755948A825C8EB /* [CP] Copy XCFrameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -12254,23 +12610,6 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/GYSDK/GYSDK-xcframeworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9C3AD94056D908812BA5E12CFF63EDC3 /* [CP] Copy XCFrameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/OpenIMSDKCore/OpenIMSDKCore-xcframeworks-input-files.xcfilelist", - ); - name = "[CP] Copy XCFrameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/OpenIMSDKCore/OpenIMSDKCore-xcframeworks-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/OpenIMSDKCore/OpenIMSDKCore-xcframeworks.sh\"\n"; - showEnvVarsInLog = 0; - }; BFD4675DECD846713F87D2380D482371 /* [CP] Copy XCFrameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -12308,6 +12647,19 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 01C24295C8287BE4F6E5F15479124477 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E31EEFA075313CAF17BE7EB83C92FA41 /* BehaviorRelay.swift in Sources */, + CB1D9D0547B7C269B858D5741FFA24B5 /* Observable+Bind.swift in Sources */, + 19093EF705B706BEFB97DE1C2BD8E609 /* PublishRelay.swift in Sources */, + BE587FAA51EAB21A65120F5FBB61AAB3 /* ReplayRelay.swift in Sources */, + F2BCFFCCFDC0882E51E5CD3B1FC700C6 /* RxRelay-dummy.m in Sources */, + 377C075A77ADE633702916D401435B7C /* Utils.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 03543E76C8CE678CE85149A3DB845E85 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -12328,10 +12680,21 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 07347DABC6C087FC78C6EA216F81E8EA /* Sources */ = { + 06B25A182DF89594FDC3926C80B381A8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 9735FA2F9E5D53A10450D1BAEFA7612F /* IQBarButtonItem.swift in Sources */, + 7B16DF8E517A9D80875DDD95B4F57C12 /* IQBarButtonItemConfiguration.swift in Sources */, + 5CF988F49F44624A4A8B02BF1CCE4BBF /* IQInvocation.swift in Sources */, + D232B04D611FA4C1975092C04E45C9D0 /* IQKeyboardToolbar.swift in Sources */, + 6D003B1C03E4B62C6AC86FB2BB8F725E /* IQKeyboardToolbar-dummy.m in Sources */, + 9720D8169C83739350D3580924FFCB3D /* IQKeyboardToolbarPlaceholderConfiguration.swift in Sources */, + A3E8A074E30BA84E989760E577267356 /* IQPlaceholderable.swift in Sources */, + 35D4EE5441CE7FFC75C0138C0E6B5E81 /* IQTitleBarButtonItem.swift in Sources */, + 5D2516D112A1602C01C94A875FF3C165 /* UIView+IQKeyboardExtension.swift in Sources */, + 8668F10311E0363DC66344D807FE3A5F /* UIView+IQKeyboardExtensionDeprecated.swift in Sources */, + 632D8A65110832A6FB8BAA12CBEDD566 /* UIView+IQKeyboardExtensionObjc.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -12353,21 +12716,17 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 0A27C34AA951DA0FA805812E29F7017D /* Sources */ = { + 097801BCCC68798C07B247CB7D9C8C10 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 09EACC9E3A742CD64040127B378ACB39 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9A748E06A1A0D4590C268AE3517D906F /* IQBarButtonItem.swift in Sources */, - 1DCE04A9FCE27FC61473B81D02AEAC8E /* IQBarButtonItemConfiguration.swift in Sources */, - CF1EC62E8A77D354F29EE22D25829C16 /* IQInvocation.swift in Sources */, - 126D18E956154F413FA6C9945824F505 /* IQKeyboardToolbar.swift in Sources */, - BA630891DEED7C86255D158198B277A0 /* IQKeyboardToolbar-dummy.m in Sources */, - 3E283486A950267772D597343238DC75 /* IQKeyboardToolbarPlaceholderConfiguration.swift in Sources */, - 0E61B65A6B4B7D35361B09DD9328F462 /* IQPlaceholderable.swift in Sources */, - 58627A8298D25CD81FCCDEDC8D7773E5 /* IQTitleBarButtonItem.swift in Sources */, - C5F4341339351B5E870AECED2E537EE3 /* UIView+IQKeyboardExtension.swift in Sources */, - 1CD64DB96914999F5DB0A8E5156C82EB /* UIView+IQKeyboardExtensionDeprecated.swift in Sources */, - A24744A0D592244A51AE4FD145482C24 /* UIView+IQKeyboardExtensionObjc.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -12484,21 +12843,34 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 0D1CF396363093333F5FEE0FC1D941D6 /* Sources */ = { + 1276B092A22EE1538E4B050B85645B70 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 0E510E418804381A0F002D582B2D688C /* Sources */ = { + 13FA7BFD74C2C193D076A6264259CE14 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 59D8740DE7EA85A7E5950D8A4B43AA74 /* Array+Sort.swift in Sources */, + 9010DB8F0F66A0EEB1A7DB5C96611654 /* IQDeepResponderContainerView.swift in Sources */, + 967D69215A506E8003D53AB825DBF8B1 /* IQKeyboardToolbarConfiguration.swift in Sources */, + 377DED16F7843193371F3FAAC29D5346 /* IQKeyboardToolbarConstants.swift in Sources */, + 21E2F85CE870CA57AF08B557717E2588 /* IQKeyboardToolbarManager.swift in Sources */, + B3563172CE8252B7C899749ADDFAEA75 /* IQKeyboardToolbarManager+Action.swift in Sources */, + 178566C64EBE62048DEC6A78AD16FA25 /* IQKeyboardToolbarManager+Debug.swift in Sources */, + F810AE3623A69FCCC158A5C1ACBF6439 /* IQKeyboardToolbarManager+Deprecated.swift in Sources */, + B79256A42976EC65C45648B7AE06478C /* IQKeyboardToolbarManager+Internal.swift in Sources */, + 3B14F5D1436DC56A3F2D4A4ACBEA8197 /* IQKeyboardToolbarManager+Toolbar.swift in Sources */, + 25CCA7DB92870A0E9B9DB81FE7CC635B /* IQKeyboardToolbarManager-dummy.m in Sources */, + EB61F13974AEAAE5ACB6CC669D8F6D2A /* UIView+Responders.swift in Sources */, + 64CC18C8B38278628CCA1B8D4E0631DE /* UIView+RespondersObjc.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 11A34DDE224D2836079EABADCD8A8E04 /* Sources */ = { + 16593F496A72F1F2DCBBDD63B5268EEC /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -12534,13 +12906,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 25FB831060853C6D988172BD51F4B7DD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 278C7A12D835C4C502449CF69C17FAFD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -12604,6 +12969,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 2941C4E22687863CE625E6A88386A22A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 29A404AEBCB50A3F5BB3DC929EC993B2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -12654,35 +13026,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 347E0C664DDF370093C3E30925757EC8 /* Sources */ = { + 3B52A5A8596F88A8BFD84799F2875071 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 39049C2CAC5FC1ABE0794D667C168BDF /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 39067DE68C862D6B997E0441CCF512B0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 39C0DE2BF57DC4E328FDDA370CDB05D2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3D5797597F20D575447F0E4DBF2DEE3B /* Sources */ = { + 3E86D5855CF181CDB972E342F4E02FFE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -12764,14 +13115,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 413BD44DB0856D8E0358F350768D70B5 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4156DE582C2412C01D011A772DA02929 /* Sources */ = { + 46B69E7E6B89A55EF747BFA0FC4F54E9 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -12819,6 +13163,28 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 4913C2F4121E1C16187D360E215881B2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1ECC492499B186A4611E3D985575810D /* IQTextInputViewInfo.swift in Sources */, + FAF3BC700D71378A541CE1492F3EC355 /* IQTextInputViewNotification.swift in Sources */, + B714E9245E38008BAE86E8DCE9852153 /* IQTextInputViewNotification-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4C6D39C725B13E768A35C11599741CC9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DAE3C50192F194E9C9261FE8E2D6747B /* IQKeyboardReturnManager.swift in Sources */, + A105754189EF99CFFEDEA8CCBE60D0C9 /* IQKeyboardReturnManager+UITextFieldDelegate.swift in Sources */, + 4A63127B68DCC325FBEBB78896FAE6F9 /* IQKeyboardReturnManager+UITextViewDelegate.swift in Sources */, + 5CBD3F3DBA3661CCDD103364E799A352 /* IQKeyboardReturnManager-dummy.m in Sources */, + 74304A8524CDF980583FB8550F47990C /* IQTextInputViewInfoModel.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 4E5AC6866184730E513746251F871B4D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -13106,193 +13472,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 4F27EA5776A48D0363ACB688FFD4C68A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0F3F1ABE78283E64572B46B6F2128961 /* IQTextInputViewInfo.swift in Sources */, - E56D42E6D9C9787C503C0D041B375E64 /* IQTextInputViewNotification.swift in Sources */, - 1F39EA6FC15C297E962E3F767D38B951 /* IQTextInputViewNotification-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 50ABD95842350CD3501B3D3065FAED26 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - AA94FD545FBCB2D0659264C82CA6858B /* AddRef.swift in Sources */, - 9BA535D00043A9D52063EFEB813E6278 /* Amb.swift in Sources */, - 8D416D8997FCE1C4EAAD230D39B817D6 /* AnonymousDisposable.swift in Sources */, - CEE6D85668589F0B8602190856BE1C59 /* AnonymousObserver.swift in Sources */, - 60FF5C656C2BF52195021D00816891E1 /* AnyObserver.swift in Sources */, - CA535DB1DBA1F7EE58FEC1A282360FF8 /* AsMaybe.swift in Sources */, - 90A5D35C6A35FE8B6FB2FAFAB8B8AEC0 /* AsSingle.swift in Sources */, - FE49F3F733B669138D1CF38BCD45AD15 /* AsyncLock.swift in Sources */, - B66E00F5B93F21B87D00BBFFED5D1E14 /* AsyncSubject.swift in Sources */, - 9ED92DDFDED091E3FB77221273D5F4E3 /* AtomicInt.swift in Sources */, - D60D3D1BA7E494175E719D674E43B0AD /* Bag.swift in Sources */, - 7EBDC64932A33B97DDA070B75EB2B6CA /* Bag+Rx.swift in Sources */, - B563C32EF8CF73F290ED561473CC681B /* BehaviorSubject.swift in Sources */, - FF13DFF525578FD22F7F4A077888317D /* BinaryDisposable.swift in Sources */, - 887ADED16D6F8697D2F654DBD6A24604 /* Binder.swift in Sources */, - 0D416C0305A0EC46EA7B9D44984DD1C1 /* BooleanDisposable.swift in Sources */, - 7B5D343693DDF40635B24CC18C1C1DE7 /* Buffer.swift in Sources */, - 3BFCE80D67EC884DB79E823496585DE6 /* Cancelable.swift in Sources */, - 4B7CDFB801A015F02E417F172C231CE9 /* Catch.swift in Sources */, - 736ED5555F3EB058898EDDA945932D0A /* CombineLatest.swift in Sources */, - 6EDA5B695F14F2B532938BE2674D05E8 /* CombineLatest+arity.swift in Sources */, - B7B1143A40E02A017FC3A5337E196138 /* CombineLatest+Collection.swift in Sources */, - CA140EEDBA04CCD8B9024CEC07C84A37 /* CompactMap.swift in Sources */, - 60981496CF43E012B912C4B93587F430 /* Completable.swift in Sources */, - AA01A57B3D11D35C946824DC7E089F2F /* Completable+AndThen.swift in Sources */, - 7BC2B90C110F500D157D106CC41446A8 /* CompositeDisposable.swift in Sources */, - AB132905D478C48DEBA0FCB05051BCDB /* Concat.swift in Sources */, - 5E763B6068F37F4DB3580ECDF4389146 /* ConcurrentDispatchQueueScheduler.swift in Sources */, - CE60029474DA7D27FF1CA1EAD1548E47 /* ConcurrentMainScheduler.swift in Sources */, - 1C830DDC3D4ED10535E1D569D66A6CEC /* ConnectableObservableType.swift in Sources */, - AB4DDF5983551D7BAD74FE07187972F6 /* Create.swift in Sources */, - 6B2EE580E51F236995465C1FD8569D3B /* CurrentThreadScheduler.swift in Sources */, - 27485CB5DD472CBEDABEF78CF9DD36E3 /* Date+Dispatch.swift in Sources */, - F565B4504B8C8973E4601219F9ADF461 /* Debounce.swift in Sources */, - B67EF56AA99C48A55752847C721D65F1 /* Debug.swift in Sources */, - E8BD9A6BB79FF25464A9330F76C98A16 /* Decode.swift in Sources */, - CD137CB9D84195D6986D97B2534AE8FF /* DefaultIfEmpty.swift in Sources */, - 234F0B1EC64D7CDEB732BDA103C452DE /* Deferred.swift in Sources */, - DEC54B892123D7FF8A5149EB54FC4BC8 /* Delay.swift in Sources */, - 33D7D43D9779D06D5F55880A00A62E63 /* DelaySubscription.swift in Sources */, - F4F179A948F1A7BA84BD8ED92E695A1C /* Dematerialize.swift in Sources */, - F8307D435C630DB434B2E8A74111B948 /* DispatchQueue+Extensions.swift in Sources */, - 639D0DB05E52760FCACD626490DEEA46 /* DispatchQueueConfiguration.swift in Sources */, - 7A070D739AE17B0FC405F435CECE8D21 /* Disposable.swift in Sources */, - 3B45281BBD9C7D268CE36BC6684CE690 /* Disposables.swift in Sources */, - 984AE6A5A39C7F95738C1D95CCABB10B /* DisposeBag.swift in Sources */, - 923384554D67DB88905E486CC081620D /* DisposeBase.swift in Sources */, - 7DF2E0F22556196056EAAF14AB93CC8D /* DistinctUntilChanged.swift in Sources */, - 4E501359489F2069549B20BD94BFA61C /* Do.swift in Sources */, - BE166E4649CBB47AD13D7ECE120B756C /* ElementAt.swift in Sources */, - BCDC570FFC8ECF182211F38D61380307 /* Empty.swift in Sources */, - AA1847AA96F3BD93538769D1690A750C /* Enumerated.swift in Sources */, - 092C1D4CE48DA5E626971772CA2B63FA /* Error.swift in Sources */, - 466F34329180AB2DF5EFF9BCB5B918FE /* Errors.swift in Sources */, - F1305B8EDA84194160EE0DEF96C34D71 /* Event.swift in Sources */, - 1407DDEFD5573025A5DCF3952A155A14 /* Filter.swift in Sources */, - B25C3DEE88FEC6E44A1FEF8F655130A4 /* First.swift in Sources */, - B6C6293CADE3F065D6EFDBAFEDE7668B /* Generate.swift in Sources */, - 30B4C66BD3BF1A31240A34D540BB1362 /* GroupBy.swift in Sources */, - CCCF77F411C28C0C0D8B6624E4ED184B /* GroupedObservable.swift in Sources */, - A3B37F7F50CB1D300D0B4F6210406988 /* HistoricalScheduler.swift in Sources */, - 3A52295413184C31AEA430BE39BFC491 /* HistoricalSchedulerTimeConverter.swift in Sources */, - F8E8E69B9793E023EE993E71643F6071 /* ImmediateSchedulerType.swift in Sources */, - AE89340D37520E24ED75F2F2201263A4 /* Infallible.swift in Sources */, - 244C78EA225D2E2BD955913E5D38DBA5 /* Infallible+CombineLatest+arity.swift in Sources */, - 6DD7F06F6985BCC0F95AEA9472F1A304 /* Infallible+CombineLatest+Collection.swift in Sources */, - E533265B7ABFF5AB2789FC86D9D196FB /* Infallible+Concurrency.swift in Sources */, - 5063AA402AA20EC46563AE952E480024 /* Infallible+Create.swift in Sources */, - F6DF025C22FF018660D118246782C306 /* Infallible+Debug.swift in Sources */, - 07B21EEE77A36892011309491EB2EC0D /* Infallible+Operators.swift in Sources */, - EF9E5345DC68B0E0FC147DF15276541A /* Infallible+Zip+arity.swift in Sources */, - BEE2FE4E2322B71556DF0C94E641E84B /* InfiniteSequence.swift in Sources */, - 61FD73CF8706BCE3BA5A3A357A15C35A /* InvocableScheduledItem.swift in Sources */, - 373D6A9E56AA0F29E9366CBF901182BD /* InvocableType.swift in Sources */, - 192D402166F9E726D8BFFDAB9F7A1686 /* Just.swift in Sources */, - 40C349CDD3EC5451B78A19F15951D94B /* Lock.swift in Sources */, - EC36C29D705F45E956A16F0E3C8A0D2E /* LockOwnerType.swift in Sources */, - 03760AC656BC11C388DB4824EAF3EFF8 /* MainScheduler.swift in Sources */, - ECCA7267997F18C0714C7632CC54AA1B /* Map.swift in Sources */, - CC9889C11425435533883AC0C244153A /* Materialize.swift in Sources */, - 994DF47F20CED7B2C71E7F748972EC3C /* Maybe.swift in Sources */, - AAD885901A99D6AE01C8DBDB90C5C979 /* Merge.swift in Sources */, - D02739628E3C87FA50F6BC94BD08C6DD /* Multicast.swift in Sources */, - 5B9D821848443B273832F8F3FFFB6EF0 /* Never.swift in Sources */, - 84B31F08AD0AF1654F0FD7EB6D1E4F7A /* NopDisposable.swift in Sources */, - CB16D0B14DC2C1B1600F20B5AA3A7249 /* Observable.swift in Sources */, - B3EC3F7A87EF3C63DE72D179C82CBA3B /* Observable+Concurrency.swift in Sources */, - 08A74961FEEC9A18DF39B2D15B0FCA03 /* ObservableConvertibleType.swift in Sources */, - 66C2FC73A91E265FA5A09F2D0B99EAF0 /* ObservableConvertibleType+Infallible.swift in Sources */, - C06E2597B414ABD8F769C8BE7E132DF3 /* ObservableType.swift in Sources */, - 2865DC1A7B133D7BE1C40975DFFA1D9D /* ObservableType+Extensions.swift in Sources */, - 97BA4EACB3823937158991C170924719 /* ObservableType+PrimitiveSequence.swift in Sources */, - E526D55AE9365CCCFBBE86334C17765F /* ObserveOn.swift in Sources */, - B29AC86CA5B5F21AB3E41AA9B62E712D /* ObserverBase.swift in Sources */, - 48EF9CCCC09C2E3B18C2F501CEBD51CE /* ObserverType.swift in Sources */, - B81BDE79894EC150074DDE2B45B32093 /* OperationQueueScheduler.swift in Sources */, - 29BBECE17A90C0CE055D94D4C7DC96A1 /* Optional.swift in Sources */, - 06BF9E1DE98B5299648D75DE99246159 /* Platform.Darwin.swift in Sources */, - 5660010A63B9E5190FB3BA0723C83E79 /* Platform.Linux.swift in Sources */, - 3CBACCA82BA8E1759650E3B16B528644 /* PrimitiveSequence.swift in Sources */, - 1A98401B81923265F3F2F1533C629044 /* PrimitiveSequence+Concurrency.swift in Sources */, - 0A7047F9F316230DC3D91A5506FCC0CA /* PrimitiveSequence+Zip+arity.swift in Sources */, - 5690E7733755EF537CD50961C703850B /* PriorityQueue.swift in Sources */, - 1FAC5166DD3165E52DAACE50A194AE9E /* Producer.swift in Sources */, - 3CEE5E31CF080561F8A0089BBEABB799 /* PublishSubject.swift in Sources */, - 1CBC86CE3D92034C0EFCB7E717132C29 /* Queue.swift in Sources */, - 1F78DE9E7ACC9AC18383BDA3886A4320 /* Range.swift in Sources */, - A44ED4475C4343EE970814D8508A6490 /* Reactive.swift in Sources */, - 0543AA6007B40C505F972E8DFD40D358 /* RecursiveLock.swift in Sources */, - B048B31836F1E5A82AE520ADD74580AB /* RecursiveScheduler.swift in Sources */, - 3575A2E218096B1FD9A1B2B0C6DD40D6 /* Reduce.swift in Sources */, - D2D85A3965444DE82DFACDAF2DC42D19 /* RefCountDisposable.swift in Sources */, - BBBCA687743C57954AF34D4FA17B0CDD /* Repeat.swift in Sources */, - FB0003B2A4B996A99C9116360F2BEE27 /* ReplaySubject.swift in Sources */, - A75A9CEA5A4788D0651D7EF895679CFD /* RetryWhen.swift in Sources */, - 18B278264A1FE87940BBC5A97028513D /* Rx.swift in Sources */, - 58B0006E1FCE48DFC522984B42C5DCF4 /* RxMutableBox.swift in Sources */, - 3EE9B9682282E58E0A840A84AB68748A /* RxSwift-dummy.m in Sources */, - EB108AC1D4E177FFF0A53ED3DEA2E6C9 /* Sample.swift in Sources */, - F221720C4421A60C3DEF3A92BF089996 /* Scan.swift in Sources */, - 4196A92234E9891D925A38B979D302E2 /* ScheduledDisposable.swift in Sources */, - 7C25A19B6C5DFE20A5A04612709550F7 /* ScheduledItem.swift in Sources */, - 71B9937590A242996BBC55C011041FD7 /* ScheduledItemType.swift in Sources */, - 37C01DDF19DA22727830A62998953BBB /* SchedulerServices+Emulation.swift in Sources */, - A4D7ED63C57E58316780D9AC735C680F /* SchedulerType.swift in Sources */, - 6CB9E2AE85D2F366B426D4BE356944DA /* Sequence.swift in Sources */, - 53B548F8E57FD5BE02ED598FCA44BC30 /* SerialDispatchQueueScheduler.swift in Sources */, - 21F6EE314B4240BC580A3DC7A29F23DB /* SerialDisposable.swift in Sources */, - E54A7350798B1D45616E86D64DCAD262 /* ShareReplayScope.swift in Sources */, - 400A9256A6CFE77C0378869D44825DAD /* Single.swift in Sources */, - 80AF897681B86918BCC4B85FD2676530 /* SingleAssignmentDisposable.swift in Sources */, - FE26082B37D32FCCC7AF3B02DF050AE2 /* SingleAsync.swift in Sources */, - 38755BDFD20CBF8C82F5380B3FFA9249 /* Sink.swift in Sources */, - 2DEE9D67E280C52847E66A1B4431FED7 /* Skip.swift in Sources */, - BD0554EA3BE2DF1255C6EE1ABFE654CE /* SkipUntil.swift in Sources */, - ADD657BDD83FC569FE0749205901878B /* SkipWhile.swift in Sources */, - A4F402526B013CC1222E2324F7AB2DFB /* StartWith.swift in Sources */, - CA1CCD9DEB99136EDB8B3D33285BC802 /* SubjectType.swift in Sources */, - 31B55ABBC6F62FCE46A58D54F2298062 /* SubscribeOn.swift in Sources */, - CDD07E44801C6B18EC5FA656DE04091E /* SubscriptionDisposable.swift in Sources */, - 9E43D3C06CF64AEB62E7122847C15FAD /* SwiftSupport.swift in Sources */, - FD6A4D15488DF30A0CEA0373B9DE595A /* Switch.swift in Sources */, - F94434836BDCB67E50B82B9C0650D230 /* SwitchIfEmpty.swift in Sources */, - F652E53724373209F47D3B4A7D2A6556 /* SynchronizedDisposeType.swift in Sources */, - D75BC36D268EC4D6E1493FC5B6E5F329 /* SynchronizedOnType.swift in Sources */, - 89B8DCB992493D64C31D0F2319C85CF2 /* SynchronizedUnsubscribeType.swift in Sources */, - 5C8FCF7192997E76A80BE80032A6736D /* TailRecursiveSink.swift in Sources */, - 3046A808080A7F90F3D3629B3CDCDA32 /* Take.swift in Sources */, - 16193C8B78D3C682E0C526D1DB17AD35 /* TakeLast.swift in Sources */, - B863E4ECC1232754CF9ADC11898A8259 /* TakeWithPredicate.swift in Sources */, - 4830383EDD889CDDDC68FFC53004F690 /* Throttle.swift in Sources */, - 7E478F8BBF9619E0B9E7B6F12A292C27 /* Timeout.swift in Sources */, - DD907809DEEA2C3EAC6FA3F150AB9893 /* Timer.swift in Sources */, - 38C2517BC6611A88A77F119A3753513E /* ToArray.swift in Sources */, - 7A5F65ACADE9EDAD0E8D456AF59DB812 /* Using.swift in Sources */, - 4179AB2B4A01BF417368F2BBADAAB744 /* VirtualTimeConverterType.swift in Sources */, - 49197254BF19DFC61F1B0B0D870092F2 /* VirtualTimeScheduler.swift in Sources */, - DF4BD662CEA133642C134CD18C65CD4F /* Window.swift in Sources */, - 254CE2A3C57933C285803C1241806765 /* WithLatestFrom.swift in Sources */, - E00FCA3D1D8EB62A399FC73F0095E0E8 /* WithUnretained.swift in Sources */, - 9983957076323822F4C0A8EA4CF352DE /* Zip.swift in Sources */, - 4A48CC2202F5719ADA9F539879538771 /* Zip+arity.swift in Sources */, - 691D7ABB712F2F5760FE1544D911B304 /* Zip+Collection.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 50B57A4B4C432838C27154E4075204E2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 54A12BF6EE4CD8A352F6AFD2C2786339 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -13302,31 +13481,23 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5617F9353C3A30E22C044791BBAADAB3 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 55A43F0D93A06F06A446F0053DCD085A /* Pods-QuickLocation-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5657F5827C3348B57780F212BA7104ED /* Sources */ = { + 575A5516E291354D4BDEC321451B2DF3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - 5D7BB7090ECA84FF50BF60E73FC9B09F /* Sources */ = { + 587DD1DB8F7D5493853619236C13DE5D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 457561605827D2143B4C09C6D6974542 /* BehaviorRelay.swift in Sources */, - A5FD5A91303A2FB61CC314DEBF3CB08A /* Observable+Bind.swift in Sources */, - 616EE17920C59DD34B65912B4763C7A1 /* PublishRelay.swift in Sources */, - E04CDA04CEF8860A01D1C3FA4D3B96DB /* ReplayRelay.swift in Sources */, - FF2F4C8A0736554E74D67A727B7D7671 /* RxRelay-dummy.m in Sources */, - 780F45F347C399D58601EF11FA024C98 /* Utils.swift in Sources */, + FA912288DF25A87FEE76249BA2035A07 /* YYAnimatedImageView.m in Sources */, + 6C2B82F5D82AF2E6A5AE58529158BB1C /* YYFrameImage.m in Sources */, + CB5CD16304F7DFDE9E0F86D62CD707F0 /* YYImage.m in Sources */, + 30C51CA989B9666063FE1095581E93DE /* YYImage-dummy.m in Sources */, + B5467510620EC8C411023B2C49B040BD /* YYImageCoder.m in Sources */, + 3072B174CD0EE983BFECE8586173F397 /* YYSpriteSheetImage.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -13360,7 +13531,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6EB6B062252682B121E3120653AF2BC7 /* Sources */ = { + 70BE4224601F75D96D377EDDB8084DAF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 71692A15AD05B88CD11C28F6DA73CF9B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -13378,28 +13556,190 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 77B92F3E962AB128EA18C60F9CB941BA /* Sources */ = { + 7D1E213D772FF9DBC51F426D48BF0C22 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BE05FF3437D5037E064F74C06AF9299C /* IQKeyboardReturnManager.swift in Sources */, - 523705FBA900D0965981AD85D57B2858 /* IQKeyboardReturnManager+UITextFieldDelegate.swift in Sources */, - 39FBB955C79378BA3C17AF80374A019F /* IQKeyboardReturnManager+UITextViewDelegate.swift in Sources */, - DB7A88426F3F939727266BFD3AC87283 /* IQKeyboardReturnManager-dummy.m in Sources */, - 8E563B48B53CF54E65371203515A0D66 /* IQTextInputViewInfoModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 81F03CCECDA1FC18435042180C600368 /* Sources */ = { + 7E26ECFCDA20DC6B3FC07CDBEDF6A947 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B933657988FFD0044335D648936B6B3E /* YYAnimatedImageView.m in Sources */, - B7C4190C4B24D435ACDFF3495EBA2DC6 /* YYFrameImage.m in Sources */, - 2C0F8A44FFB8F67FDAB18E7E90950EC1 /* YYImage.m in Sources */, - 6A5917F884AA23BE533264DC2B0DEB55 /* YYImage-dummy.m in Sources */, - B5A43FD19F22727998A5D4EC2D146DAE /* YYImageCoder.m in Sources */, - 4C59782D5A1EDFE15AB92763993FD942 /* YYSpriteSheetImage.m in Sources */, + 5E0A53FFAB0FDFB5668859F6A2819F5D /* MGCDAsyncSocket.m in Sources */, + 5C57EE908FCC18769EBAF8A902DB2AEE /* MGCDAsyncUdpSocket.m in Sources */, + 1844AC03F7E1C318AC87DC505B3BE062 /* MqttCocoaAsyncSocket-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 872A47048D204F3DC75A059AD43414CC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 86942D1BF6EBC7C2BA9EFB492E6AB186 /* AddRef.swift in Sources */, + 36EE04E8AA35610C63F5EF4B37C78E82 /* Amb.swift in Sources */, + 419E5FDF85188A7D1F31AF680884A125 /* AnonymousDisposable.swift in Sources */, + AB9078825EF42F1CF8E1865144AB3C09 /* AnonymousObserver.swift in Sources */, + A9506074DCA6117AAC10CCF38810EE3A /* AnyObserver.swift in Sources */, + D1BAD9273AE3CBA8BE215DD234ED0641 /* AsMaybe.swift in Sources */, + 3184604BA228388F115333291336137C /* AsSingle.swift in Sources */, + 9B10D0EE1A1B362C382D7C32790D5F2C /* AsyncLock.swift in Sources */, + EE802C27C64F90E925967D78FF074AE4 /* AsyncSubject.swift in Sources */, + F829965604C3B309269C43945D01AE6F /* AtomicInt.swift in Sources */, + DF8AE419C1126BF0783268F549EEBF29 /* Bag.swift in Sources */, + BB6E8486F92FCD3E177730B8E01D0BDF /* Bag+Rx.swift in Sources */, + 2DD150D77A9745899543093C3896972D /* BehaviorSubject.swift in Sources */, + 2F23C06874D2AAB852A93809AB216A24 /* BinaryDisposable.swift in Sources */, + E24632DE716A10A6D99CFA1A4F3E2FE3 /* Binder.swift in Sources */, + B77BBF03AA212B2E36FF222796FD5A65 /* BooleanDisposable.swift in Sources */, + 1FB7FE3D859627710638E47EAC61C2DD /* Buffer.swift in Sources */, + 838063855EB99B02E184DC49A4D1A2DB /* Cancelable.swift in Sources */, + 5F7A8BF1C3C7E701CA9E83A6A749E804 /* Catch.swift in Sources */, + 64B7F47DDA02615D2E0C7A26DD6761C9 /* CombineLatest.swift in Sources */, + 8584F672BB094EC9E50AFB6E4C8A686C /* CombineLatest+arity.swift in Sources */, + D2F85BB681E8EF92A4CCB24E4DF6A99C /* CombineLatest+Collection.swift in Sources */, + CC705BAEC85C20B0CEA4A15B6BB39DFB /* CompactMap.swift in Sources */, + 0C35E7376EC7CB317E82802F199A52C8 /* Completable.swift in Sources */, + 9321C9FC6EF91BA1E6DF974D0D8838CA /* Completable+AndThen.swift in Sources */, + A0DC59D2A58D5BD6F3700FFE3FC295A6 /* CompositeDisposable.swift in Sources */, + C2FDEABCE0D089AF0E4EC0875D998E66 /* Concat.swift in Sources */, + 6E76E5E1CDE5A04EAEB9F75A173F24F9 /* ConcurrentDispatchQueueScheduler.swift in Sources */, + 80FF01F0BA48E8E5FAA6413ACEE166DD /* ConcurrentMainScheduler.swift in Sources */, + 5BBD386F448E2E822F0604BF7102FE17 /* ConnectableObservableType.swift in Sources */, + 04B759CD5C2C5F25319F9C5E8C2482F6 /* Create.swift in Sources */, + FB4D9D000306DEEF1D458A163B5F2158 /* CurrentThreadScheduler.swift in Sources */, + 86130A7651FCB9F51CA1A66E9DD48D34 /* Date+Dispatch.swift in Sources */, + 3F0A66D0F2A42BDE21605CE2F9A8145A /* Debounce.swift in Sources */, + 4F2C790A0B9ACC95B86C6639E6C5AF4E /* Debug.swift in Sources */, + D82846F53EF89ECC62238779ED046B72 /* Decode.swift in Sources */, + C9CE59309EABFDA10F864CDBB91465F1 /* DefaultIfEmpty.swift in Sources */, + 58F7ADFE261DB23CBC1E99AC29AB8A0A /* Deferred.swift in Sources */, + 3FB47B714578990577C9B1CC85DC0D0C /* Delay.swift in Sources */, + A256118BC48CDEE51725AE00BA7352ED /* DelaySubscription.swift in Sources */, + 91057BB30A6A21F670FACC5D492C2447 /* Dematerialize.swift in Sources */, + 25EBA3F34C0061382B844D4A9E3B464D /* DispatchQueue+Extensions.swift in Sources */, + 692B37D44CF7B495DD9E1FE3177692D3 /* DispatchQueueConfiguration.swift in Sources */, + C172FA436525F74E81209875947595E7 /* Disposable.swift in Sources */, + 56DFEB02ACCD64F2C2CFCC01747627D2 /* Disposables.swift in Sources */, + 996ACA07E398381E297FE2D20EBAEAE4 /* DisposeBag.swift in Sources */, + 37204DA94E4713CB9F6C97D3C684BEB3 /* DisposeBase.swift in Sources */, + 40CCAE7CC10932034F8BDBDB11A060B6 /* DistinctUntilChanged.swift in Sources */, + 825F44C02EEFC300A58BBDBD1B82A017 /* Do.swift in Sources */, + 88A6155330CCF69524EF9DDBD69E1B9A /* ElementAt.swift in Sources */, + 75A2501E025111DF48E6662F4C8163F7 /* Empty.swift in Sources */, + 5840C6FBAEEC15A7F3D89435C73AF6B7 /* Enumerated.swift in Sources */, + 0C1FEB6DDA1E3DCA294E91970EF70979 /* Error.swift in Sources */, + 942CE6472FD49042B9F22A946D86FF26 /* Errors.swift in Sources */, + 210D4C72506ACFDA3F5129966DA002BB /* Event.swift in Sources */, + A42B44517A3A60DA308BA03F12A2EA92 /* Filter.swift in Sources */, + 65B58399187958BF83B8D7AE27101FD2 /* First.swift in Sources */, + 7F053BC4BC544FBA247828C7DCD7D280 /* Generate.swift in Sources */, + DC88CAC3EBDC2E67DA5975EF610F3BB1 /* GroupBy.swift in Sources */, + 6B8B861CEB17FF5AFE9600DA45E45915 /* GroupedObservable.swift in Sources */, + 3642914BB58CFD81FBBF88BDA48A0170 /* HistoricalScheduler.swift in Sources */, + D78090BCD2C27C2F0755E5F2075AD714 /* HistoricalSchedulerTimeConverter.swift in Sources */, + 8A52D7C8D989FC845E323308C4A87D71 /* ImmediateSchedulerType.swift in Sources */, + 83B53ADB64DF7A2B6C7C51EDF92B44D7 /* Infallible.swift in Sources */, + 97D740C37BC4DFC9691E9C6EF64B89A1 /* Infallible+CombineLatest+arity.swift in Sources */, + 7DAFFE9CA919E4087289F8A68C971020 /* Infallible+CombineLatest+Collection.swift in Sources */, + E121B3FC7EB8A408935C0B5472538F7A /* Infallible+Concurrency.swift in Sources */, + B2840774DED49F3FA2E50D1F47964C60 /* Infallible+Create.swift in Sources */, + 0A2B07F68FFDEFF49FA6F165DF5B4123 /* Infallible+Debug.swift in Sources */, + 6925B90AA3C1D38A83202C2609F7C3F7 /* Infallible+Operators.swift in Sources */, + A3CF3A4EB88976FB0D5E989B4ED85C55 /* Infallible+Zip+arity.swift in Sources */, + 94193840525CD2BF5B5FE96B133D211A /* InfiniteSequence.swift in Sources */, + 9A4ED09FF5F6C42B302E97D7BFFB5541 /* InvocableScheduledItem.swift in Sources */, + 9EE5156B6860FA93358E2C0CD9990E43 /* InvocableType.swift in Sources */, + DFB334203FED63EDC52845F9A5914BB0 /* Just.swift in Sources */, + EAACC631D5814C48D008FBBD53E8D0DA /* Lock.swift in Sources */, + E6A94ADADA07E8F62C0671EDE148188D /* LockOwnerType.swift in Sources */, + DFE529F0C85C10EF361F62017D722E76 /* MainScheduler.swift in Sources */, + A72E718765315BFF3AF34D284006DE99 /* Map.swift in Sources */, + D13238323C808103383280B48D9FF833 /* Materialize.swift in Sources */, + 5D18F9474E82C79D5CB94852FD2F2ABA /* Maybe.swift in Sources */, + F3580439D38601B6DECF01C92685C9D0 /* Merge.swift in Sources */, + 76FB685C2887CB339EBE9C0A6E75120A /* Multicast.swift in Sources */, + 06B7908CB9299B647356E5A19711B03C /* Never.swift in Sources */, + 86DD4292A20CC25944BDB99A7FF0C10E /* NopDisposable.swift in Sources */, + DD95B3D71392B724B2ABC3911B276D8F /* Observable.swift in Sources */, + 4D0444BAE8369211DADB3376A38089CC /* Observable+Concurrency.swift in Sources */, + 1CC49A9BD8554882D499AFC657485A76 /* ObservableConvertibleType.swift in Sources */, + A875ACCA7ED41CD1D12921290A386F5C /* ObservableConvertibleType+Infallible.swift in Sources */, + AED546D422103E6E622C110FB58913B6 /* ObservableType.swift in Sources */, + 3160A07FF7E8C76646BBFF324589BF9A /* ObservableType+Extensions.swift in Sources */, + 419BEFA58C93F82128B3EC673B8B2808 /* ObservableType+PrimitiveSequence.swift in Sources */, + 72A04EB4528FFEE0D1E75AFFFB59159E /* ObserveOn.swift in Sources */, + B89593FC8F1FD6132EECE6FF20013CBD /* ObserverBase.swift in Sources */, + BF20215DA2E88848DEBB33D1A4CDBC32 /* ObserverType.swift in Sources */, + 1D4637E0811723E3A42D519DDFBC4ECE /* OperationQueueScheduler.swift in Sources */, + CEFB8766F48BC037AECEC6A62560BD29 /* Optional.swift in Sources */, + 82ABC39C71A5425186FD4FE82E721821 /* Platform.Darwin.swift in Sources */, + C2DDA326B57E522D0CDF88CE69827F18 /* Platform.Linux.swift in Sources */, + 4F43274487E91FBD7E03D86245E47A4E /* PrimitiveSequence.swift in Sources */, + BF60F24164C7F3F7FA05A86398D9D967 /* PrimitiveSequence+Concurrency.swift in Sources */, + 0C9FA288554B0A0C3CDAAC8DA720B362 /* PrimitiveSequence+Zip+arity.swift in Sources */, + 508EE05DC4635E416722BBFE86807E95 /* PriorityQueue.swift in Sources */, + 2EE30EFD051670E0930EEC564D982911 /* Producer.swift in Sources */, + 09896F9A54FE4E986FC9D2E62865266E /* PublishSubject.swift in Sources */, + B4DE36E030A0E5870E03A7BBD5B6701F /* Queue.swift in Sources */, + 74BAD1E9F4E576B92615C0600E2F851F /* Range.swift in Sources */, + 68F5FB238662CAE753DDBC9E7DA89855 /* Reactive.swift in Sources */, + 268008A236ED740E643732F35E784099 /* RecursiveLock.swift in Sources */, + 87E6581111DF30DAB6BE39E2C5B9A86E /* RecursiveScheduler.swift in Sources */, + 450C90D5EC2199F7C604D50B30FBFEF3 /* Reduce.swift in Sources */, + DDC0F60F4D6F186EF6DEA97F2B84107D /* RefCountDisposable.swift in Sources */, + A7B5DF43B0752729116087D9A68C052E /* Repeat.swift in Sources */, + E51A276849B087A22887CEF931F178C0 /* ReplaySubject.swift in Sources */, + FFEDCD03350E9C1FE968B273493B1375 /* RetryWhen.swift in Sources */, + D0FDD0434090177CD308ED76602AE455 /* Rx.swift in Sources */, + 9619919FD41DFBDB5760E158BAB8F295 /* RxMutableBox.swift in Sources */, + A60C37A57AF2C392F61D9CB30547C2C1 /* RxSwift-dummy.m in Sources */, + 4A5F51AA21766046600966A50BD6F533 /* Sample.swift in Sources */, + 632D509D4BB36A746609BBE86A643440 /* Scan.swift in Sources */, + 4FC8EEE68D5932ABDDFE2D0DCF8345CC /* ScheduledDisposable.swift in Sources */, + BD7649E3EC6317949AFC2234998F0F91 /* ScheduledItem.swift in Sources */, + 6D83B5DBF22DBDFCE140413476DAFA8A /* ScheduledItemType.swift in Sources */, + B1668CE388B75307E26FE3899736E5ED /* SchedulerServices+Emulation.swift in Sources */, + FC9A8A198E8D0DC593197CD949B7B722 /* SchedulerType.swift in Sources */, + 6628A73EB3F4DE1C02C8E057E9327BF0 /* Sequence.swift in Sources */, + 6795DC52B0A601D81E66EA32B743DFC4 /* SerialDispatchQueueScheduler.swift in Sources */, + 3E301C20B8B55E9D5F6300A134561BFF /* SerialDisposable.swift in Sources */, + D4F312B997FAF67C930BE4A29CF47CB7 /* ShareReplayScope.swift in Sources */, + 93AF8427CD5DBBE14C33946AB538F904 /* Single.swift in Sources */, + 738AEC4CC699BFBA787CFC9F4EC9B200 /* SingleAssignmentDisposable.swift in Sources */, + 8131DFF80EB0CFA6C572076DAB2F1473 /* SingleAsync.swift in Sources */, + 35A44C895BD9F20049CEA78E270DF27E /* Sink.swift in Sources */, + B7F113A612A1048CDC190D435D1F7CE1 /* Skip.swift in Sources */, + B924B23E166C657CD6799A9ED008E55D /* SkipUntil.swift in Sources */, + 1F3A35AA20200F882745D5FA8432730D /* SkipWhile.swift in Sources */, + 161AD6A1FD1567C9D48E62AB5A8BAB68 /* StartWith.swift in Sources */, + 6FD0DA95919ED8881B7F221D6A4D3B63 /* SubjectType.swift in Sources */, + 7446F81DD35C285BA22BC4DC085DF6AC /* SubscribeOn.swift in Sources */, + A7D3ED11692D0C8E94AB8FFC4EC4BDF3 /* SubscriptionDisposable.swift in Sources */, + 8F2FF92C2ACB7B2551DE8D9C8E26E204 /* SwiftSupport.swift in Sources */, + 32C22FD7A0748373999BFAC35C3AFC28 /* Switch.swift in Sources */, + 915C0D7BCA417AE073CCEC9CCB77A8BA /* SwitchIfEmpty.swift in Sources */, + 11046E796D234137C1BE618CD93B2C85 /* SynchronizedDisposeType.swift in Sources */, + 0E3CE3B0D20FE412F21CF712225E0259 /* SynchronizedOnType.swift in Sources */, + 08CA4F3040AC07A6F6E25FBF13A06EAD /* SynchronizedUnsubscribeType.swift in Sources */, + A20E40DEA40B323770F8419B508B828A /* TailRecursiveSink.swift in Sources */, + D97455C3D7C4CEDBE2EA90B79277BB72 /* Take.swift in Sources */, + C5E9BCA28405371331555210EB371571 /* TakeLast.swift in Sources */, + 19F02EEEEDC69DC212DE3BBE5B0FECA8 /* TakeWithPredicate.swift in Sources */, + 0A233373E480EC041044A3D3308E7203 /* Throttle.swift in Sources */, + DF2DA245F12E9DE9D36D5C96CBA0A0EC /* Timeout.swift in Sources */, + E0C9E5D8EE254CF424930A41843A57AD /* Timer.swift in Sources */, + 9AA1F63D85A53624D985D05569E80864 /* ToArray.swift in Sources */, + C00F636B88A0D45DDE34552361077A86 /* Using.swift in Sources */, + B52287026E457779C0D5D379252381D4 /* VirtualTimeConverterType.swift in Sources */, + B3D4D6744D0958B2ECA368B18B2DF24B /* VirtualTimeScheduler.swift in Sources */, + 083568CB5595DD405BCF2728104FB06F /* Window.swift in Sources */, + 45BA801435A315ACE712825F72606CAE /* WithLatestFrom.swift in Sources */, + F79A182CDB1C80A234555BE9A45C22E4 /* WithUnretained.swift in Sources */, + 0BA592B0168441965B0358B168955F32 /* Zip.swift in Sources */, + B79597B425FDD864097AB365CE8E43D8 /* Zip+arity.swift in Sources */, + 79DA3D113B320B60C456019C2270CFB3 /* Zip+Collection.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -13418,6 +13758,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 894E07E0B8F5D85643A8FC94E64FE049 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 9400B106AABA16ADA26500471725C19E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -13430,16 +13777,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A2F44179063046C06A348D012B5D9DBC /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D904C2369FD78185284B5B4125D2CF71 /* IQKeyboardInfo.swift in Sources */, - 3104E8F987B0D3FDB1106E49ED803A03 /* IQKeyboardNotification.swift in Sources */, - 242F4F563272D34C38C98D5D4F9F92F8 /* IQKeyboardNotification-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; A43FC2C1BFDC0FE2957688B876B318DE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -13449,13 +13786,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A47F439B8D061FAF926B29A112E34AF6 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; A5AB37013DF74851F84970D0B8D3043D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -13474,7 +13804,7 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AAF72206400F9816CEECD411989FA0FF /* Sources */ = { + A8D891EB4676BA49A7DE130898522C2D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( @@ -13522,13 +13852,89 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - BE584699783D4EFA62AAE2E14CF198D0 /* Sources */ = { + B1A34CED0B05549FB1A36F61C44D0DE5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; + B2A31197323F230D6200DFFF253D9F8F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E713EB139B0B6B2F9BB463A2E13B583F /* IQKeyboardInfo.swift in Sources */, + 20457FA9C1E51F32C3B2F8A5821B0ABB /* IQKeyboardNotification.swift in Sources */, + 16E02FAE9A06528993720ACF5F7680A8 /* IQKeyboardNotification-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BB2714530DE387EE457ABD49CD4A5789 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F05192CEB06CD70D1D3E8ED9E4B7C15F /* CocoaMQTT.swift in Sources */, + 57AD313741969102750AB3CB3976BC97 /* CocoaMQTT-dummy.m in Sources */, + 01461285DFE546C71E99B49A3BF32601 /* CocoaMQTT5.swift in Sources */, + 3D80D0457EB3BF7D449CA995F30CF2CA /* CocoaMQTT5Message.swift in Sources */, + 7E105C0F1C97F0A9E8482988E078FDA9 /* CocoaMQTTDeliver.swift in Sources */, + 8690DEC4B00EC34DC177644594F02817 /* CocoaMQTTLogger.swift in Sources */, + 30617D7947DF3FBD9154F1CA87D3DBEE /* CocoaMQTTMessage.swift in Sources */, + 4501636244237C850616353EBD1C8189 /* CocoaMQTTProperty.swift in Sources */, + F5BCEAF07494B8EE4407A4048C70170B /* CocoaMQTTReader.swift in Sources */, + 7A271B71FDDDC1BC3FF970EDAD5E98C4 /* CocoaMQTTReasonCode.swift in Sources */, + 7CF2A972F2443BD1B774F8330E12FE50 /* CocoaMQTTSocket.swift in Sources */, + 8B194760C4583AB3D5E17DB95679E3F6 /* CocoaMQTTStorage.swift in Sources */, + 82DA7F3D5A287251DB25A4FC3F19FC93 /* CocoaMQTTTimer.swift in Sources */, + 909C544B79175483251BC46FB225BEBA /* CocoaMQTTTypes.swift in Sources */, + F2E5A6404AB84C1417F31C076A0EA8F6 /* ConcurrentAtomic.swift in Sources */, + AFCA288AE0DE819FE6CE288067C9A82A /* Frame.swift in Sources */, + 7D3F42BD41F124E613A70A09171C6DAF /* FrameAuth.swift in Sources */, + 9542BC97F490CB6D4671C68776DC2B9A /* FrameConnAck.swift in Sources */, + 43D84EBCE8220F637D8BE1C473BF9188 /* FrameConnect.swift in Sources */, + 7EAA83C312561AB4317FD6C58187AEFB /* FrameDisconnect.swift in Sources */, + 9A64AA527A1156361FEFF89E58AA8A43 /* FramePingReq.swift in Sources */, + 82DDB13ECAAF4BC08A115696162BED6A /* FramePingResp.swift in Sources */, + F39AB662CDC4C299D4B1737519E106C7 /* FramePubAck.swift in Sources */, + BA76235961947F402695F8A346265B6C /* FramePubComp.swift in Sources */, + D0D8EAFBEAEE4B82131FD5FB9AE6D236 /* FramePublish.swift in Sources */, + 0B0A3A1044D081A95821B26BF0C69B68 /* FramePubRec.swift in Sources */, + E2EA5D15C15D16580E4A7FCC41694567 /* FramePubRel.swift in Sources */, + F4A703B0312FA076FEFFA31444B8FEE6 /* FrameSubAck.swift in Sources */, + 4431DB7D2739D4D1701F63BA42F1ECC5 /* FrameSubscribe.swift in Sources */, + E82B4F97BB52300AF382AC4E2E2A3A1E /* FrameUnsubAck.swift in Sources */, + 5E558455B862C4CE21399D45C2CBC479 /* FrameUnsubscribe.swift in Sources */, + AF2ABE6FDD3F70320024969E414C97AD /* MqttAuthProperties.swift in Sources */, + 50E0B8B52F6C012C647A877DE161AD0B /* MqttConnectProperties.swift in Sources */, + 92F619B07D3D91F74CDA3CA4B000807C /* MqttDecodeConnAck.swift in Sources */, + 47F8811B5427A0E93A230232C573B68C /* MqttDecodePubAck.swift in Sources */, + 5E1CD661F9FC277B7E32DA348FE0DD1F /* MqttDecodePubComp.swift in Sources */, + 4063405C03CCB96E39645F8F991E75FA /* MqttDecodePublish.swift in Sources */, + 41EAB079E787B4FA6866FC48FC7D187B /* MqttDecodePubRec.swift in Sources */, + CF34C51C73AB57E0A296EB54D516C0E4 /* MqttDecodePubRel.swift in Sources */, + 4B1C0A08511CD18328B7AD065B6447F8 /* MqttDecodeSubAck.swift in Sources */, + 5C577E5C5D13313BF4E90DA27CCE1BFB /* MqttDecodeUnsubAck.swift in Sources */, + 9162EF894ECC79E2524927E8EDD3A5F6 /* MqttPublishProperties.swift in Sources */, + 8AE640439F0C94295E509ED320B648C0 /* MqttSubscription.swift in Sources */, + BB9663727F1154B67FE78531F9D27411 /* ThreadSafeDictionary.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BBAD2C14A04F3915F9568482BFC47E26 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BC407DD2244E3D84B04992F1E0D8BB1B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EC0833ABBB33BA7F6160B0BF17F11097 /* Pods-QuickLocation-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; BF6F1816B0325207E7310ABC9FD05174 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -13541,96 +13947,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C27D4907B15A73D8EA10928092B172A8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9B81AAA7E1947A2A38DC7CDFD27B76D5 /* IQTextView.swift in Sources */, - 73ED4CAB43E4753F59CF2291BC5242A0 /* IQTextView+Placeholderable.swift in Sources */, - 19449EF5B493DC41104B6ED4B6DBB907 /* IQTextView-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C543215097EDF2FAA2CFBEC2ED4FF0A4 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 36F5B11E0F51C1CAEC8E3BF3BD1397F7 /* NSBezierPath+SDRoundedCorners.m in Sources */, - 3C0A41819F84BC2C7B8BB720B11299F7 /* NSButton+WebCache.m in Sources */, - AA28F4A2C9F5993AD2085D8F3D0A4366 /* NSData+ImageContentType.m in Sources */, - 11C45A1CC537C7E9935BA352E85D1FED /* NSImage+Compatibility.m in Sources */, - 1296188B598424BFCB3A8F6EAC649A86 /* SDAnimatedImage.m in Sources */, - AE745A25F12D4918404C5ECCE439FC2A /* SDAnimatedImagePlayer.m in Sources */, - 02F91E3C48D92BE962A7748A6788CD6D /* SDAnimatedImageRep.m in Sources */, - 717812EFCFB61B9D6A80AE866FECA714 /* SDAnimatedImageView.m in Sources */, - 6FB928F2C18CD7FE791401D03C22E042 /* SDAnimatedImageView+WebCache.m in Sources */, - A2144AB5DA94A4BDA2253B25CC069E3C /* SDAssociatedObject.m in Sources */, - 87BB8523D2E944F3AF973ADCF6AE6898 /* SDAsyncBlockOperation.m in Sources */, - 1F14E7B047EF0704D6AEC1C2DCF78B1C /* SDCallbackQueue.m in Sources */, - 784EC876ED7D0E61BA1D1D5B6FC080D3 /* SDDeviceHelper.m in Sources */, - 6B4F5C299432BC6D39F216FB1956F526 /* SDDiskCache.m in Sources */, - 9F8FD4529C610082745C8C7B1F1961F4 /* SDDisplayLink.m in Sources */, - 6B9ED16B62C85179D15C9568D602B72E /* SDFileAttributeHelper.m in Sources */, - 75531B73D5F39CB3C311AF4E73A2C893 /* SDGraphicsImageRenderer.m in Sources */, - 45A339515879815775B83A75319AB77B /* SDImageAPNGCoder.m in Sources */, - 0633DE475D1D557CF95B89721060EA76 /* SDImageAssetManager.m in Sources */, - 6376D1EF42AD00D03711B680B2986CEB /* SDImageAWebPCoder.m in Sources */, - DD57E9FEF4EC5F5CD871D642F1EEDDCF /* SDImageCache.m in Sources */, - 6FBC34FC7F89A9E1E79E967EE0633A31 /* SDImageCacheConfig.m in Sources */, - 2D3ADCFAF670D6C9816369F7ED3B7696 /* SDImageCacheDefine.m in Sources */, - C37E014356FAFD96EF5488586DBD6E11 /* SDImageCachesManager.m in Sources */, - B14EBD76B590189B2C83A6EF963D822A /* SDImageCachesManagerOperation.m in Sources */, - BA2133874033B6E2A7DB5F7900DBFC00 /* SDImageCoder.m in Sources */, - 9957F0F1B355B8E1F8FAA917159E9199 /* SDImageCoderHelper.m in Sources */, - 3D250F9BEE59C2068C1A82261A3F5BFD /* SDImageCodersManager.m in Sources */, - ED09C58E7663659728CE656A647A65E8 /* SDImageFrame.m in Sources */, - A57E2091853F8D22158738D995DE6946 /* SDImageFramePool.m in Sources */, - 8780C16C073E1E6CBC8FC372F0B224E8 /* SDImageGIFCoder.m in Sources */, - 954A8A86B59625A40BF76D00D8864C8F /* SDImageGraphics.m in Sources */, - 8A9497651A0DB613191F10C6FCDC5D0C /* SDImageHEICCoder.m in Sources */, - E5EF977D40793FCCFDDF4CDC7E2BB865 /* SDImageIOAnimatedCoder.m in Sources */, - 794F87F9E0A8E4DCCF52A73F1BC75428 /* SDImageIOCoder.m in Sources */, - 0ADC968298C0D9A1089DF880985DBBAD /* SDImageLoader.m in Sources */, - 8A779C3BCF19D53FEFC5BCD0C2EA0494 /* SDImageLoadersManager.m in Sources */, - B899D80B7E9444646D3EBF6B0084CBB1 /* SDImageTransformer.m in Sources */, - 3A75B3C179F71755659842A0DA8C538B /* SDInternalMacros.m in Sources */, - 6587CF9B280E8628F362B44853AE36CA /* SDMemoryCache.m in Sources */, - 66BAA48E3E4563168EAF3C8E48CDFE4B /* SDWeakProxy.m in Sources */, - 7139F90D349424DD12EE4D4374EBBC08 /* SDWebImage-dummy.m in Sources */, - 8274C142B267ED628A56BE49ABC1AB42 /* SDWebImageCacheKeyFilter.m in Sources */, - DF9B34E19C0F13BCFA58F0DBB348E008 /* SDWebImageCacheSerializer.m in Sources */, - 87A86EA4BAA4D59D66A45DF0E43392CD /* SDWebImageCompat.m in Sources */, - A0B03E2E8B1952B3B64E2B26970089BD /* SDWebImageDefine.m in Sources */, - 9C975B2F72D067FD855FC9874F45A40C /* SDWebImageDownloader.m in Sources */, - 021063C8698125D953F5706AABD452C2 /* SDWebImageDownloaderConfig.m in Sources */, - 815F81676EC04CD9DEB40AD4F7B019F6 /* SDWebImageDownloaderDecryptor.m in Sources */, - 4A1C800E8FC186756C783A3AF0CC2144 /* SDWebImageDownloaderOperation.m in Sources */, - 72B3AFC351B26D4D98EC25F8E5B789F9 /* SDWebImageDownloaderRequestModifier.m in Sources */, - C08BB02A69A559B80327D76DE7B45BA1 /* SDWebImageDownloaderResponseModifier.m in Sources */, - A8A6C9D9D8B65ECD3056C232B62D70D0 /* SDWebImageError.m in Sources */, - FD71872BD2972EF642FFF461F16B2BBD /* SDWebImageIndicator.m in Sources */, - 16CF11A7B684AFF2F7B389CF10EF0EDD /* SDWebImageManager.m in Sources */, - CBC092378ECE1466F7B48E7DA94E8F32 /* SDWebImageOperation.m in Sources */, - DA2766F1FE150D6B0E5FF6559675F9C1 /* SDWebImageOptionsProcessor.m in Sources */, - DBABCEDF64733C48553D3A417B869E4E /* SDWebImagePrefetcher.m in Sources */, - B325D41B7CB98EDA508C0F99AF0531E9 /* SDWebImageTransition.m in Sources */, - CEED6F206BAE30C78F98B47385609688 /* UIButton+WebCache.m in Sources */, - 5B3923C137072003EBEBE7E027F56CDF /* UIColor+SDHexString.m in Sources */, - 0AE6E0A416E18503E36FBDB73A7EB31F /* UIImage+ExtendedCacheData.m in Sources */, - BD867501B9A45D71635E695B52E57BC3 /* UIImage+ForceDecode.m in Sources */, - B27EB3E83EEF095CC2ADD635BFED1F2C /* UIImage+GIF.m in Sources */, - E9EF657E848E7B326050E0C9540BE483 /* UIImage+MemoryCacheCost.m in Sources */, - BE3D084BFA4E05F1BEB1E1B5264C965D /* UIImage+Metadata.m in Sources */, - CEE4E58F8C30B928A9CB1C045F169211 /* UIImage+MultiFormat.m in Sources */, - 010225CF66F664A19FA67E883D0A5BA6 /* UIImage+Transform.m in Sources */, - 3EF94128EE7E7397C5967A23C565ABD6 /* UIImageView+HighlightedWebCache.m in Sources */, - 0A58664142EA2685FD6FE2DF0AA0FBC6 /* UIImageView+WebCache.m in Sources */, - A1E29CD112385C90E29DDEC573E9CF44 /* UIView+WebCache.m in Sources */, - A58136C9566B2242204F3F8EA3CD8D48 /* UIView+WebCacheOperation.m in Sources */, - 150AE9D9823A639C27DC66D0421797FD /* UIView+WebCacheState.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; C5A04BFF58C046FE4DC97E201B78F311 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -13795,137 +14111,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - C672A28881304CE3555816F1C4553B1E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 61A1702C9F4291517E87A0B355B4AD4E /* alpha_dec.c in Sources */, - 31C92344565509BFA8F64CCAF193C78F /* alpha_enc.c in Sources */, - 8ABE12CC6EECE1DD6B2F826F04FD4BD2 /* alpha_processing.c in Sources */, - 36DF23DE9EF12D0C9F3B4DA80D06AB42 /* alpha_processing_mips_dsp_r2.c in Sources */, - 5609ED912D598CD5AD61F2FE109423EE /* alpha_processing_neon.c in Sources */, - E23C5187D22F3D7207BF940BAE80EF33 /* alpha_processing_sse2.c in Sources */, - 045A49902242E7B3D70B9F988CA78AF5 /* alpha_processing_sse41.c in Sources */, - 54A157EFE2592F0C6D70550B88578C81 /* analysis_enc.c in Sources */, - 5093A747D64057EDB11E7C389C904A9C /* anim_decode.c in Sources */, - 89E36B8E42BD6542B8C8006612AB3163 /* anim_encode.c in Sources */, - 71394FEEC6AB26B0E6A4EF0A6ADC3EC4 /* backward_references_cost_enc.c in Sources */, - D5758BFED1514C39F76D3845AD320DC2 /* backward_references_enc.c in Sources */, - 301ED3D73C23F6A80BA38E30E05BAE44 /* bit_reader_utils.c in Sources */, - 34E9D5F556C832BE78D1074553F78F91 /* bit_writer_utils.c in Sources */, - 32AC044F812E57DA9C85C6E83D60EA1C /* buffer_dec.c in Sources */, - 0DE397C98C939B745F424A87A2B0F4C2 /* color_cache_utils.c in Sources */, - 2D3FA71FDBFCF6BDD341426D86C54F82 /* config_enc.c in Sources */, - A40C5F28F224D47644D6642B2515A011 /* cost.c in Sources */, - 6B1E9342D1D1B3FF6761973B54846C5D /* cost_enc.c in Sources */, - 8A8E0E33B81B3AB4930AABDED36097F8 /* cost_mips32.c in Sources */, - DC10982107A29E4A8626F5C720927380 /* cost_mips_dsp_r2.c in Sources */, - 8610B646ACB327434E1072AB24241FC7 /* cost_neon.c in Sources */, - C6E3DE7ABFB88E546E2A83435E48ED44 /* cost_sse2.c in Sources */, - 1C5DCB1C09DFE05047C4F73EA34A065D /* cpu.c in Sources */, - 66B954DE210240B6BEAE4194C864155E /* dec.c in Sources */, - 33F68809FB1FE1590E2414602781160A /* dec_clip_tables.c in Sources */, - D80112F19F528A1C41741B121ACB18C4 /* dec_mips32.c in Sources */, - 5423A68BE194FF4F88E1F3F8060741D1 /* dec_mips_dsp_r2.c in Sources */, - 2DE638E2260CE1DB06F76ECA93C24E0E /* dec_msa.c in Sources */, - DC016D326725C8F66C7F8382A0A65EE7 /* dec_neon.c in Sources */, - B3A873963105EEB40F98BD3F9F18FAC8 /* dec_sse2.c in Sources */, - 42C5AE0870E511B811C9B4DDE6899B66 /* dec_sse41.c in Sources */, - 7CD84F8DB695AC43A57E884C2171560B /* demux.c in Sources */, - 7F05B3C942C46A787CB0C2DE9AC12A80 /* enc.c in Sources */, - FA466A93791A0CD6AEC3AE1E9E570FD6 /* enc_mips32.c in Sources */, - 03DDE32C9E982AE87E8AA3D926BCEB35 /* enc_mips_dsp_r2.c in Sources */, - 6CEC610F6C21A3717EC2E0486100F20C /* enc_msa.c in Sources */, - 06CF4848159EBE88FF4132522F525057 /* enc_neon.c in Sources */, - D0382AAC74EAC957E55B1C0FAF9EC897 /* enc_sse2.c in Sources */, - 76D446B97B0D2FA97975C830469C615C /* enc_sse41.c in Sources */, - 0D2AE7D9CDDDBC4664A8A74CA2824FCA /* filter_enc.c in Sources */, - 85FE8E61C5EDD8A9B9DA98B8B4A9F208 /* filters.c in Sources */, - 269A492E07AD9684E6B11AAA03B97264 /* filters_mips_dsp_r2.c in Sources */, - ACD8044C76783EF19755EFC8E911FD55 /* filters_msa.c in Sources */, - E5B8C9B69A522F320113821E8981F74E /* filters_neon.c in Sources */, - B4EC613823F8FACC3A49812C18BC5AF4 /* filters_sse2.c in Sources */, - EC03F99E8ADF9C5EC34E14CA4F994B6F /* filters_utils.c in Sources */, - 31000B277CE79D21BA8C1ABA26659D9C /* frame_dec.c in Sources */, - 6CEB91B9D0F79F63B220B9363D72B03C /* frame_enc.c in Sources */, - B61DF7E3F4B364D1C76D967F71676C9C /* histogram_enc.c in Sources */, - 1D1144A29931237DA172952B098FA026 /* huffman_encode_utils.c in Sources */, - EDD523987A60EECB6464615EA4734277 /* huffman_utils.c in Sources */, - 372B028224B230942D573C6071980027 /* idec_dec.c in Sources */, - 209449480FF69F2FB4146CDA1765BAAB /* io_dec.c in Sources */, - FCDF1D9CD5C6902938D25B1E6FFF761C /* iterator_enc.c in Sources */, - BCAC5285AA980D6A1970FD5B675BE970 /* libwebp-dummy.m in Sources */, - BE36C6B3898E3E82A7881FC4DE33A115 /* lossless.c in Sources */, - 5C6BACB3E936ADB9BF7B694DE5F76B24 /* lossless_enc.c in Sources */, - DBAC6B1D8C54FB2B16D1EB2D41715F4F /* lossless_enc_mips32.c in Sources */, - 248FE8D6745BB73161E3D1118BB9CDF8 /* lossless_enc_mips_dsp_r2.c in Sources */, - DD1E5022EE05E040EF088DB41010E5E2 /* lossless_enc_msa.c in Sources */, - 6138260CB5AF95929889148DFC913A0F /* lossless_enc_neon.c in Sources */, - F9C42D93CBEBD19B0D1707ED6D81BF05 /* lossless_enc_sse2.c in Sources */, - 417F20E4B575F95AA4B991D2149C898E /* lossless_enc_sse41.c in Sources */, - 81FD0195DA3077411FCD0751E7CD5FE1 /* lossless_mips_dsp_r2.c in Sources */, - 2D58EA07BF9420CB519FB4C5C1C64E54 /* lossless_msa.c in Sources */, - D7AA816442FF639772077023CB7CB106 /* lossless_neon.c in Sources */, - 2217E80655E7B80BAAF4306735E008A0 /* lossless_sse2.c in Sources */, - 1F99468BBFBE7CE266CF259EA2A0B50A /* lossless_sse41.c in Sources */, - E42496F55B6B2C772D40F457B7C98154 /* muxedit.c in Sources */, - 9BE9ABF100051ABF1961958C54100327 /* muxinternal.c in Sources */, - 5C1D2B938DACC33D9AFE04B62FCC9EFE /* muxread.c in Sources */, - 54155DF312ABEA7136335F47C81CE938 /* near_lossless_enc.c in Sources */, - 43AC0C09E1209CBE32C28B827B21EB69 /* palette.c in Sources */, - 3E3DE0C3F11D105F010D3903964B8DC0 /* picture_csp_enc.c in Sources */, - 820CAA6F190BDC09EAA1C5F937A1A5EB /* picture_enc.c in Sources */, - 6CEB67FA720C11B6A3D90568A24E2CD8 /* picture_psnr_enc.c in Sources */, - FED25CF5DD8551A499C04624ABF5E7F7 /* picture_rescale_enc.c in Sources */, - D9623705421AB179348D0B44B85D8CF5 /* picture_tools_enc.c in Sources */, - FC644FFD4CEFABD31D114D385B3FDD19 /* predictor_enc.c in Sources */, - 8B16CD2D6E27FEE950C96E3DFD04DB54 /* quant_dec.c in Sources */, - 81480680EC2AD2EFB65E4B65D0AD3CE2 /* quant_enc.c in Sources */, - 76BF116C44CC99B086526ED8A19F48F5 /* quant_levels_dec_utils.c in Sources */, - 794C6C6B3223E089FE0D3C21D1F9F0A8 /* quant_levels_utils.c in Sources */, - A81A06306F6CB52B6454B87AD1389688 /* random_utils.c in Sources */, - B3055D5399B97852355F98821ADDBC5E /* rescaler.c in Sources */, - A88BBC15BE4C225B31AEE17F4D953A2F /* rescaler_mips32.c in Sources */, - 59A7B942A600A7BC1ED704F858270E2F /* rescaler_mips_dsp_r2.c in Sources */, - 213346E0F366A1B688A63C84AC78E925 /* rescaler_msa.c in Sources */, - 3636DAB7FF443D6A94EEFF759FD706C4 /* rescaler_neon.c in Sources */, - 9D10B4077239CD4A98091985A4A3F523 /* rescaler_sse2.c in Sources */, - 3CCE07EC3D0DC9B618367ACA004958BC /* rescaler_utils.c in Sources */, - 06A37E1EACF17C6B94837E61D623B2DB /* sharpyuv.c in Sources */, - B4AF2DB1C39D8E8AD3A28DF1EB48D43B /* sharpyuv_cpu.c in Sources */, - EF04A170A4D1D4E6CEC857B6D8043644 /* sharpyuv_csp.c in Sources */, - 60E8E419DD6F0CA6D556F6B9FE7B128C /* sharpyuv_dsp.c in Sources */, - 97A13C75DA2BCECA29B0E7F6BA8EEC4C /* sharpyuv_gamma.c in Sources */, - DA43427CB705255E964D1E41B7CB9665 /* sharpyuv_neon.c in Sources */, - 5EEAC6A66FA0E6B5830DAA93471DA9FD /* sharpyuv_sse2.c in Sources */, - 0DB7EBD9B5E8EDE55DC6565BEFB2501C /* ssim.c in Sources */, - 2AD120375AFF9ADE8702C3BFD80BDB5B /* ssim_sse2.c in Sources */, - 791636D3DCF9FF81AD061E5CF5D6F051 /* syntax_enc.c in Sources */, - C22DBBD7FBFD295C00185B5F614B74B7 /* thread_utils.c in Sources */, - 3EC7C17C01B39C6915B3939EDACEA8F8 /* token_enc.c in Sources */, - D437CCD86DC6E52502FB1EAA60B58991 /* tree_dec.c in Sources */, - 4BBC8BF43CF7B6DB8BECF2B367BB751E /* tree_enc.c in Sources */, - 9A994727773B0B2ECF0BF43B89ECA9D6 /* upsampling.c in Sources */, - 2B319E44D7ADECC5928D4059D35090FA /* upsampling_mips_dsp_r2.c in Sources */, - 0B3286E093C11F29E2781EB2C89E9145 /* upsampling_msa.c in Sources */, - B8C2356F35304D8A9AB06A3AADA00C4E /* upsampling_neon.c in Sources */, - 366BD3046AE8E0558AF52F571AD039FA /* upsampling_sse2.c in Sources */, - 517A42EBA8C2D887F183A5BA5088B836 /* upsampling_sse41.c in Sources */, - 71CB3CA886AA53B7F5E81581D5E519D1 /* utils.c in Sources */, - 21FF1ECA305411EED75B074549EDCECF /* vp8_dec.c in Sources */, - 8DE0169623626B1E8E25C98D15189E42 /* vp8l_dec.c in Sources */, - 5FE376C5CEBC1C40441E38EA1EE6BF02 /* vp8l_enc.c in Sources */, - 52EC86E627940D5740209212FFEB6958 /* webp_dec.c in Sources */, - 61015DC99221A23D700A04291DBA6B67 /* webp_enc.c in Sources */, - CA4CC5E18364E775EE169E4EE7A86FE7 /* yuv.c in Sources */, - 66FC880217F38970CC056F79129A7727 /* yuv_mips32.c in Sources */, - 5D07708EC42D549847583DED8030CED9 /* yuv_mips_dsp_r2.c in Sources */, - 88849EA98966A576058B9C1A27442A84 /* yuv_neon.c in Sources */, - 7F5C48C2188D40013C6138EF2F912F57 /* yuv_sse2.c in Sources */, - 0CFF7D4D0E7F1D23CE8D0B8059428B78 /* yuv_sse41.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; C6A558DD358D0A9D37BE505AF4786771 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -13966,17 +14151,238 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - CA6DBC72AA33333BCAC9445A32BD908F /* Sources */ = { + C858D393F19697D85A403464DDAF1E07 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BFD45DCF81CA6FAE63F89D08066830EC /* IQTextView.swift in Sources */, + A36C66423C63347C362000CFA6B39ADD /* IQTextView+Placeholderable.swift in Sources */, + D10EDF998CDA6852F82760E28E8F091A /* IQTextView-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CD025D31F5EBDE4E708C3204A90F59B6 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - D2DFF319A95580F59BC9410B687D2748 /* Sources */ = { + D2DA36F1282A4EEF40487329493B3581 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 17963E14ADC36534628E33A2E456A9FD /* alpha_dec.c in Sources */, + C03633BC24D5BADF7D8EEB3ACE631666 /* alpha_enc.c in Sources */, + DBC215E63518692C01829C43DE30730B /* alpha_processing.c in Sources */, + 4D80E60A335E390E7E06406B289B1507 /* alpha_processing_mips_dsp_r2.c in Sources */, + 221C2C5A677210D28C7092AB45DAFBAD /* alpha_processing_neon.c in Sources */, + 413FB3DBEC191BD8FD034D6B619ABA78 /* alpha_processing_sse2.c in Sources */, + 1E1DDB49C9A4045FB76C69930DBA2F1E /* alpha_processing_sse41.c in Sources */, + 940622D3F968C7D89CD39D1E8AE97373 /* analysis_enc.c in Sources */, + F8DBD575BC5B5A87EEF5F7A4E79EC285 /* anim_decode.c in Sources */, + 49D0AB841BE753EFD2A840C4C54F4756 /* anim_encode.c in Sources */, + 780BC2D085C2534DADCEA83A9E68790C /* backward_references_cost_enc.c in Sources */, + 6BA0AD20FBC3135653D0191F4CF3CBCF /* backward_references_enc.c in Sources */, + CBC2A9E2E812EE14E54C09D33409F5E2 /* bit_reader_utils.c in Sources */, + AD7FBFF5398724D66EF831648087F043 /* bit_writer_utils.c in Sources */, + C14E0151206B52F3D0D9F7812847F16A /* buffer_dec.c in Sources */, + A5F0350C5D35B1A7A3685A17C4971080 /* color_cache_utils.c in Sources */, + 28E2D1FFBAEC6CFB57D72F44CBBA018C /* config_enc.c in Sources */, + 7558BB04C3278ECFE185A5E982CEBEA9 /* cost.c in Sources */, + 03C5BCAD51533102DFD2357DBE9A9A1C /* cost_enc.c in Sources */, + 2D9874572CEDB7AACBA158CB64EF379C /* cost_mips32.c in Sources */, + A39976E89E1F055CF12BC8BD0A16F9E7 /* cost_mips_dsp_r2.c in Sources */, + 76CE298CA63BD9C98E75949D0B77F12E /* cost_neon.c in Sources */, + 50B43CA000068D1E1BC08EF96A23E0F5 /* cost_sse2.c in Sources */, + 32F42F432E1925E1EE9F1DF10E230B05 /* cpu.c in Sources */, + D8C5939E07C5F477891D6DB0FF2016EF /* dec.c in Sources */, + 2749B0C5BDC4FE8527CA5A1EEE444749 /* dec_clip_tables.c in Sources */, + BDFBD6034EE2B4CBF1161BB7C5E9E6B2 /* dec_mips32.c in Sources */, + 36CDE98915D684098B3B7013BAA91590 /* dec_mips_dsp_r2.c in Sources */, + 1DB1ACD53F7A32A602A8883C88B141AE /* dec_msa.c in Sources */, + E620832870D38BCB4241125AC2500F7D /* dec_neon.c in Sources */, + B105F27A3EC15746DDE121AC8A9A57F5 /* dec_sse2.c in Sources */, + 6944CE1C5E07D8DACCDC8DFEA4934AC7 /* dec_sse41.c in Sources */, + 101EE02DF118858FADA52364B1419E72 /* demux.c in Sources */, + 30FD62F4759445BDDE759B1102FEA7A2 /* enc.c in Sources */, + 80F9FB96B47328A2F7369446F6355C11 /* enc_mips32.c in Sources */, + 4C0B9A1CB2C59D19BA619458188DB556 /* enc_mips_dsp_r2.c in Sources */, + 0EAEB1E9D38A99A316467CE6F913218D /* enc_msa.c in Sources */, + 663698A6CE77790999079FA690A29902 /* enc_neon.c in Sources */, + 6AD5356A624519885BAED049B683EFDA /* enc_sse2.c in Sources */, + 5B8E6B2A79FB2854979D399D9748A48E /* enc_sse41.c in Sources */, + 763E4D8F18AA1796E333DC9678D424AE /* filter_enc.c in Sources */, + 3ABD92A85AD10EF57D39FF5A6D2764B4 /* filters.c in Sources */, + 07052A43F310EE6CDC0302D69EA29A28 /* filters_mips_dsp_r2.c in Sources */, + BAAAEEF4190DC0417746E6F71736409A /* filters_msa.c in Sources */, + 2CC24AE55F29AEF0890A4258AE601A88 /* filters_neon.c in Sources */, + 8585AF6DFD194A19DFDC5DA017C404C6 /* filters_sse2.c in Sources */, + E39D20554396F3279704BFC67A045D86 /* filters_utils.c in Sources */, + 8C64A7C9603A2B05E32A7C417F5D9CEA /* frame_dec.c in Sources */, + DB9FAD58D5D5101F31C30C8373E21F2E /* frame_enc.c in Sources */, + 2EEA29F33BBE2927BD5730625105C993 /* histogram_enc.c in Sources */, + 4C2FF50CEFF8089782BF69B0201BA4A1 /* huffman_encode_utils.c in Sources */, + E52156D72B247DB3D747B122553BFB69 /* huffman_utils.c in Sources */, + 932BC8C27900D27C048A5635E7231CA3 /* idec_dec.c in Sources */, + 6FC8633F5F4D6B865FB5C871A83185B2 /* io_dec.c in Sources */, + 5209C1A3570588A7B77161FA9EA55C02 /* iterator_enc.c in Sources */, + DC173178DA7CC9561947B30F462745C4 /* libwebp-dummy.m in Sources */, + 863E7306199CE0AEF211451199BB3C75 /* lossless.c in Sources */, + C49CBA7D57BFBE1D3297A18813D1067C /* lossless_enc.c in Sources */, + 0769FBA2E0CC84A1B08F7B9F716361F9 /* lossless_enc_mips32.c in Sources */, + 920C1A9E23C3CE15BF44203272B96908 /* lossless_enc_mips_dsp_r2.c in Sources */, + 64E1CC958AA43AC1F27EB7AC00496239 /* lossless_enc_msa.c in Sources */, + D5DBCB44CC01B3265CB5691D80FB1CE2 /* lossless_enc_neon.c in Sources */, + 366784118C275CC1C4321EA25C25E756 /* lossless_enc_sse2.c in Sources */, + 90DFC2E073F83E7EE947EFCCB868B573 /* lossless_enc_sse41.c in Sources */, + A403C1C5410219C8C51B2C2F7EAC7FD8 /* lossless_mips_dsp_r2.c in Sources */, + 2C96A318BE047B6E68309B615CB5B8FB /* lossless_msa.c in Sources */, + B1DEBD8F6B20A33C8CA774C87DCFA050 /* lossless_neon.c in Sources */, + 0763E96624CE87A93B0FEAE0087698C2 /* lossless_sse2.c in Sources */, + 49C64C6D505629CD6B37FA8D5F68CDA1 /* lossless_sse41.c in Sources */, + 3128BD706592ABF336A95E04E8262330 /* muxedit.c in Sources */, + 24FA5CC8250E9A64219FA2F3201539A5 /* muxinternal.c in Sources */, + 2BE4EE63CF1855AE9F3E6F93F06119CF /* muxread.c in Sources */, + 72A25A5054A18E2686A42633ECCA296B /* near_lossless_enc.c in Sources */, + F9A4C2F20661D4648A77FE2017B331AC /* palette.c in Sources */, + 49CF13727C6680117794AE1A86BFAF0F /* picture_csp_enc.c in Sources */, + 12BAC0D88E72578D863B0CCFE7D8DE98 /* picture_enc.c in Sources */, + 87560A1A80987B82CE618F24090C35C4 /* picture_psnr_enc.c in Sources */, + 61E2F6FE736F568F36926985FE3C7A80 /* picture_rescale_enc.c in Sources */, + D5D2B4102317BFE08EDDC3EA2E5C187F /* picture_tools_enc.c in Sources */, + 6F9D0DA8753977B211234613C24F41D1 /* predictor_enc.c in Sources */, + C00938977A12337E087F0515C3F95647 /* quant_dec.c in Sources */, + 3A5CFD6DFC22343E29E2ABECFC1C3701 /* quant_enc.c in Sources */, + 278DFD4F490310BC9B416EC7C28254AF /* quant_levels_dec_utils.c in Sources */, + 51549AB4DCEAACB95CD86750694E1D87 /* quant_levels_utils.c in Sources */, + 25E001DB4C1AF58D359B83CB604EC927 /* random_utils.c in Sources */, + 9E436802F5A5E80EEABE067709B78441 /* rescaler.c in Sources */, + 8FBBE87E9886B5BE2B5B44D08812B43A /* rescaler_mips32.c in Sources */, + 6989DB840B86F4E1507C836814F8A35F /* rescaler_mips_dsp_r2.c in Sources */, + 4901D71B1E8609E9BF02617F741F6512 /* rescaler_msa.c in Sources */, + 72F46AF65F99A2D2D1D4040A6A7480D7 /* rescaler_neon.c in Sources */, + 1ACCB8C5C27C1444D4F45DBC081965F6 /* rescaler_sse2.c in Sources */, + 7A6CA3F362C73E128D9A1227F9B73A38 /* rescaler_utils.c in Sources */, + F4603A718448B8BED2AAE202277C275D /* sharpyuv.c in Sources */, + 5DCFDCA51964B19641B53CDEEA1496D5 /* sharpyuv_cpu.c in Sources */, + 1C7FE625D2FEBBE2F565CB6459BDB0AB /* sharpyuv_csp.c in Sources */, + 8659421801012A5C8BCC0C73F8FF7334 /* sharpyuv_dsp.c in Sources */, + AD12190855956D547F04D5CAC6F6F1FD /* sharpyuv_gamma.c in Sources */, + F6841A1B6D6884FF2D41FFDBD7703ADF /* sharpyuv_neon.c in Sources */, + DE3C8D3A427873A89B34556C4A2A0729 /* sharpyuv_sse2.c in Sources */, + DC9E902FCFE39F70AEBDCE8442F7CB4E /* ssim.c in Sources */, + 834807B583F5FE3035045614D90674A0 /* ssim_sse2.c in Sources */, + B0418EE57851D799582EC87D566AB8CE /* syntax_enc.c in Sources */, + C9B40ABBE5B695C9F9CCEC8658B796BC /* thread_utils.c in Sources */, + 03E4969A888B2C0C264DE71ADAB66527 /* token_enc.c in Sources */, + C565A821906F24C86701339A18D69D7B /* tree_dec.c in Sources */, + F9AA73F3AE4A7D5CAC163509F5AE5363 /* tree_enc.c in Sources */, + 0A274738A00EB1D66898D470DDBFD136 /* upsampling.c in Sources */, + BC0830F2A2C68B289F2B438F1E3A9FA9 /* upsampling_mips_dsp_r2.c in Sources */, + 33EDF0B768037D79D2D812243EAEB5C9 /* upsampling_msa.c in Sources */, + B8F36C55BE219F6B7E9960D5580C72B6 /* upsampling_neon.c in Sources */, + E9470E64737A023126AFD77E10DE3E41 /* upsampling_sse2.c in Sources */, + 10D3D2FE2F2333DF1C45411E7620D35E /* upsampling_sse41.c in Sources */, + 22E8465DC034A34C40E02C7B3E38AF50 /* utils.c in Sources */, + 1B1B3DD8D52AFFEF0497E8558A52209E /* vp8_dec.c in Sources */, + 8330FD20F044A6BD4EE38D8E791E4FEB /* vp8l_dec.c in Sources */, + 02C66795522176B28B835F653FC4A868 /* vp8l_enc.c in Sources */, + 26871F8BD6198C4D087B2EE2E8A20EBD /* webp_dec.c in Sources */, + 8F77F520107C9BE9E88265F2B4B3D1D4 /* webp_enc.c in Sources */, + 130A51F65E41782E0D2C44FAD405C472 /* yuv.c in Sources */, + 87EEDE0EC414BCF701CDCF1963EA053C /* yuv_mips32.c in Sources */, + DAB03D435BA487BD030524A9F9312864 /* yuv_mips_dsp_r2.c in Sources */, + C11C67B63B259776A719E711DC1735E1 /* yuv_neon.c in Sources */, + CBAA7237BD9FD30B79F84F6F0F29634C /* yuv_sse2.c in Sources */, + 907545A1764CE1C7724399E65237DC20 /* yuv_sse41.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D3B7F4CF2F6E65F3DE5121DE7D972D66 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D567B5EB900BCD8C3D681FD57ED56BE9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C0763E17DFCC612339CA455AAAB24188 /* NSBezierPath+SDRoundedCorners.m in Sources */, + A8DE63C8D7C4A284E843DE63FED30A6C /* NSButton+WebCache.m in Sources */, + 8307028B55BA31EE09799F208F709156 /* NSData+ImageContentType.m in Sources */, + 28A85A89E4CC5CF4E4CE71FC660E4730 /* NSImage+Compatibility.m in Sources */, + 0ECDCFA9D12BBA0A59E8236199F7DC44 /* SDAnimatedImage.m in Sources */, + B164FC4CCE6C47414B566E8CC277DE69 /* SDAnimatedImagePlayer.m in Sources */, + 271276372725504F72DF758F8FF03934 /* SDAnimatedImageRep.m in Sources */, + 7B262866D0FAFCAD2B5470D3A35748B2 /* SDAnimatedImageView.m in Sources */, + B6B29C558DA1B544550B5C1985FBA705 /* SDAnimatedImageView+WebCache.m in Sources */, + CEA2225A7837701061A40BBCB37BA5C3 /* SDAssociatedObject.m in Sources */, + 7C1B11171AC88076494FF044DB0D4BAF /* SDAsyncBlockOperation.m in Sources */, + B0D8D212F563CF188A5C51F99359E31A /* SDCallbackQueue.m in Sources */, + 189966E79B3BFB2BD1E49CC56F03DCC0 /* SDDeviceHelper.m in Sources */, + DDAB12CDEEF1489E148C427B847F103A /* SDDiskCache.m in Sources */, + 4FD35E0DC4C9F53BE89F91977C085562 /* SDDisplayLink.m in Sources */, + 9BA717307CD936629FAE4A1515CCF862 /* SDFileAttributeHelper.m in Sources */, + 52634197F97213E2DD98538DCD8BC6D4 /* SDGraphicsImageRenderer.m in Sources */, + 37208D2FEBA0C1A0A2CFF4918326F4F9 /* SDImageAPNGCoder.m in Sources */, + 3D752C60755FCF890E8579C4FAEBB6B5 /* SDImageAssetManager.m in Sources */, + 746AE37FC215D00A060089B21B1D22D5 /* SDImageAWebPCoder.m in Sources */, + 71029A5C5D8B9D12FBCF8461459E95D1 /* SDImageCache.m in Sources */, + 62DFFFA4BDE24874632B3B498C6BE2C7 /* SDImageCacheConfig.m in Sources */, + 45C8C8F139BB9A4A0A45FC6C333FCCBD /* SDImageCacheDefine.m in Sources */, + DD086708752F472B0AB078F335BC4F69 /* SDImageCachesManager.m in Sources */, + C2369277810812BDB6306E99925587AE /* SDImageCachesManagerOperation.m in Sources */, + ACF245BEE605783DBA0E666FED8DBE65 /* SDImageCoder.m in Sources */, + A43B51A077E9450423F6E23E3E3A656F /* SDImageCoderHelper.m in Sources */, + AD94DCBF00976709889890A22F960062 /* SDImageCodersManager.m in Sources */, + 23B8C15ECD59DB68A10AEE5BC18A66FA /* SDImageFrame.m in Sources */, + 8FD8500C56E59D86AA72FC774FB3F2A1 /* SDImageFramePool.m in Sources */, + 6F6C920A3E7AEF236B703D2FBA728320 /* SDImageGIFCoder.m in Sources */, + 6201F1CC44EDDCF8F148A9C7B4781C34 /* SDImageGraphics.m in Sources */, + 80F2DB3E5E7E2694D29F0576A8CAD40F /* SDImageHEICCoder.m in Sources */, + 84D497365935DAADC3FA742E390E3EA2 /* SDImageIOAnimatedCoder.m in Sources */, + 1484DE903206BF8D6B6900A0F8A71692 /* SDImageIOCoder.m in Sources */, + ACC5A64D2C9E36024DB07378F7118FB8 /* SDImageLoader.m in Sources */, + 9A079D75446EE8455C3496BCCB758DBC /* SDImageLoadersManager.m in Sources */, + 369320288CC80D26C93803B808FCB61C /* SDImageTransformer.m in Sources */, + C9262973FC4CB1CCC42F745E6778DE4C /* SDInternalMacros.m in Sources */, + 928FCF60E3649C39E281C1DD526CEF07 /* SDMemoryCache.m in Sources */, + 9703F00AD9B433ECD5A6290032A2C05E /* SDWeakProxy.m in Sources */, + B7CD4F8DF0A1CCC8E238605BC22C053E /* SDWebImage-dummy.m in Sources */, + 91D68DE854B45FB77508E2782F9D36F6 /* SDWebImageCacheKeyFilter.m in Sources */, + 1E9951B4A9662CD4C746E3EECF40E635 /* SDWebImageCacheSerializer.m in Sources */, + 2EA5C7350AC28ECBF0BF9640F1AE0F96 /* SDWebImageCompat.m in Sources */, + CA1E0D21860CFD2872029D5CF4E6DF29 /* SDWebImageDefine.m in Sources */, + 4808B2B2052822D84C77C8A62699622F /* SDWebImageDownloader.m in Sources */, + 200355A1D6B2618C8BB30BFA6973FE01 /* SDWebImageDownloaderConfig.m in Sources */, + 27A478FEE0C7EF6A9FE97D7F76571E6F /* SDWebImageDownloaderDecryptor.m in Sources */, + 7876A95068846D36B8F1BD14365B69F0 /* SDWebImageDownloaderOperation.m in Sources */, + 12DF3001E99174FC92085BE6467517B8 /* SDWebImageDownloaderRequestModifier.m in Sources */, + CF69896B8FC7C21E638CD5D730F91543 /* SDWebImageDownloaderResponseModifier.m in Sources */, + 03C5C53DBB1C0342175A24247C8718FB /* SDWebImageError.m in Sources */, + 79B1C51D421DBBC538D8F2644E89C570 /* SDWebImageIndicator.m in Sources */, + 26C23B7B2314ADFC8B910E21F066D80A /* SDWebImageManager.m in Sources */, + 7B6BD3EA8747935609B6204913A6F0A1 /* SDWebImageOperation.m in Sources */, + 2799155AAA7AC8118EC37F5E30D89B6B /* SDWebImageOptionsProcessor.m in Sources */, + 8C7BD9F3D0BD5668940D9E18FA9AEABD /* SDWebImagePrefetcher.m in Sources */, + 89082AF17AF5C1B80EC64F39D659DAC2 /* SDWebImageTransition.m in Sources */, + 9FCBEBABD3BEC78A8C6C2016750AF263 /* UIButton+WebCache.m in Sources */, + 4213B9A582A396D7E3E1EEEA57FE200A /* UIColor+SDHexString.m in Sources */, + 615435C7081677EE9C7B30E52B6FE1C9 /* UIImage+ExtendedCacheData.m in Sources */, + 9B5FB4D7BDEE150249FC25BAD02E4673 /* UIImage+ForceDecode.m in Sources */, + F0411B25B1DBAF9E1D5F5442D6A98F20 /* UIImage+GIF.m in Sources */, + 80A92B7601FF8D498B9A6C7824BB59F4 /* UIImage+MemoryCacheCost.m in Sources */, + 99F98734F451C3423D3CFE18BA45F389 /* UIImage+Metadata.m in Sources */, + 25A38F09D2BE68763FEEFD4C71B99257 /* UIImage+MultiFormat.m in Sources */, + 53BA20933A3747C025F10B4C51EED188 /* UIImage+Transform.m in Sources */, + 6F42B4D96019FC7A8EDE1197A01E9488 /* UIImageView+HighlightedWebCache.m in Sources */, + 3AB4C6AB558F8622F11B8D3F24909492 /* UIImageView+WebCache.m in Sources */, + 7D17155B34A28B6119D81475F1E57324 /* UIView+WebCache.m in Sources */, + AE0B3DCEC831425C787D002509B4C8F1 /* UIView+WebCacheOperation.m in Sources */, + AA916DADA92B6BF9B60F104C7C77518E /* UIView+WebCacheState.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -14049,6 +14455,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DFC181D4377A1BAD6585D3C9978A2C3D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; E01EA717D0A0AF8E12D145A5F2252FD2 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -14128,30 +14541,24 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - E95AA2DA471BE0C97D4B9E100073684D /* Sources */ = { + E873BFFDF3BD266B69A127FD928FE93D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - EAE616CE827CD647AF659A0331E9E818 /* Sources */ = { + EA5A1E1084CCFC39C15254A90B1AE19A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EB1788181A2BB691931C15EE395D5DAD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 825237AF1EFB2268D5416A7AD88E01ED /* Array+Sort.swift in Sources */, - 2484ADD920601725235FE16E245C687C /* IQDeepResponderContainerView.swift in Sources */, - 511743EA21722DCB02BC11F82698A057 /* IQKeyboardToolbarConfiguration.swift in Sources */, - B26E12AF738E9902EC107EF28E667940 /* IQKeyboardToolbarConstants.swift in Sources */, - 19ECC094BE1E1C01F0BEFEEDC266A38E /* IQKeyboardToolbarManager.swift in Sources */, - D2CAB6C0EDD7A68CE6C7926A1B665726 /* IQKeyboardToolbarManager+Action.swift in Sources */, - CFBA04B4F951AC600813F7C6735C1A4D /* IQKeyboardToolbarManager+Debug.swift in Sources */, - E34C329C1184FB2A2327D471B5ED48E2 /* IQKeyboardToolbarManager+Deprecated.swift in Sources */, - 24FBD47B712E095533043716EC91A2A6 /* IQKeyboardToolbarManager+Internal.swift in Sources */, - 12FD280D22C0437C026AE1532F1C1E9C /* IQKeyboardToolbarManager+Toolbar.swift in Sources */, - 4FA185AE9B8476AA7B79DA5AAC419A91 /* IQKeyboardToolbarManager-dummy.m in Sources */, - 9543FC7093A9F1F3E2A1E438DD179C13 /* UIView+Responders.swift in Sources */, - 27A5B531FBB9758A4C8EBD45F7D46B34 /* UIView+RespondersObjc.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -14166,6 +14573,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + F71B644154811CF94B90B2EF77E8653B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; F7560DB6A2B6BB388140846E54CE6F5C /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -14260,671 +14674,675 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - FBB63F3C895372F15B9D7DA98AD1BC8D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FF8726859A2FDCDAA260B4B9716AE1A2 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 0423424C517A6FF31FBC7257498A4912 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZXSDK; - target = 8194323886ECAF7E912EFDAFC84017AA /* ZXSDK */; - targetProxy = 89B91581100671498BD94B302D6F17C9 /* PBXContainerItemProxy */; - }; - 06EDD5B89C3D0C2108751E14413DA766 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Alamofire; - target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = 25E379AE25F5D44AF3A160CFBCEC6DE4 /* PBXContainerItemProxy */; - }; - 0A270D927D85F31292A0BA59517E8649 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "RxRelay-RxRelay_Privacy"; - target = 39101A2B1096DFB129FCDE5490875054 /* RxRelay-RxRelay_Privacy */; - targetProxy = FE6ED4719C4114B1B47F408C5C504BE3 /* PBXContainerItemProxy */; - }; - 0C758B3319CE3765BD94EF42337CCC3F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardNotification; - target = A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */; - targetProxy = 06463C8289753D95DDDF907052B88759 /* PBXContainerItemProxy */; - }; - 0E0E74C2D4426EA2441F10A0A60BF5C9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = OpenIMSDK; - target = 0028E46539689892CC926BB8D811EF54 /* OpenIMSDK */; - targetProxy = 1FF5B535B3940EB099FBFFE6BAC72168 /* PBXContainerItemProxy */; - }; - 16E79159685C75B532CEF6D862DAABC8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SnapKit-SnapKit_Privacy"; - target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; - targetProxy = 5FEA73E15104EF1E4A1B9DD6C99111EB /* PBXContainerItemProxy */; - }; - 1A6D8A996B55A6BB9FB4E590163AD294 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "IQKeyboardNotification-IQKeyboardNotification"; - target = 2B8FF445A5162845FAB9EC00FC92B694 /* IQKeyboardNotification-IQKeyboardNotification */; - targetProxy = E17026AEBA27086027457B5ADEDB753F /* PBXContainerItemProxy */; - }; - 1E34ADB9A2FEDE5D364BB05A2BB68BFB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "lottie-ios-LottiePrivacyInfo"; - target = BF2A15FEC3F3424BBC4B9AD5F86F2D54 /* lottie-ios-LottiePrivacyInfo */; - targetProxy = A59AD2460664BADA968DD6E7065D2D3F /* PBXContainerItemProxy */; - }; - 1F6B9529EA8851EFFFDF3AE7A59897C1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = OpenIMSDKCore; - target = 0E87F100EFC3B44F5BB5AF12375D07F1 /* OpenIMSDKCore */; - targetProxy = 44977C8C515E8BC32C6EBEB2C8BD7D12 /* PBXContainerItemProxy */; - }; - 229DF5CC4CE2B68D7FC375271C40DD18 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libwebp; - target = 47D2E85A78C25869BB13521D8561A638 /* libwebp */; - targetProxy = 89E0D584BA990913567091EC515D197E /* PBXContainerItemProxy */; - }; - 24BD652E0B8C2522FEC261C98350926B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 6417F0F16845441ED9CAAE8D86804FFA /* PBXContainerItemProxy */; - }; - 24F5C489A5CAB8B16DED42BA2A359BCD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MJExtension; - target = 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */; - targetProxy = 244DDC304A1C3FE446ABB68C2F8E47AE /* PBXContainerItemProxy */; - }; - 2793407C6B54BE79E0F479BDFFE4F0D8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = 8E91AD5D12BB7EC4472712E9D734717E /* PBXContainerItemProxy */; - }; - 27F0CDE14281B8CB610803FBB1B167D7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GYSDK; - target = 17D542296AD0C26B1C5815268E5C6BF6 /* GYSDK */; - targetProxy = 6095D2B81CA66FE208380E49962E701B /* PBXContainerItemProxy */; - }; - 28BD5273C13642D7BA13101F0911C7E5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardCore; - target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */; - targetProxy = CE99528F856F7EFF6543E5AF17875326 /* PBXContainerItemProxy */; - }; - 29E3F9DFCC9FBE2FAE76790C4ECAED2C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardReturnManager; - target = 0981F89DB5DA3FFCFFEBDE1F56287054 /* IQKeyboardReturnManager */; - targetProxy = 87FC6AABDB23D7FF2726CC40BAF15109 /* PBXContainerItemProxy */; - }; - 2A9641E11BC725AE467BFE3CBD3E55A2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardToolbarManager; - target = 020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */; - targetProxy = B81587444BF1FD0218E2208B3678FFB2 /* PBXContainerItemProxy */; - }; - 2B851C01CA72080372960C311BC1C3A1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "IQTextInputViewNotification-IQTextInputViewNotification"; - target = 4502C7427440BEB17A50C0BF6E638A85 /* IQTextInputViewNotification-IQTextInputViewNotification */; - targetProxy = BD8798429F2E1015908BBBE5513B1DEE /* PBXContainerItemProxy */; - }; - 2E4D8563217D17E396DC1DC6DD804833 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardCore; - target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */; - targetProxy = 137C56D61C9FFBF4B78C31122C39A264 /* PBXContainerItemProxy */; - }; - 34D74EF0976DCD06A98A329EEB6A9A6B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = BB06943732499A1F6F6BAAE1D30483CD /* PBXContainerItemProxy */; - }; - 3807AD07A236EA168BF6A364ED07C782 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQTextView; - target = 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */; - targetProxy = 8234E433BA1E308467D0C0BB4CCD7092 /* PBXContainerItemProxy */; - }; - 3A9372AAC6B93BA7412E41FFFFBC65D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxCocoa; - target = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */; - targetProxy = 617BD99068746066474E219AB7DCDDD2 /* PBXContainerItemProxy */; - }; - 418A5F7852FD349835E60C16DD507C67 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MJRefresh; - target = 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */; - targetProxy = 2CB1EE1F7FF3714527E0172E800FE0AB /* PBXContainerItemProxy */; - }; - 4563B0373B6E25797E0E63BA07DB9A12 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Differentiator; - target = 212F79CE462FC723AF42979B57FBB8A6 /* Differentiator */; - targetProxy = 6698AE69906FE54347F76FE5A09F9744 /* PBXContainerItemProxy */; - }; - 474BA1D6BA459E5E6306C93E0E31A41A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "AlipaySDK-iOS"; - target = 4847ACB1E2799345AA74D9E317048D58 /* AlipaySDK-iOS */; - targetProxy = 58A3D1F04069798EE10AA0BD302A0D43 /* PBXContainerItemProxy */; - }; - 48985134A9454E26DE54FC95B60DF4B6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "IQKeyboardToolbar-IQKeyboardToolbar"; - target = B247F77A0CD5E19C8187A9BA1EB58C09 /* IQKeyboardToolbar-IQKeyboardToolbar */; - targetProxy = F90FA9F5EC9C9EDE48802C2296620F70 /* PBXContainerItemProxy */; - }; - 4B58B6D9FD62717F08C97DC2873BCB87 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = YBImageBrowser; - target = B97FC50FB8C4390DDCCA281E85E7AD84 /* YBImageBrowser */; - targetProxy = CE8BC8063D05ECAF125BF3FBADDD4219 /* PBXContainerItemProxy */; - }; - 4DF6DC90A69ABF06C5FE87ADFB9F481D /* PBXTargetDependency */ = { + 00A1072D085D33FF9E229983C05DBFD6 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "RxCocoa-RxCocoa_Privacy"; target = 5C92E047D2B317BFB31393F449A9EA0D /* RxCocoa-RxCocoa_Privacy */; - targetProxy = 23490CF8E52973EEBB2545881DA768EF /* PBXContainerItemProxy */; + targetProxy = 72C08720005281AE6206FAB73EFB2553 /* PBXContainerItemProxy */; }; - 52D2E18D5980B4CAEB5BC8A9694601EE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxDataSources; - target = 401909D4FB2014BF539896BF0CCA48C2 /* RxDataSources */; - targetProxy = 3B0B8661A87BC63E7130D76B921302DF /* PBXContainerItemProxy */; - }; - 5422A638FC545C95EBA20704B1FCD8E4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = DDD515447CCA93F806AAAE776727CC46 /* PBXContainerItemProxy */; - }; - 57D0AB67F94696CE24C38704A19E8ACE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SDWebImage-SDWebImage"; - target = 94CFBA7D633ECA58DF85C327B035E6A3 /* SDWebImage-SDWebImage */; - targetProxy = E68089470167F492A81316D2665D6A42 /* PBXContainerItemProxy */; - }; - 589545B23EBD0FAC78937DBAE7B1A19A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardToolbar; - target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */; - targetProxy = 4E799023B611D10F37D971171776FAF3 /* PBXContainerItemProxy */; - }; - 5D710C4ED1B517BEDDD1A633C1827954 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxCocoa; - target = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */; - targetProxy = 351468779D2EAAD8A4E07915599C7551 /* PBXContainerItemProxy */; - }; - 5F02745808F174D51E57F01436ABB372 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardNotification; - target = A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */; - targetProxy = 7779A1506585323E855CF257360A560F /* PBXContainerItemProxy */; - }; - 5F38C0ED219C3396D3234A7027D1D999 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AMapFoundation; - target = 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */; - targetProxy = EB7827ABAFB11B2C1C8ABA73D74FFDD6 /* PBXContainerItemProxy */; - }; - 61E289E0A9065296349039D1D6E9F9BA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CocoaLumberjack; - target = E95654B155D25890BE8E26081FCA8265 /* CocoaLumberjack */; - targetProxy = BEBCCE129C3FAE08885BCFD5BD9205E0 /* PBXContainerItemProxy */; - }; - 63FBBF33E794DF4852E334EC554EF841 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = KingfisherWebP; - target = 0D78006448081C29492BCBD9AE8ECC81 /* KingfisherWebP */; - targetProxy = E3612B3DD75B152847A2E4700FC7886B /* PBXContainerItemProxy */; - }; - 689454A68DEC3ACBD89C2AF2BDF7E4FF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardToolbar; - target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */; - targetProxy = 6E073E598E3EA99076172DA844BD3E66 /* PBXContainerItemProxy */; - }; - 6917B6E71FCEC314AB67E58C93947011 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftKeychainWrapper; - target = CF903DF43E111410ECA0C288D36FA21A /* SwiftKeychainWrapper */; - targetProxy = E4DEA0D02B5FB226C50215DE5EEE890E /* PBXContainerItemProxy */; - }; - 6995BCBDB8E4C3A8A27B6C53031785EA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AMapSearch; - target = 54F872FDE6669F86C58C8075211FE643 /* AMapSearch */; - targetProxy = DA23849F151292CAC144283C9731C6BC /* PBXContainerItemProxy */; - }; - 69F32127477388DB1EF47C989653AA3C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDWebImage; - target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; - targetProxy = F55BBABB60E6185DE4DEF49F651C0513 /* PBXContainerItemProxy */; - }; - 6A65BC82B097A262E0ECC8104999C714 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Popover; - target = 89ADB0D61D0BE9648E9853F5F8BDA717 /* Popover */; - targetProxy = F22C0B0D2654CE7D60475F4A0F317A4C /* PBXContainerItemProxy */; - }; - 6E2911D5C5E2792E0D3E97DAF942B8ED /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "lottie-ios"; - target = 0B967D7F8561D42493EE289EC8D450D1 /* lottie-ios */; - targetProxy = 251185EBB34BA6D4BE416746A7A9B737 /* PBXContainerItemProxy */; - }; - 6FDE263B4B3D335FF258B018B24FB7EF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = YYImage; - target = 822E44240F2922DAB12018A6B649BD19 /* YYImage */; - targetProxy = 8F8EA086D17C871ECB9F011BB4399293 /* PBXContainerItemProxy */; - }; - 714C6A6DE5889D6FEF0C0D3F6B46824A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardToolbarManager; - target = 020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */; - targetProxy = 83502488CB49241E8DF30052D6327C6E /* PBXContainerItemProxy */; - }; - 7223D67E1534958016F47E100734166E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "MJRefresh-MJRefresh.Privacy"; - target = B26054DF1DEA11585A231AF6D1D80D5E /* MJRefresh-MJRefresh.Privacy */; - targetProxy = 44F685DF3ECED9770EBF196548A52EFF /* PBXContainerItemProxy */; - }; - 75D1C2E049377428E0F5BAD89A42CDAC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQTextInputViewNotification; - target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */; - targetProxy = 3A542A89DBC278D6D53B97A0397FA913 /* PBXContainerItemProxy */; - }; - 776ED604F2D6B820B3270532E2127EA8 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ObjectMapper; - target = 162E649F50FEC62B61BDD87D1BD422B4 /* ObjectMapper */; - targetProxy = E631D3C6283AF585E5A7E923F001EC85 /* PBXContainerItemProxy */; - }; - 809C6BB1B364064A1EB1A7BC9739B2D1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = 4010404738D37E89EA60E90F78D27031 /* PBXContainerItemProxy */; - }; - 80A6E6B2BD507370373167F3DF66659C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "MarqueeLabel-MarqueeLabel"; - target = CBFB5A372F4DE9D4BC6B9ADA98B80BFE /* MarqueeLabel-MarqueeLabel */; - targetProxy = B4BDFA40DE5E6036BBECD2EB7B66B29E /* PBXContainerItemProxy */; - }; - 84497B27C720F031D3E7C120FA160FB6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AMapFoundation; - target = 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */; - targetProxy = 5E8B6A6FEC9A5EACF8141B1EA858ACC8 /* PBXContainerItemProxy */; - }; - 8602DE5A03B3206977FCE64395F9BC6F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SDCycleScrollView; - target = CBED833AAD6266F3AEFE9BE31C68E094 /* SDCycleScrollView */; - targetProxy = BDE639580A000A2BFE14DF3515BE586D /* PBXContainerItemProxy */; - }; - 8C9B20CA05D6610DBC8634EA66CA201D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardCore; - target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */; - targetProxy = 550F076493239FB30A4EE33B88AF9F5F /* PBXContainerItemProxy */; - }; - 8F28C015BFED2FBC5A4F2EE229EE4298 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftyUserDefaults; - target = A049F3164EBC335A7982A4E1FB3A5EAA /* SwiftyUserDefaults */; - targetProxy = 2CAEE310D3B97BAA4B4540B2F5BCD32E /* PBXContainerItemProxy */; - }; - 925E49A503DD65CF0410C5E0C24E16F9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SGQRCode; - target = 2035A387A5D5D85BEF7F693731454A3D /* SGQRCode */; - targetProxy = 957B3DDF554B4518F813C6CAC2B8A130 /* PBXContainerItemProxy */; - }; - 93ABE1C778AFF8E2A9551EF47F2263AD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "ObjectMapper-Privacy"; - target = E68E71E462C154107C49C379E539826E /* ObjectMapper-Privacy */; - targetProxy = 5AE3B621B1CA9B1AA9EF9401040C162D /* PBXContainerItemProxy */; - }; - 9C63E297360D2C008DB2A7A057984497 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = OpenIMSDKCore; - target = 0E87F100EFC3B44F5BB5AF12375D07F1 /* OpenIMSDKCore */; - targetProxy = 6A5E8AD821DE5186B7E4B0DB322E54FC /* PBXContainerItemProxy */; - }; - 9F154867C1546E6B38EE53F105E0E6A4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "RxSwift-RxSwift_Privacy"; - target = 11779BD43CF8155A53E2C00B1566A19F /* RxSwift-RxSwift_Privacy */; - targetProxy = AA24B487121696F2E622121056444F4D /* PBXContainerItemProxy */; - }; - A4415C13DF30CDB026B7F465A25913D6 /* PBXTargetDependency */ = { + 02D15F927AE4B4488778259A1FDCF822 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Kingfisher-Kingfisher"; target = 9828BBC09E9FB1238624113D7456E59E /* Kingfisher-Kingfisher */; - targetProxy = 291AB26A08BE59A9CF84C48A9280A9D1 /* PBXContainerItemProxy */; + targetProxy = 1D943D61C4FC1EFCE5755ABD4F4D2B05 /* PBXContainerItemProxy */; }; - A64B4139FBE40A8C7EDA0251EF0F4859 /* PBXTargetDependency */ = { + 02DCF412CCF54ABF196C58318A06952F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = YYImage; - target = 822E44240F2922DAB12018A6B649BD19 /* YYImage */; - targetProxy = F733C729C72BE1DCD0D28268F2F49834 /* PBXContainerItemProxy */; + name = "AlipaySDK-iOS"; + target = 4847ACB1E2799345AA74D9E317048D58 /* AlipaySDK-iOS */; + targetProxy = 711580CB1E485FAD6858FE8BDFBCF41A /* PBXContainerItemProxy */; }; - A7251C0B1CD15B90F362B6371D9ABEB2 /* PBXTargetDependency */ = { + 03BE676D6E796F73D6FDE561982E015D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = AMap3DMap; - target = 3957A4F8F4B8823C2472883F7D067592 /* AMap3DMap */; - targetProxy = DB6D8BDA071E9775836E8BBCAE676643 /* PBXContainerItemProxy */; + name = IQTextInputViewNotification; + target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */; + targetProxy = D5FB8EBC028DC94ABD37F92E03BF65B7 /* PBXContainerItemProxy */; }; - AB2ECBAF111733CC1E8352C2268369B9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = HXPHPicker; - target = 6968C202A297A606D5EACC3679AAA627 /* HXPHPicker */; - targetProxy = 21B48BBB7EABFF2A496C879EB5D4C009 /* PBXContainerItemProxy */; - }; - AEF4127D51E2B1A6B9A82E278A399887 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Kingfisher; - target = E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */; - targetProxy = 9EA5F55EAE063424752D3D0C69BAE494 /* PBXContainerItemProxy */; - }; - B1771CC8AEC0A0F67E148386180E2090 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "CocoaLumberjack-CocoaLumberjackPrivacy"; - target = 276021C4482165D46E0CBBEFB822FE95 /* CocoaLumberjack-CocoaLumberjackPrivacy */; - targetProxy = A68E61F850DBF2CE19F5C798AC2C4E9B /* PBXContainerItemProxy */; - }; - B2072E6A13996825B6F5921C0E227A76 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Alamofire-Alamofire"; - target = 976126A1CE06DC6E162563800E1BDF14 /* Alamofire-Alamofire */; - targetProxy = 1D808FF63478B530FFE6E3EEFF043D66 /* PBXContainerItemProxy */; - }; - B8757CEC296AE79AAE009388BE836685 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MarqueeLabel; - target = C23DB88E45B0ED14F0C8827BE9C46C95 /* MarqueeLabel */; - targetProxy = 94827A004FD74C9C3120375525F6B18F /* PBXContainerItemProxy */; - }; - BBCAD01738D428E18C51619FEB646864 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Moya; - target = 17F9141D333DA1A7BE5937F227221070 /* Moya */; - targetProxy = C4416B962E9529F40E5126CF117DFB3C /* PBXContainerItemProxy */; - }; - BC0D789B7BCA7AB5F8580B8AF266CA7D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "WechatOpenSDK-XCFramework"; - target = 7F18C31A804695333763EEC303E265D7 /* WechatOpenSDK-XCFramework */; - targetProxy = 7CA119DA3BAABAD24A6F78C73396D36D /* PBXContainerItemProxy */; - }; - BF6E306977B6E64CFC3ADC3266986004 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = libwebp; - target = 47D2E85A78C25869BB13521D8561A638 /* libwebp */; - targetProxy = 3828D56BFE94CBD1850681EFA642F14A /* PBXContainerItemProxy */; - }; - C1934C77AE323069AA421850DE47831F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "IQKeyboardCore-IQKeyboardCore"; - target = EEE261386011CDF271BE289F73FF5959 /* IQKeyboardCore-IQKeyboardCore */; - targetProxy = 1CB9B8C07A8A9891C031B68836854138 /* PBXContainerItemProxy */; - }; - C2B537A7B0121571C7968255381B9EAC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AMapFoundation; - target = 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */; - targetProxy = 09F00EF127F628393D4A26B1A7AB21A7 /* PBXContainerItemProxy */; - }; - CA923E8E6E0A16A454FA2C47B6696544 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Alamofire; - target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = 01A6350127486356A1C2E85210A9D9F7 /* PBXContainerItemProxy */; - }; - CD6625D0A5E51DDBD5BE9B906CD190E3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQTextView; - target = 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */; - targetProxy = E30502CDF95F0580DCCB4E0728339B4C /* PBXContainerItemProxy */; - }; - CF114D96576327C59773C0EC9865FFF2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = AMapFoundation; - target = 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */; - targetProxy = 346A27623BAC9A07E38D677AA3C8EAB8 /* PBXContainerItemProxy */; - }; - CF7AA26E6D68D6289431F15F070521F4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxRelay; - target = 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */; - targetProxy = CAEFA3ED1143385F67434B9DA8870286 /* PBXContainerItemProxy */; - }; - D991E1747DECD8EF3091A3C02FF0BD58 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardCore; - target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */; - targetProxy = FBFD31B834AB5C365995BB83B4E10112 /* PBXContainerItemProxy */; - }; - DAB0B58F0B3BED768A9B0F0BB1868BB9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = GTCommonSDK; - target = 997E783A70C18DC9BA830488608C03AA /* GTCommonSDK */; - targetProxy = 1C8EE194FACDF5C3033FD7F2B2AFE0E3 /* PBXContainerItemProxy */; - }; - DB3FA8A17D62B44653577F81BBC78D4F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftDate; - target = 6038CE6006EFBE9D905454CF01909C42 /* SwiftDate */; - targetProxy = 4D5B7CBCEA667224D25C228EAFC38883 /* PBXContainerItemProxy */; - }; - DB546251EA6DB2A51377E50F06779EA6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Masonry; - target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; - targetProxy = EAB48EE6968E065C1D9DB63BA488C24C /* PBXContainerItemProxy */; - }; - DB812A3F914FF838A6360E92BE18ACF1 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "SwiftyJSON-SwiftyJSON"; - target = 677650A76A720691B88A6959EFED6418 /* SwiftyJSON-SwiftyJSON */; - targetProxy = 5AB7291B64E5815D31A12FF8566204DC /* PBXContainerItemProxy */; - }; - DD21BD7E9672B4F13EF7DE2FFEA26DFB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = B705FB637F1BBFCB6579C23344956B53 /* PBXContainerItemProxy */; - }; - DF0192CB058D6E4DAA11A8136A3002F4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftyJSON; - target = D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */; - targetProxy = A920C06099E87CF8D916443CD9A164EC /* PBXContainerItemProxy */; - }; - DF953A6B0F070C79FFDEB6B95072FB36 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MJExtension; - target = 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */; - targetProxy = E2AEEDC1607FF9458AA1B4DB2E2A76EF /* PBXContainerItemProxy */; - }; - E31B8ADFB939C29A420C91B025937B5A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "IQKeyboardToolbarManager-IQKeyboardToolbarManager"; - target = 7C5613175BBC4BF67E36DB4FBEBC01D0 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */; - targetProxy = 65E50FFCCC371775D923800BABEFB3B2 /* PBXContainerItemProxy */; - }; - E3BA0C8E703DE59FB19C26D247A970A0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "IQKeyboardReturnManager-IQKeyboardReturnManager"; - target = 88810798DA63A2F6611B0970EA276DEC /* IQKeyboardReturnManager-IQKeyboardReturnManager */; - targetProxy = 619CEF8B1A643617590B0E88D79290B1 /* PBXContainerItemProxy */; - }; - E641EE970C8C6EC0575D11D9128B2887 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = B7B9C134FCD75F5BB59532E17B97C8CE /* PBXContainerItemProxy */; - }; - E76212A3A2D1721BA51C1D262DF271D4 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Kingfisher; - target = E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */; - targetProxy = 4052A9D51559EEE02D2F445E659D02B7 /* PBXContainerItemProxy */; - }; - E9A3E7D15D6686E38B55421279DE4D16 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxCocoa; - target = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */; - targetProxy = E068344C6A7510CD60EE8C7E17238229 /* PBXContainerItemProxy */; - }; - EA400D6D6B28C34C0608A602D119CB89 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = IQKeyboardManagerSwift; - target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; - targetProxy = 4F55F321DF9C2250018DD25606C55A69 /* PBXContainerItemProxy */; - }; - EA90E841FE1B83FD460BE5DF34C8A3B7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "MBProgressHUD-MBProgressHUD"; - target = 3AE57FC4CF27B0BC540B3112353377BF /* MBProgressHUD-MBProgressHUD */; - targetProxy = 938DDA32C97451586FE0A98AD9C856EA /* PBXContainerItemProxy */; - }; - EB3A666E9AC00B8B6AE940FA6874A778 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxRelay; - target = 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */; - targetProxy = A6E4A18D00B0A670BC012935EDC0AA0D /* PBXContainerItemProxy */; - }; - EDAC16EE2188486D189990FA13B3456D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = RxSwift; - target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; - targetProxy = 2736CAD34BEA107334B3081DDB656F20 /* PBXContainerItemProxy */; - }; - EE3D14813A7F1781B2A0689D95DF691E /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = MBProgressHUD; - target = 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */; - targetProxy = D4FE30F91F5C24105C61589F44DF5C43 /* PBXContainerItemProxy */; - }; - EEDC1E39AB51D6AAC6540D06A24AB984 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = URLNavigator; - target = 3AEB4A97CEAE5A782BA5E5D6A468A913 /* URLNavigator */; - targetProxy = 2AC7556419A170F98BBE91C1B4CEDCB9 /* PBXContainerItemProxy */; - }; - F12D1B019C7180F20A92D3C2AAF995CD /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ZXSDK; - target = 8194323886ECAF7E912EFDAFC84017AA /* ZXSDK */; - targetProxy = 9AB9C38E4DCCA37D29EC24EF2947CAE5 /* PBXContainerItemProxy */; - }; - F2523D133596D9DAA94F301030473634 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; - target = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; - targetProxy = E9CC07909D25C012E9D227D1C083DA10 /* PBXContainerItemProxy */; - }; - F3FD20E5A63C1BFA024C5E8E681CD267 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "IQTextView-IQTextView"; - target = A6602BCAA6F4F932A586C41D0B7E019C /* IQTextView-IQTextView */; - targetProxy = EE474117261DF6BD7D27B58EF759E9F9 /* PBXContainerItemProxy */; - }; - F6918A53726776461E823475A47C47EF /* PBXTargetDependency */ = { + 053F080C03AA720B6C921F0EA8B4B378 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = IQKeyboardReturnManager; target = 0981F89DB5DA3FFCFFEBDE1F56287054 /* IQKeyboardReturnManager */; - targetProxy = 0B8DB26A8EDC383CE89F82E2A73C1EA5 /* PBXContainerItemProxy */; + targetProxy = 9C23B6E671F3DDEF29CFD700ABB0A4F6 /* PBXContainerItemProxy */; }; - F921C1A1EF134BAC85F4DF9606458914 /* PBXTargetDependency */ = { + 05931D2B26F77153CB3201A4A1B1FB10 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Moya; + target = 17F9141D333DA1A7BE5937F227221070 /* Moya */; + targetProxy = 61510A589B2AA984E10206B244AA35EC /* PBXContainerItemProxy */; + }; + 061A0A7A6AC73DE97E2687A75901F5C8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = GTCommonSDK; target = 997E783A70C18DC9BA830488608C03AA /* GTCommonSDK */; - targetProxy = 758012FD9D7EB54361C1B62A5B44C08B /* PBXContainerItemProxy */; + targetProxy = C4FF52F7A63CA146057AFEE8061A121E /* PBXContainerItemProxy */; }; - F98B4F6C1E5D43B2281CD4D147C752A5 /* PBXTargetDependency */ = { + 06B6359C2148234D64D3CF1461F00BDA /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Differentiator; - target = 212F79CE462FC723AF42979B57FBB8A6 /* Differentiator */; - targetProxy = 22335D1F8C7B94C537A5259BA4C371FC /* PBXContainerItemProxy */; + name = "IQKeyboardReturnManager-IQKeyboardReturnManager"; + target = 88810798DA63A2F6611B0970EA276DEC /* IQKeyboardReturnManager-IQKeyboardReturnManager */; + targetProxy = 0B078191623EB8D1BFC714D4938E6AA7 /* PBXContainerItemProxy */; }; - F9E3CB353BAFA9E9E26238DB24750CB9 /* PBXTargetDependency */ = { + 06CC905783430DCBA4B28924A156B219 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = IQKeyboardToolbar; - target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */; - targetProxy = CDCD2167117F43C93949FA68B3A394FB /* PBXContainerItemProxy */; + name = HXPHPicker; + target = 6968C202A297A606D5EACC3679AAA627 /* HXPHPicker */; + targetProxy = 6A522AD144F85728A937B841E4219A34 /* PBXContainerItemProxy */; }; - FAB28E7185E42F14BA8E7C81771E7BF9 /* PBXTargetDependency */ = { + 08CB616BE7CC88F7F2A67328CB21EF5E /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = RxSwiftExt; - target = ED7124602AA1B5C6A257912C7E8B793B /* RxSwiftExt */; - targetProxy = 8421B4F40D1102DFCA7ABB75FA1D0379 /* PBXContainerItemProxy */; + name = SwiftKeychainWrapper; + target = CF903DF43E111410ECA0C288D36FA21A /* SwiftKeychainWrapper */; + targetProxy = 82CF266E41767644FD6FDD6305E18060 /* PBXContainerItemProxy */; }; - FC8EF6355BA5F6C6FD2BD0348C24DE14 /* PBXTargetDependency */ = { + 09E258F4CBA9A48361CE274E9A3B7F86 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = OpenIMSDK; + target = 0028E46539689892CC926BB8D811EF54 /* OpenIMSDK */; + targetProxy = 9038E5B5FF55EF8D78069E4E04B077A6 /* PBXContainerItemProxy */; + }; + 0E721B89BF12521E129E16FB49548BBA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = B9C34D13AE158515EE54C897C01D3B2C /* PBXContainerItemProxy */; + }; + 119FBF0B2F7BE1CE61569418C63670C8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardToolbarManager; + target = 020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */; + targetProxy = D191F8298F89E8435A773EB0C46B6730 /* PBXContainerItemProxy */; + }; + 11C9AC3D696902A308FAC527831E4214 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MqttCocoaAsyncSocket; + target = B017CC75E2704C686AA0A2203247D9C7 /* MqttCocoaAsyncSocket */; + targetProxy = C008E60717A970F94F53D475F54BF551 /* PBXContainerItemProxy */; + }; + 13814B5F73D6A9D057A4645F22952380 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "lottie-ios"; + target = 0B967D7F8561D42493EE289EC8D450D1 /* lottie-ios */; + targetProxy = BCC1D546C11697A4C2AAFDC6C624F200 /* PBXContainerItemProxy */; + }; + 14566B4B65F642562FC97EA6C971D955 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZXSDK; + target = 8194323886ECAF7E912EFDAFC84017AA /* ZXSDK */; + targetProxy = 9933D71F465BD1267CBE04881A644883 /* PBXContainerItemProxy */; + }; + 14C2A59A23B990EC78D9686BFD09C2E4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GYSDK; + target = 17D542296AD0C26B1C5815268E5C6BF6 /* GYSDK */; + targetProxy = A19C5EB2E87A2319EA469F7A6939880F /* PBXContainerItemProxy */; + }; + 1539E005446B7DAA5069E44BDB998F19 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "RxSwift-RxSwift_Privacy"; + target = 11779BD43CF8155A53E2C00B1566A19F /* RxSwift-RxSwift_Privacy */; + targetProxy = 08CE2068C3A88451E5040A623F2EF8C9 /* PBXContainerItemProxy */; + }; + 16D37F6F9C0102A83E71C6BE6B84C6CA /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MBProgressHUD-MBProgressHUD"; + target = 3AE57FC4CF27B0BC540B3112353377BF /* MBProgressHUD-MBProgressHUD */; + targetProxy = F6973D2F8D6374A9876A0669AC83E21E /* PBXContainerItemProxy */; + }; + 1C4F4702C94163ACD0D7378F24244C9E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDCycleScrollView; + target = CBED833AAD6266F3AEFE9BE31C68E094 /* SDCycleScrollView */; + targetProxy = B87128D8A77E84948FCE5153887EC567 /* PBXContainerItemProxy */; + }; + 21281E0511BBBAA3B120421BDA31D470 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SnapKit-SnapKit_Privacy"; + target = 8A8DB685241263AFDF5E6B20FE67B93A /* SnapKit-SnapKit_Privacy */; + targetProxy = 92A582F518E854FD733F266C5D4796E6 /* PBXContainerItemProxy */; + }; + 22FD2D9961CFCF2D03384022B321BE58 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IQKeyboardToolbarManager-IQKeyboardToolbarManager"; + target = 7C5613175BBC4BF67E36DB4FBEBC01D0 /* IQKeyboardToolbarManager-IQKeyboardToolbarManager */; + targetProxy = E0964E76E3BFDF3A8D89CD0F00020918 /* PBXContainerItemProxy */; + }; + 23950B2FE9701D22FAB1B2F3CEAD4003 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = 5C18B6A1EEDBA0732591A28ECE5A889F /* PBXContainerItemProxy */; + }; + 2442F750D27033389D5ADDB48BD56A14 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = B22045B680BC1B899817EED88D8D5A1D /* PBXContainerItemProxy */; + }; + 24ACCCFD5AC8526CB6FEEC407A94E172 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SwiftyUserDefaults; + target = A049F3164EBC335A7982A4E1FB3A5EAA /* SwiftyUserDefaults */; + targetProxy = A835495F4170F147B9897D5BF2C7A8EC /* PBXContainerItemProxy */; + }; + 2670CA7666FADB6C71B574E88FF46068 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = YYImage; + target = 822E44240F2922DAB12018A6B649BD19 /* YYImage */; + targetProxy = A5E788E6C131456A7332F4B7A799752D /* PBXContainerItemProxy */; + }; + 2C4C823F501A47C36E0AABE5C9C2EFE6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = libwebp; + target = 47D2E85A78C25869BB13521D8561A638 /* libwebp */; + targetProxy = A6527E49C34B922D5300F4DEA05B1C95 /* PBXContainerItemProxy */; + }; + 2D1FFB6A11AC395B33C7986274813725 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ObjectMapper; + target = 162E649F50FEC62B61BDD87D1BD422B4 /* ObjectMapper */; + targetProxy = 48694D4FD0821ECF2A72A26E45A5707E /* PBXContainerItemProxy */; + }; + 2E65B9D035B07836C53FC44882FD5411 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = 7802C1334D1A4C1553F5AB6E79180E1B /* PBXContainerItemProxy */; + }; + 317B2AF08FF5FC2546411F885D9E4AA3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = URLNavigator; + target = 3AEB4A97CEAE5A782BA5E5D6A468A913 /* URLNavigator */; + targetProxy = 5BA101BE17462FBE5638E6027D59942A /* PBXContainerItemProxy */; + }; + 331EE3C0890333418E0AB093E5D012A1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQTextView; + target = 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */; + targetProxy = 8875DBA31FC4A29EB1EBAF05D113AC5F /* PBXContainerItemProxy */; + }; + 3D7C07273E2759A8305988ECF754865E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQTextInputViewNotification; + target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */; + targetProxy = 68BF8CBF31EE5DFCFD3D38F3CCECF281 /* PBXContainerItemProxy */; + }; + 3DA49EDBDF22679824B4053DEDE74E38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Popover; + target = 89ADB0D61D0BE9648E9853F5F8BDA717 /* Popover */; + targetProxy = C6CC084AA4C491E404AEF31A9604EE5A /* PBXContainerItemProxy */; + }; + 3DCF89CB2DF6A9464255DB3BC9FBC079 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = OpenIMSDKCore; + target = 0E87F100EFC3B44F5BB5AF12375D07F1 /* OpenIMSDKCore */; + targetProxy = 56EDFF18E6A7EF62F9778F9D339BA6EF /* PBXContainerItemProxy */; + }; + 3DF275744C0F1F92E2A45684C525CD7B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Masonry; + target = 55AF53E6C77A10ED4985E04D74A8878E /* Masonry */; + targetProxy = 82061C8B1C74993546EF1E76F7EE7AAA /* PBXContainerItemProxy */; + }; + 41378EFE1B6698D2B8BDE3375AA5BCBC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxDataSources; + target = 401909D4FB2014BF539896BF0CCA48C2 /* RxDataSources */; + targetProxy = 3F5CC1B761456481613F5968A6E2F9B0 /* PBXContainerItemProxy */; + }; + 41F47FE08C927557348C692B5934F3A4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AMapFoundation; + target = 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */; + targetProxy = 9DBD8D57BD934FE628357F1657ACBC0D /* PBXContainerItemProxy */; + }; + 44DDEE64FB3449B2B3E6F53316008432 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = GTCommonSDK; + target = 997E783A70C18DC9BA830488608C03AA /* GTCommonSDK */; + targetProxy = FC1664C68B15803EBB10BBA3FAA914B8 /* PBXContainerItemProxy */; + }; + 468FC4A3520CA783060276F1FA9E72D6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IQKeyboardToolbar-IQKeyboardToolbar"; + target = B247F77A0CD5E19C8187A9BA1EB58C09 /* IQKeyboardToolbar-IQKeyboardToolbar */; + targetProxy = 6651E6377E743CA4FD3A4E95EFF1CD92 /* PBXContainerItemProxy */; + }; + 4A9B378EC57730012AB00FFA7E1BA3CD /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = AMapLocation; target = 971676D1C9A11C105647D995975ACE4F /* AMapLocation */; - targetProxy = 687188A6DD7DBEBCC96D7A5F07767DE7 /* PBXContainerItemProxy */; + targetProxy = BE315323C4C47FF428043111D60EAAD8 /* PBXContainerItemProxy */; }; - FD2A66E21108EDDB256389A4711EB95B /* PBXTargetDependency */ = { + 4CAC7E59316C2FDE7A939824D0EDD010 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MJRefresh-MJRefresh.Privacy"; + target = B26054DF1DEA11585A231AF6D1D80D5E /* MJRefresh-MJRefresh.Privacy */; + targetProxy = 1672C6BBECCECC637563353E01C11192 /* PBXContainerItemProxy */; + }; + 4E7D8402DD5720638C3D65337010A923 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SnapKit; + target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; + targetProxy = 900A11A7156655DEE3677C298CD2C432 /* PBXContainerItemProxy */; + }; + 4F160F00FC669AB62227CBF1A69D8CC4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = 0414BDF22C6CC276280BDBA72B08F65C /* PBXContainerItemProxy */; + }; + 5212F0408404D38D8B1703FBFF1A0195 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Differentiator; + target = 212F79CE462FC723AF42979B57FBB8A6 /* Differentiator */; + targetProxy = EACB696E9FAB7D18440A6DD836076FFD /* PBXContainerItemProxy */; + }; + 5321810D064BBAE1E9CDBF73A2AAE428 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Kingfisher; + target = E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */; + targetProxy = 962A816AFE6552938E803DAC24B893E7 /* PBXContainerItemProxy */; + }; + 55DF357831ED9BC1DB0033056C869B0F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "MJExtension-MJExtension"; target = B32AF3F43989CBA171BB1FB3957A4509 /* MJExtension-MJExtension */; - targetProxy = 2990B8F4BC142DDF29DD421FC13B3B30 /* PBXContainerItemProxy */; + targetProxy = 9E43213877E86A150CB3395AB1BD2520 /* PBXContainerItemProxy */; }; - FE5B9817129F124FE2216068BE379B31 /* PBXTargetDependency */ = { + 565F3DFF9BA679342F9043CC623DC846 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = IQTextInputViewNotification; - target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */; - targetProxy = D51DDF55D7D77DC559217AD87DCCF030 /* PBXContainerItemProxy */; + name = RxCocoa; + target = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */; + targetProxy = F56741E388B39D1A5A64905DF9B7D036 /* PBXContainerItemProxy */; }; - FF0B57E9EB26306BBB98E52B91423F15 /* PBXTargetDependency */ = { + 5EAFBF615DAF48A2F3E28F72217759F2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = IQTextInputViewNotification; - target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */; - targetProxy = 2DE397E5C1AB94922E974FED0D5E7E32 /* PBXContainerItemProxy */; + name = IQKeyboardNotification; + target = A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */; + targetProxy = C157198BB10755114C07BB7406C647DD /* PBXContainerItemProxy */; }; - FF66E54E7CF9D1BB190AF4ADC129371C /* PBXTargetDependency */ = { + 623EADCF50D7FB34CDAA0B88F5DFBF97 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = DCD38EE22CEFFDC077E0BBA299A4D094 /* PBXContainerItemProxy */; + }; + 6461C8BD9A5F27DC75A5E6BA7AAA64E0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MBProgressHUD; + target = 82B0A41D3031FF27D78E17B0A9A46FB0 /* MBProgressHUD */; + targetProxy = 5F59C655DBC3973217A9541C1C6FA78F /* PBXContainerItemProxy */; + }; + 67D619A424F2BC1B051F9CAB4BFA9804 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AMap3DMap; + target = 3957A4F8F4B8823C2472883F7D067592 /* AMap3DMap */; + targetProxy = 11D34C1D6EF7623D84CC8128C18D304B /* PBXContainerItemProxy */; + }; + 69B99208E6BA6AD0321E7F37C298C0F1 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = TagListView; target = B43A58FC22C898DE29F6E12FE9636507 /* TagListView */; - targetProxy = AD8A31902E3ABC2E470660E5AD02AA2B /* PBXContainerItemProxy */; + targetProxy = 005562AA15FFEA41AE71867F25E6C812 /* PBXContainerItemProxy */; + }; + 6B7A1136FEC9630E5810811A03304F70 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MarqueeLabel-MarqueeLabel"; + target = CBFB5A372F4DE9D4BC6B9ADA98B80BFE /* MarqueeLabel-MarqueeLabel */; + targetProxy = D70CABEAD978481AC5C27E1BD3FB2251 /* PBXContainerItemProxy */; + }; + 6D9C59384F3559350AFE1FDB2CA37BE0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "lottie-ios-LottiePrivacyInfo"; + target = BF2A15FEC3F3424BBC4B9AD5F86F2D54 /* lottie-ios-LottiePrivacyInfo */; + targetProxy = 361A745847E7D60EBF467B63CB36731F /* PBXContainerItemProxy */; + }; + 718FB82B61EAA6741EEF657ACE476A08 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardToolbarManager; + target = 020993F16DA5986DACE118349EBCE9E5 /* IQKeyboardToolbarManager */; + targetProxy = 26CC8E64F4AD955ED447FD144ECF5694 /* PBXContainerItemProxy */; + }; + 71CEE74B9E1954F63D1CA59CF9FF432F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MJExtension; + target = 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */; + targetProxy = 661F360A55C36C733C8034D2EE462790 /* PBXContainerItemProxy */; + }; + 731036B6B7F1CCD04A28C88363BE792B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "ObjectMapper-Privacy"; + target = E68E71E462C154107C49C379E539826E /* ObjectMapper-Privacy */; + targetProxy = 46247FCF2DAB5659B51A80E78B6C0ED6 /* PBXContainerItemProxy */; + }; + 7733274C6E0C595785A2E7696BD16672 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "RxRelay-RxRelay_Privacy"; + target = 39101A2B1096DFB129FCDE5490875054 /* RxRelay-RxRelay_Privacy */; + targetProxy = 27D15A52F64802032F0130937948DD51 /* PBXContainerItemProxy */; + }; + 7CC9A74710C42D1501C895BAF55B9B55 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "CocoaLumberjack-CocoaLumberjackPrivacy"; + target = 276021C4482165D46E0CBBEFB822FE95 /* CocoaLumberjack-CocoaLumberjackPrivacy */; + targetProxy = D9CAB0682DC824983DD8C8336131DB73 /* PBXContainerItemProxy */; + }; + 7DC915678E8254CF93E03735EE74B0A7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IQKeyboardManagerSwift-IQKeyboardManagerSwift"; + target = 982A68D37F5DCBC1FC1FDC0BB2F0EB8E /* IQKeyboardManagerSwift-IQKeyboardManagerSwift */; + targetProxy = 7DA7C2D6F3BF93B0840403916210054F /* PBXContainerItemProxy */; + }; + 81D0C1CE48C78D8960A21CC9B8BB66E2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AMapSearch; + target = 54F872FDE6669F86C58C8075211FE643 /* AMapSearch */; + targetProxy = 4CC59E2DAB42F874FD77E5D348407F1E /* PBXContainerItemProxy */; + }; + 844EE58D8052C7FA612D8983BB848A7A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CocoaLumberjack; + target = E95654B155D25890BE8E26081FCA8265 /* CocoaLumberjack */; + targetProxy = 5CC296B0634082698430B8F8EF10B236 /* PBXContainerItemProxy */; + }; + 87B3CF7A6AEA4860A117BE6197DF4608 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = KingfisherWebP; + target = 0D78006448081C29492BCBD9AE8ECC81 /* KingfisherWebP */; + targetProxy = AAEAC1CB022C91946977932E2F36F554 /* PBXContainerItemProxy */; + }; + 8874094E975774071CC66CE460F5C6FE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IQTextInputViewNotification-IQTextInputViewNotification"; + target = 4502C7427440BEB17A50C0BF6E638A85 /* IQTextInputViewNotification-IQTextInputViewNotification */; + targetProxy = FE7DB9C7D653C78FFFFC8152E5AD0095 /* PBXContainerItemProxy */; + }; + 89D1D0D1D4489194150C65BB3B0729E3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Kingfisher; + target = E8022D22FAA6690B5E1C379C1BCE1491 /* Kingfisher */; + targetProxy = F693C01CC808015A7A5BAD5468236061 /* PBXContainerItemProxy */; + }; + 8C40FA741B59320725CF534BF3EBAE33 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Alamofire-Alamofire"; + target = 976126A1CE06DC6E162563800E1BDF14 /* Alamofire-Alamofire */; + targetProxy = B0ACD0077EA75FA016730C75D87D54A7 /* PBXContainerItemProxy */; + }; + 8D0DABD68F75AE005635BE2D6B73E6E5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardToolbar; + target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */; + targetProxy = CF1FD6D0A950736411D40E1771B30E1D /* PBXContainerItemProxy */; + }; + 8D7361C4F6FE5F91025E75836705AA22 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQTextView; + target = 12890DE3ABBC2CA295E108358D85EE69 /* IQTextView */; + targetProxy = 2DCE738315013DB5A0C9984AD87F34DC /* PBXContainerItemProxy */; + }; + 8ECC0F686D557BA3FD2C4823EECDC82D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardManagerSwift; + target = B490E7485944099E16C9CBD79119D1D4 /* IQKeyboardManagerSwift */; + targetProxy = B94D53E29BDC4FE85F14286CAC4E28A0 /* PBXContainerItemProxy */; + }; + 8FC66720C41E4AE84F637B0A2DD14EE2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SwiftDate; + target = 6038CE6006EFBE9D905454CF01909C42 /* SwiftDate */; + targetProxy = F3D1B8851F2A07DDC598C1CFC751EAFD /* PBXContainerItemProxy */; + }; + 94C567E329025F741BC2E50B5EB8DD0F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IQKeyboardCore-IQKeyboardCore"; + target = EEE261386011CDF271BE289F73FF5959 /* IQKeyboardCore-IQKeyboardCore */; + targetProxy = 49A6EB9F227A89D488C8435C6E92C190 /* PBXContainerItemProxy */; + }; + 97F5677077D12F150E9E2A81F9C5C267 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MJExtension; + target = 4D3BA58D0583DF37575CACAB3DDADC85 /* MJExtension */; + targetProxy = E90ECBB4688323A3CEF17EA6815410D3 /* PBXContainerItemProxy */; + }; + 9943B828208CC1B8924821C99D81BA93 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardCore; + target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */; + targetProxy = 15248462A6902916CD93734DD2D1B4D0 /* PBXContainerItemProxy */; + }; + 9A16765A9DC1FB99C242C68E7264FACC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IQTextView-IQTextView"; + target = A6602BCAA6F4F932A586C41D0B7E019C /* IQTextView-IQTextView */; + targetProxy = E8AA5482A19C7D587D709CC72C114919 /* PBXContainerItemProxy */; + }; + 9AB57BB286C6B3B66A9922B2D4690340 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardCore; + target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */; + targetProxy = 42A5711AAE77808CC59250A7D42C86EF /* PBXContainerItemProxy */; + }; + 9C5610B5C59B89EEAA95B61A07D4619C /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SDWebImage-SDWebImage"; + target = 94CFBA7D633ECA58DF85C327B035E6A3 /* SDWebImage-SDWebImage */; + targetProxy = 30D675D8FB292BC97790B551F7391FFC /* PBXContainerItemProxy */; + }; + 9CFE6EF2F769A079911AA46CAD3E782D /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwift; + target = EA9EA43B3B503823EE36C60D9C8A865F /* RxSwift */; + targetProxy = 1F0037CA940608843934DB210530C610 /* PBXContainerItemProxy */; + }; + 9E397E80B5B748D13CF4BCD1E4A99E2E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "IQKeyboardNotification-IQKeyboardNotification"; + target = 2B8FF445A5162845FAB9EC00FC92B694 /* IQKeyboardNotification-IQKeyboardNotification */; + targetProxy = 71DD00F116BAD0DFAC8EC511E3906D67 /* PBXContainerItemProxy */; + }; + 9F38598720ADB94FCD5D729271A29639 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxRelay; + target = 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */; + targetProxy = D4D375C3A48E507FEB7E84DDB2092278 /* PBXContainerItemProxy */; + }; + 9FA9141BF656042985FBEE89022581C7 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Differentiator; + target = 212F79CE462FC723AF42979B57FBB8A6 /* Differentiator */; + targetProxy = 73DCD6E414CE9A83C0943483E2B19CD7 /* PBXContainerItemProxy */; + }; + A08C5B30F2EC99B5093898EB8BA4F890 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AMapFoundation; + target = 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */; + targetProxy = 0E3A7827B06EC0665DD6957B0DAA7415 /* PBXContainerItemProxy */; + }; + A0B59B7EED6E088DDE107DE1E609B795 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Alamofire; + target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; + targetProxy = 130043C378BF97EED251A863945441F0 /* PBXContainerItemProxy */; + }; + A814D6E3E166EE1D154579D9DB9CD4D8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxCocoa; + target = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */; + targetProxy = 53F50A050E96C7626FC86FF54C0E6588 /* PBXContainerItemProxy */; + }; + A8988DDA2B032FA533D262B179690162 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = 23D42DCB8C00CDFBB554522E6BD15F65 /* PBXContainerItemProxy */; + }; + A9BE54AB584D7D98F5ED5E3B41EE4578 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SGQRCode; + target = 2035A387A5D5D85BEF7F693731454A3D /* SGQRCode */; + targetProxy = C47774166C67169A42A6BDE42E4F049B /* PBXContainerItemProxy */; + }; + ABACB0A175D8B505AFEA6FAA85221E85 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardToolbar; + target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */; + targetProxy = EA60B9C6187F2AE83386DE333F9F4763 /* PBXContainerItemProxy */; + }; + B12B4CF458578356E489F06F6219F4B5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxCocoa; + target = 7AD0C6DCDC9CEC8A3C7C10C7FEE07BE6 /* RxCocoa */; + targetProxy = E4D2BF6E5E676CBDFA10D95310C021CD /* PBXContainerItemProxy */; + }; + B178318E6B06FEBDFCA880490160D2DB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardNotification; + target = A26E6FD851C20D652B2755C1464A9990 /* IQKeyboardNotification */; + targetProxy = 036E821D970EBBF9BDD56CF7C69E06B5 /* PBXContainerItemProxy */; + }; + B30A38F1D067613698D0ECBFF82F45EB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = libwebp; + target = 47D2E85A78C25869BB13521D8561A638 /* libwebp */; + targetProxy = 94CE7B4000DBC5A962E3F64FFC67AF62 /* PBXContainerItemProxy */; + }; + B3E194739BBE5563CEADD1783522BA9F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SwiftyJSON; + target = D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */; + targetProxy = 45B26FD291F5F9D8340966591898C70A /* PBXContainerItemProxy */; + }; + BC0345E0443F779BCAA4606B48AFDE3A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MJRefresh; + target = 6868056D761E163D10FDAF8CF1C4D9B8 /* MJRefresh */; + targetProxy = 21C92A000FA0417BEFCB4DCF5D5AD45C /* PBXContainerItemProxy */; + }; + C23A0C6F18CC3C8FB09F11EB7C356E83 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxRelay; + target = 4622BFEF3DC16E8BD15EEFC30D4D0084 /* RxRelay */; + targetProxy = 65F950B2E8361CFF33A4B14607334F20 /* PBXContainerItemProxy */; + }; + C2C1B24DD139892A57A460B78898AAA1 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MarqueeLabel; + target = C23DB88E45B0ED14F0C8827BE9C46C95 /* MarqueeLabel */; + targetProxy = 011809F5F4008DF209C1D8504B7C00E8 /* PBXContainerItemProxy */; + }; + C43B7F857249763D7A59CDE2501B860E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = YYImage; + target = 822E44240F2922DAB12018A6B649BD19 /* YYImage */; + targetProxy = 4344B82D636C96D4013D67AEE644BA36 /* PBXContainerItemProxy */; + }; + C5286BCEE3FC137F2FA80EE171F418A3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardCore; + target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */; + targetProxy = 738F3545E5329F8B74DF73017F82102E /* PBXContainerItemProxy */; + }; + C91890FA12733C2B65D6C2A630A8E11B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CocoaMQTT; + target = 4EB168A830EFA6136FA93357D1F1511A /* CocoaMQTT */; + targetProxy = 907A43C2D2CE2FF7D4D7A74C0B13DB98 /* PBXContainerItemProxy */; + }; + C9790921DBE75E75BD1923A5433D496E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = OpenIMSDKCore; + target = 0E87F100EFC3B44F5BB5AF12375D07F1 /* OpenIMSDKCore */; + targetProxy = AA502341AA438B814AFF656BD10B937C /* PBXContainerItemProxy */; + }; + CAFDA423A8120F3A8DD11D314C11111B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = MqttCocoaAsyncSocket; + target = B017CC75E2704C686AA0A2203247D9C7 /* MqttCocoaAsyncSocket */; + targetProxy = 3515FA4C9101336553D8B459366C326A /* PBXContainerItemProxy */; + }; + CB4D5BDDFF21ECC88677A198F7E338BD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = SDWebImage; + target = 3847153A6E5EEFB86565BA840768F429 /* SDWebImage */; + targetProxy = 496A278884CB9032040FEBB54F58C207 /* PBXContainerItemProxy */; + }; + D5651A70BE15EFB4982444B5B2512219 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardCore; + target = F9A1BF709B7BA4C24A83664EB1E1C7D4 /* IQKeyboardCore */; + targetProxy = 72793BEC4391CB8366125C3553B258DD /* PBXContainerItemProxy */; + }; + D759FA7EE75F394744201482262719BF /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQTextInputViewNotification; + target = 283C1F2EA88CD4413165801A6748A48E /* IQTextInputViewNotification */; + targetProxy = C58769B388904CFBBFB74603F94C50D6 /* PBXContainerItemProxy */; + }; + DAAD65E821D02F91D43F7A3A62CBBDA8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardToolbar; + target = F4FE17428FD0E607723A44F17231B7A1 /* IQKeyboardToolbar */; + targetProxy = F10E34D9493224FFE4398C2892A264D0 /* PBXContainerItemProxy */; + }; + DB107D7CB98F06D8F8316BDF80F19D13 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ZXSDK; + target = 8194323886ECAF7E912EFDAFC84017AA /* ZXSDK */; + targetProxy = 784AB6009C802DCDB077C8FDAE12A645 /* PBXContainerItemProxy */; + }; + DBC24143E98243D4AF1EA5BC398DF911 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AMapFoundation; + target = 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */; + targetProxy = 8537939584ADB402914C80BECBFCF361 /* PBXContainerItemProxy */; + }; + E3A3706048E530DEB7C582F6A987E2A3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "WechatOpenSDK-XCFramework"; + target = 7F18C31A804695333763EEC303E265D7 /* WechatOpenSDK-XCFramework */; + targetProxy = E5D1EB384DCAB100A17AB2E792EA5EC1 /* PBXContainerItemProxy */; + }; + EF8A7784AE5CDC5DA53D690528846AB3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RxSwiftExt; + target = ED7124602AA1B5C6A257912C7E8B793B /* RxSwiftExt */; + targetProxy = EC205F05694C8C333E9828545B2065F9 /* PBXContainerItemProxy */; + }; + F76072662756082232E539FB6FAD05B2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = YBImageBrowser; + target = B97FC50FB8C4390DDCCA281E85E7AD84 /* YBImageBrowser */; + targetProxy = BA14FB92C8EA947503B64896940026ED /* PBXContainerItemProxy */; + }; + FA78E89559F608171A318EA1A1A05625 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = IQKeyboardReturnManager; + target = 0981F89DB5DA3FFCFFEBDE1F56287054 /* IQKeyboardReturnManager */; + targetProxy = 75A41B01F44388B65DAFE9642A27098F /* PBXContainerItemProxy */; + }; + FBF93ED7FC482938418EE1D10B88E153 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "SwiftyJSON-SwiftyJSON"; + target = 677650A76A720691B88A6959EFED6418 /* SwiftyJSON-SwiftyJSON */; + targetProxy = 21670DA1EB50FE0700045C6DEA84AB9D /* PBXContainerItemProxy */; + }; + FFFBFAB00B10E1ABC9ED8CA155436E90 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = AMapFoundation; + target = 39082CE2CA8065D786A75F5C09CFF2C0 /* AMapFoundation */; + targetProxy = 0A6EBF5BEBE66C578BD712891C566CDC /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 0259195A9ED2EA2EDBA91ED0B1CFBF4F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B538CBD104D8A06AE7A78D4BE98E50CE /* RxDataSources.debug.xcconfig */; + baseConfigurationReference = 3F309E5C6296297419BFF8A326FBA8A3 /* RxDataSources.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -14960,26 +15378,9 @@ }; name = Debug; }; - 04862C6DDEB1DBE6E659E6DE452581DA /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9748FAB56C967BFAED8A26117036C999 /* Alamofire.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Alamofire"; - IBSC_MODULE = Alamofire; - INFOPLIST_FILE = "Target Support Files/Alamofire/ResourceBundle-Alamofire-Alamofire-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Alamofire; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 05AA25BEF94A87270AEE68A471C8491D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3D0DB1CEB05AC969288DEAFEB20F65F0 /* Differentiator.release.xcconfig */; + baseConfigurationReference = 800097F58750AAC2B2BAF8E599AD7AEF /* Differentiator.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -15016,48 +15417,26 @@ }; name = Release; }; - 06A67DDE254165BED63DA36AEAFFE8D7 /* Release */ = { + 068E4D7E4CEF96207225A020C2F8CE51 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C96FCAF290E620B33506E5F6F3F26719 /* IQKeyboardToolbarManager.release.xcconfig */; + baseConfigurationReference = 00BB87520D0D647F6D66C9FD25D56504 /* Alamofire.debug.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Alamofire"; + IBSC_MODULE = Alamofire; + INFOPLIST_FILE = "Target Support Files/Alamofire/ResourceBundle-Alamofire-Alamofire-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardToolbarManager; - PRODUCT_NAME = IQKeyboardToolbarManager; + PRODUCT_NAME = Alamofire; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.9; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; 0779CF714FDBEBB29636BEE5A0EEF5BB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1EEA2A47DAF2DB781EBC24E6A1DCA2E5 /* RxSwiftExt.release.xcconfig */; + baseConfigurationReference = 6C658557DD91AA8F899ABACC31226433 /* RxSwiftExt.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15095,26 +15474,9 @@ }; name = Release; }; - 07D16CB0F4294FC16734A6A541737458 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1DF1E44CD5D56F8194F2390A6116F36D /* IQKeyboardToolbar.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbar"; - IBSC_MODULE = IQKeyboardToolbar; - INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardToolbar; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 080BAA837FD872F18107ACAD4D5020BC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 496745A7F3A4397C33365DC9AA2BBD27 /* MBProgressHUD.debug.xcconfig */; + baseConfigurationReference = 727C62357BCC8E0AE55A67EC6658490C /* MBProgressHUD.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -15152,7 +15514,7 @@ }; 081567CE9CD56A99A66C0B763397A722 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DC18C5356E15BE7E1C0CC9337F251372 /* GTCommonSDK.release.xcconfig */; + baseConfigurationReference = FB1D9DAF235C3360A49CB31CD5D21E03 /* GTCommonSDK.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -15168,16 +15530,50 @@ }; name = Release; }; - 09B0AAEEB5F8A95CA14A95B878C2039C /* Release */ = { + 08CB6A29392D1DB1390D381263484F6B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C6EED8EF1941D023328AEA4B21A95EFF /* IQTextInputViewNotification.release.xcconfig */; + baseConfigurationReference = BBEF8ABEDA5FDBA01511762EB65DD72A /* IQKeyboardNotification.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextInputViewNotification"; - IBSC_MODULE = IQTextInputViewNotification; - INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardNotification"; + IBSC_MODULE = IQKeyboardNotification; + INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQTextInputViewNotification; + PRODUCT_NAME = IQKeyboardNotification; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 0EA508C10E9E9E4E556F0C47AEBB0C30 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5A225B67BF641EECDAE555557900F543 /* lottie-ios.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/lottie-ios"; + IBSC_MODULE = Lottie; + INFOPLIST_FILE = "Target Support Files/lottie-ios/ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = LottiePrivacyInfo; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 0EA7D0F9F65C2572386B5E34ED5777CA /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8960813343F218D2D666299190D67ABE /* Alamofire.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Alamofire"; + IBSC_MODULE = Alamofire; + INFOPLIST_FILE = "Target Support Files/Alamofire/ResourceBundle-Alamofire-Alamofire-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = Alamofire; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -15187,7 +15583,7 @@ }; 101B3D52ED918FA7FBD09B130F1DB33E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 629DDBA66E3F48E13DC130A55605CE82 /* SwiftDate.debug.xcconfig */; + baseConfigurationReference = A4A7F2883A127431D6E6E825F82B1CD1 /* SwiftDate.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15224,9 +15620,65 @@ }; name = Debug; }; - 11BE2D37CE049B8C641F8B18B95A1ABD /* Release */ = { + 1179A28E43BB9B438110C899C37B5D94 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3315C38767856D68C851A907CE93A414 /* SDWebImage.release.xcconfig */; + baseConfigurationReference = CEC0082E625A68C67E6A1ECF039B0BC7 /* SDWebImage.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 14A867063205257815333F3D89A4B3C5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D862C584B59F742B093BA15B55C64CC9 /* IQKeyboardToolbarManager.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbarManager"; + IBSC_MODULE = IQKeyboardToolbarManager; + INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = IQKeyboardToolbarManager; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 1608EEC2C7E087E8B7B6FDFEF9ED137C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CEC0082E625A68C67E6A1ECF039B0BC7 /* SDWebImage.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SDWebImage"; @@ -15241,65 +15693,26 @@ }; name = Release; }; - 162279A834B2284AE37128B0B344550E /* Release */ = { + 163BF315B16D37D0C70C0F744F2CAFB8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB451DC015F96BFF40FAA681B9B222BD /* IQKeyboardReturnManager.release.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardReturnManager; - PRODUCT_NAME = IQKeyboardReturnManager; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 1640536A0FD7A1E7E82E45CC51E13F0B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3BBC561B29ED22D84456A56B25487B1A /* Kingfisher.release.xcconfig */; + baseConfigurationReference = 869253C90A9E318D5E478170C21006FD /* MarqueeLabel.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Kingfisher"; - IBSC_MODULE = Kingfisher; - INFOPLIST_FILE = "Target Support Files/Kingfisher/ResourceBundle-Kingfisher-Kingfisher-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MarqueeLabel"; + IBSC_MODULE = MarqueeLabel; + INFOPLIST_FILE = "Target Support Files/MarqueeLabel/ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Kingfisher; + PRODUCT_NAME = MarqueeLabel; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; 164D234316F4A7814C5F4348E0FD7C5B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E926FA11E8BA74B1F4F9474810B87590 /* SwiftKeychainWrapper.debug.xcconfig */; + baseConfigurationReference = 6AAD72F6BD76C26A980E1477F50D4DD7 /* SwiftKeychainWrapper.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -15335,9 +15748,47 @@ }; name = Debug; }; + 169F21279F180E2A07A411F02696F82A /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E283C787829B0255F3EA02250F65433D /* SDWebImage.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; + PRODUCT_MODULE_NAME = SDWebImage; + PRODUCT_NAME = SDWebImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 19A83CC9ED1763FF5485101E1BD21401 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9F8AF2C5A4BBDB77E38E045AFFEBF172 /* SGQRCode.debug.xcconfig */; + baseConfigurationReference = 29B8A8985447E4E7823241EE353B3F48 /* SGQRCode.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15374,26 +15825,9 @@ }; name = Debug; }; - 19DBA2A5D1BC527D42DCC1626816CBB9 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 70EB9DECE01FBEF4BE7887739229CDA6 /* lottie-ios.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/lottie-ios"; - IBSC_MODULE = Lottie; - INFOPLIST_FILE = "Target Support Files/lottie-ios/ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = LottiePrivacyInfo; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 1D468000FB63B323BE02836990068238 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2678FFFB05AC0FF8ABF1EAE1D51210C5 /* Masonry.debug.xcconfig */; + baseConfigurationReference = E078D2663D3DCEFA605A0BE7820890AE /* Masonry.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -15429,33 +15863,71 @@ }; name = Debug; }; - 214849C89594A3C114CACD9239506EA6 /* Release */ = { + 207ABC32DFA61C507FB16A0E7CD7C97D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E614EC925D6A4CB0BB4E4E4562902436 /* Alamofire.release.xcconfig */; + baseConfigurationReference = 5B1A0130105B98916AF1D590086BFD66 /* RxCocoa.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Alamofire"; - IBSC_MODULE = Alamofire; - INFOPLIST_FILE = "Target Support Files/Alamofire/ResourceBundle-Alamofire-Alamofire-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxCocoa"; + IBSC_MODULE = RxCocoa; + INFOPLIST_FILE = "Target Support Files/RxCocoa/ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Alamofire; + PRODUCT_NAME = RxCocoa_Privacy; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; - 233CC82B062F1562E9165A8F3FF47364 /* Debug */ = { + 2110B06D88DAC0C70648E521C78C23AC /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D42F775E38DE1A545F3B25BD8738ACF2 /* Kingfisher.debug.xcconfig */; + baseConfigurationReference = D862C584B59F742B093BA15B55C64CC9 /* IQKeyboardToolbarManager.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardToolbarManager; + PRODUCT_NAME = IQKeyboardToolbarManager; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 2125CB4316E177383D6E7F156052BC3F /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C8009C99851F258D3BAC40E139579AC5 /* ObjectMapper.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Kingfisher"; - IBSC_MODULE = Kingfisher; - INFOPLIST_FILE = "Target Support Files/Kingfisher/ResourceBundle-Kingfisher-Kingfisher-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ObjectMapper"; + IBSC_MODULE = ObjectMapper; + INFOPLIST_FILE = "Target Support Files/ObjectMapper/ResourceBundle-Privacy-ObjectMapper-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Kingfisher; + PRODUCT_NAME = Privacy; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -15465,7 +15937,7 @@ }; 24EDD58212F39DF8D43AE9891146ED7C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5875DE076530A11A7D58B4A3F7C35B1C /* KingfisherWebP.release.xcconfig */; + baseConfigurationReference = A7D52DBF5B8B5DD78B762AC31DF025DE /* KingfisherWebP.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15503,9 +15975,9 @@ }; name = Release; }; - 2573257C59315F1456D64B36074E05B0 /* Debug */ = { + 2C18334EE317EA80E052CDF4C96A3A3C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B02664CA4AF3A20B2AD925D0A1FED67D /* IQKeyboardToolbarManager.debug.xcconfig */; + baseConfigurationReference = B7C11EDE3B450C9942C6603E24661EF0 /* IQKeyboardReturnManager.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15517,9 +15989,9 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-Info.plist"; + INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -15527,40 +15999,24 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardToolbarManager; - PRODUCT_NAME = IQKeyboardToolbarManager; + MODULEMAP_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardReturnManager; + PRODUCT_NAME = IQKeyboardReturnManager; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.9; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; - }; - 28B38B940367D9C192340E058448FB3B /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 496745A7F3A4397C33365DC9AA2BBD27 /* MBProgressHUD.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MBProgressHUD"; - IBSC_MODULE = MBProgressHUD; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD/ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = MBProgressHUD; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; + name = Release; }; 2C4EBC8097D4D07427A18EC0F79738BE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AAD0FAC7FA408BC1FCB711EFCEDAB743 /* IQKeyboardManagerSwift.release.xcconfig */; + baseConfigurationReference = 01A603880B3B6DF6C5D80FA552A3A479 /* IQKeyboardManagerSwift.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15597,64 +16053,9 @@ }; name = Release; }; - 2E15E851224480AAE008F54711E316EF /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 7FAA15A80E3EE70FB8617B72A76C5C99 /* MJRefresh.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJRefresh"; - IBSC_MODULE = MJRefresh; - INFOPLIST_FILE = "Target Support Files/MJRefresh/ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = MJRefresh.Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 2E64763DEE2C464FC49626D13A3CE7C9 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 69987DF0C0EF80F634B3BFF7171C82B1 /* RxRelay.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RxRelay/RxRelay-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RxRelay/RxRelay-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RxRelay/RxRelay.modulemap"; - PRODUCT_MODULE_NAME = RxRelay; - PRODUCT_NAME = RxRelay; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 2E6B23AFDDDAB6AE4D391C43AD91B5EA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F326E73494C37B436B25DC1DD104CFE /* URLNavigator.release.xcconfig */; + baseConfigurationReference = 58C7B6E7A775424F09E7E14CA00C5CA6 /* URLNavigator.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15694,7 +16095,7 @@ }; 2E93AC333ABBA1ED27D1FF26FE6E4F6E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BDB33574F45BE6091CBD60487B6B9FAC /* lottie-ios.debug.xcconfig */; + baseConfigurationReference = CE9FDBE3DB1A26028345DD54F26D62B7 /* lottie-ios.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15731,43 +16132,26 @@ }; name = Debug; }; - 30F809E0AB8CF55C9380CE9450CCF8E0 /* Debug */ = { + 312BA732DBE2EB1E28A5F40D8ACF82AF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FEC85C5E00BEEAFA0B609E7B5609E94 /* SnapKit.debug.xcconfig */; + baseConfigurationReference = CAB2565A0DA889576964CD69CC948242 /* MJRefresh.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJRefresh"; + IBSC_MODULE = MJRefresh; + INFOPLIST_FILE = "Target Support Files/MJRefresh/ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SnapKit_Privacy; + PRODUCT_NAME = MJRefresh.Privacy; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; - }; - 315B1E191A5B9806F4332E808628D960 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 74ED30CF01D00C8356D9811523C8FB36 /* RxCocoa.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxCocoa"; - IBSC_MODULE = RxCocoa; - INFOPLIST_FILE = "Target Support Files/RxCocoa/ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RxCocoa_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; + name = Release; }; 329FEDFC707F60DAC36FBAA2F41CC040 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 10B1ACF2AADB5AD04163F4674BFE07A0 /* SwiftyUserDefaults.release.xcconfig */; + baseConfigurationReference = A66FBF950048189A9BC5A7C43078F25B /* SwiftyUserDefaults.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -15806,7 +16190,7 @@ }; 32A11DC5E061152FA9D378AF2B9BB4F2 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5B82BDBCAA41F24AD4A6F7D6617A30 /* ObjectMapper.debug.xcconfig */; + baseConfigurationReference = C8009C99851F258D3BAC40E139579AC5 /* ObjectMapper.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15843,9 +16227,64 @@ }; name = Debug; }; + 32CEFCC3790E3E81EE0F8C44E82B42F1 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 284AC5B340F1DF3743C872CE02EE8A20 /* IQKeyboardToolbarManager.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbarManager"; + IBSC_MODULE = IQKeyboardToolbarManager; + INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = IQKeyboardToolbarManager; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 34A74B2C3C8703EB4F1D11F2E1926310 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 847E7B1F0A19709036E3E46F2089857E /* libwebp.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/libwebp/libwebp-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/libwebp/libwebp-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/libwebp/libwebp.modulemap"; + PRODUCT_MODULE_NAME = libwebp; + PRODUCT_NAME = libwebp; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 35348094A047FBB7741B5FCEBF66111A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D8D4E72FFA61743609A51FAE174F8833 /* URLNavigator.debug.xcconfig */; + baseConfigurationReference = F78CF62F0674BF90E70B2ECA05043B8B /* URLNavigator.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15882,9 +16321,48 @@ }; name = Debug; }; + 36D2AB518180F0D393D5C7822646DD1F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 284AC5B340F1DF3743C872CE02EE8A20 /* IQKeyboardToolbarManager.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbarManager/IQKeyboardToolbarManager.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardToolbarManager; + PRODUCT_NAME = IQKeyboardToolbarManager; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 37C8EBB55E5BA72D4F22D6797A7BFACD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFA6FD03C778C0B691600FE0A831EB76 /* ObjectMapper.release.xcconfig */; + baseConfigurationReference = 2911308F19328BC6C09F92A3C6D1A163 /* ObjectMapper.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -15922,26 +16400,9 @@ }; name = Release; }; - 385DE5C80E9D907A92232745810D2AAA /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 46A9779C47951687DB62763E0DD55E55 /* IQKeyboardReturnManager.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardReturnManager"; - IBSC_MODULE = IQKeyboardReturnManager; - INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardReturnManager; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 3980B62C537F5E72BAB9273C95C66F1A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3AC0F3EEDD22751DD4EF0DA40250DC07 /* AMapLocation.release.xcconfig */; + baseConfigurationReference = F9A39A1F349D79A7CA652C614515AFCB /* AMapLocation.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -15957,26 +16418,9 @@ }; name = Release; }; - 3986E01AC7956DBC6D561019D3EE24C2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AAD0FAC7FA408BC1FCB711EFCEDAB743 /* IQKeyboardManagerSwift.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift"; - IBSC_MODULE = IQKeyboardManagerSwift; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardManagerSwift; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 39FEA6E129AEF8E6B57327F300DE025A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 94801563DB532EDC0D80A3BCEE705193 /* IQKeyboardCore.release.xcconfig */; + baseConfigurationReference = F17AA9FF2A03983AFAF7969998113A73 /* IQKeyboardCore.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16013,9 +16457,103 @@ }; name = Release; }; + 3AB760C353A7AF961E99E05A4B294013 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 72A1EAF3B2B93A6D388301B986ACB69E /* YYImage.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/YYImage/YYImage-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/YYImage/YYImage-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/YYImage/YYImage.modulemap"; + PRODUCT_MODULE_NAME = YYImage; + PRODUCT_NAME = YYImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 3C25716485DA53A7DFB2DFD43F025056 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D5B31C16DC507AA7342155F0550B0D79 /* IQTextInputViewNotification.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + GCC_PREFIX_HEADER = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification.modulemap"; + PRODUCT_MODULE_NAME = IQTextInputViewNotification; + PRODUCT_NAME = IQTextInputViewNotification; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 3D7C9FAAE1A93D59246A1D7E4E252870 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D5B31C16DC507AA7342155F0550B0D79 /* IQTextInputViewNotification.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextInputViewNotification"; + IBSC_MODULE = IQTextInputViewNotification; + INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = IQTextInputViewNotification; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; 3E3EC90A196DC40DF90841C016DA9EB1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1858DBC20C1ACE16F5BE62DD4C23AEDF /* MarqueeLabel.debug.xcconfig */; + baseConfigurationReference = 869253C90A9E318D5E478170C21006FD /* MarqueeLabel.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16052,26 +16590,9 @@ }; name = Debug; }; - 426F1E0BB41D46C7D52CE07BCCF8E3F8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 238EA027049C445CADBCD723D15850C9 /* SDWebImage.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SDWebImage"; - IBSC_MODULE = SDWebImage; - INFOPLIST_FILE = "Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SDWebImage; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 43E6F219681645AA6A1DC48E87B56284 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9748FAB56C967BFAED8A26117036C999 /* Alamofire.debug.xcconfig */; + baseConfigurationReference = 00BB87520D0D647F6D66C9FD25D56504 /* Alamofire.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16108,48 +16629,9 @@ }; name = Debug; }; - 43FD5D6C22D4BB488E106147A7F97B78 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CE5309C36CA7E076181ADB8990797A85 /* libwebp.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/libwebp/libwebp-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/libwebp/libwebp-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/libwebp/libwebp.modulemap"; - PRODUCT_MODULE_NAME = libwebp; - PRODUCT_NAME = libwebp; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; 4471C5CF3BAE41FA52EBBF2DB4B57FA9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 97D599D0C0EA915D51D3C2779E4B546F /* HXPHPicker.debug.xcconfig */; + baseConfigurationReference = CE33785CC080AE402A8C5B0628D044B2 /* HXPHPicker.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16185,26 +16667,9 @@ }; name = Debug; }; - 45F6DD108D2E5E84D61EAEA6C39166AD /* Debug */ = { + 45FC8E4AF4CFA39EE8BFF6D0A14A1D31 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1FE7CCD2DB56740DB6C59A573D8DFB63 /* AMapFoundation.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 4742912452B70CF0E05A564BD6766C01 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 80B6A76BDBFB76C791769481A45315DB /* RxRelay.release.xcconfig */; + baseConfigurationReference = 914F74DC9A660B3CCD6B5049FA3E857E /* RxRelay.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -16235,15 +16700,14 @@ SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; 480C539404A8567B4A00BCFB955B970C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6DFB7C4372393229F1688792BAC624F6 /* SGQRCode.release.xcconfig */; + baseConfigurationReference = 8F6C4B32F8545FD29CC3B33741AFBEDF /* SGQRCode.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16281,26 +16745,26 @@ }; name = Release; }; - 4A679B0433574F23A8277663F294A909 /* Debug */ = { + 4A285D494837C06E255BBE70ED66648C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 93608F9DC483D379F667A4F03EDE2D96 /* IQTextInputViewNotification.debug.xcconfig */; + baseConfigurationReference = 1FBA36361856104A4D031F00072469BF /* Kingfisher.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextInputViewNotification"; - IBSC_MODULE = IQTextInputViewNotification; - INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Kingfisher"; + IBSC_MODULE = Kingfisher; + INFOPLIST_FILE = "Target Support Files/Kingfisher/ResourceBundle-Kingfisher-Kingfisher-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQTextInputViewNotification; + PRODUCT_NAME = Kingfisher; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; 4C6450248165267FCCE1E931FDCC492D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E614EC925D6A4CB0BB4E4E4562902436 /* Alamofire.release.xcconfig */; + baseConfigurationReference = 8960813343F218D2D666299190D67ABE /* Alamofire.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16338,43 +16802,48 @@ }; name = Release; }; - 4C850EC2A3B94F224FE99530B047865F /* Release */ = { + 4CC9BB483A0351F09BE9ED5B967E87D4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EB451DC015F96BFF40FAA681B9B222BD /* IQKeyboardReturnManager.release.xcconfig */; + baseConfigurationReference = 4DDFE96FD63E4568E70A89429B350567 /* RxSwift.release.xcconfig */; buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardReturnManager"; - IBSC_MODULE = IQKeyboardReturnManager; - INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/RxSwift/RxSwift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardReturnManager; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/RxSwift/RxSwift.modulemap"; + PRODUCT_MODULE_NAME = RxSwift; + PRODUCT_NAME = RxSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Release; }; - 4E27E0C7121FC48A6C0712354A8461D4 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 69987DF0C0EF80F634B3BFF7171C82B1 /* RxRelay.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxRelay"; - IBSC_MODULE = RxRelay; - INFOPLIST_FILE = "Target Support Files/RxRelay/ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RxRelay_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 4E3C211534863595B5F43E8250BB4DB1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7FAA15A80E3EE70FB8617B72A76C5C99 /* MJRefresh.debug.xcconfig */; + baseConfigurationReference = B8EC604002D3AACC61D5BDBC802F50D0 /* MJRefresh.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16411,9 +16880,26 @@ }; name = Debug; }; - 5642F5C47DFFC3FD95EEAE52C70C8743 /* Release */ = { + 4FCA227431618AF78B9838E5A1120031 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4ED0F1D4E099A8871122580C0CEA500F /* IQKeyboardNotification.release.xcconfig */; + baseConfigurationReference = 1716B1D0D70C770AC24EDDD4C69E194B /* CocoaLumberjack.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CocoaLumberjack"; + IBSC_MODULE = CocoaLumberjack; + INFOPLIST_FILE = "Target Support Files/CocoaLumberjack/ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = CocoaLumberjackPrivacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 5109DABC9EA627490A85B60812376098 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1E34C4B78DD7F2261388D210C5CADD36 /* IQKeyboardNotification.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16452,7 +16938,7 @@ }; 567843E538D89FD3E56499956151F1FA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 74ED30CF01D00C8356D9811523C8FB36 /* RxCocoa.debug.xcconfig */; + baseConfigurationReference = 5B1A0130105B98916AF1D590086BFD66 /* RxCocoa.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -16488,26 +16974,9 @@ }; name = Debug; }; - 57696C1751BC0BBEDFCF721979E6D5C4 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E1061F2B93315280A5B73A81ADDA30B9 /* MBProgressHUD.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MBProgressHUD"; - IBSC_MODULE = MBProgressHUD; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD/ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = MBProgressHUD; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 58BE242C8F2D2BF295A24115C68B8172 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BFBF528C9DC2F22EF9166D52B4955E30 /* OpenIMSDK.release.xcconfig */; + baseConfigurationReference = F1F80ED426C3EB59947DD048D46A342F /* OpenIMSDK.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16545,9 +17014,48 @@ }; name = Release; }; + 5A0F8F0796E3B83B4A2407828E09FD7D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1572295F624626F7E6A25BFFD705DE16 /* CocoaMQTT.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/CocoaMQTT/CocoaMQTT-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/CocoaMQTT/CocoaMQTT-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/CocoaMQTT/CocoaMQTT.modulemap"; + PRODUCT_MODULE_NAME = CocoaMQTT; + PRODUCT_NAME = CocoaMQTT; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; 5DBE9EF228C40F654C1E76D495DC629F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E6E2849379444297D6642C171B517AA2 /* CocoaLumberjack.release.xcconfig */; + baseConfigurationReference = 4471EC3FFF68A5CB2C39BF14527FC3D8 /* CocoaLumberjack.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16585,26 +17093,9 @@ }; name = Release; }; - 5E36512210BA8DEE48D4EF1CCBB389A1 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E6E2849379444297D6642C171B517AA2 /* CocoaLumberjack.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CocoaLumberjack"; - IBSC_MODULE = CocoaLumberjack; - INFOPLIST_FILE = "Target Support Files/CocoaLumberjack/ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = CocoaLumberjackPrivacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 5E6A79DFB247787BD2BD0ADEBB2CD4F7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A85F7BFA6933B34EAFBDDE988DB2A8A9 /* AMap3DMap.release.xcconfig */; + baseConfigurationReference = E078D46C2A601050DB01A977C864B192 /* AMap3DMap.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -16620,9 +17111,9 @@ }; name = Release; }; - 5FBDCA0668558656B9DAB57C304EC2EA /* Release */ = { + 60CF78555282CDF26258274D2DA579E8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0719BA04D2F1F80681741FC01F6CCDDC /* IQTextView.release.xcconfig */; + baseConfigurationReference = FDAE672DFD3D8A61B0D211BD81FAAE76 /* IQKeyboardToolbar.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16634,9 +17125,9 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQTextView/IQTextView-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQTextView/IQTextView-Info.plist"; + INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -16644,9 +17135,64 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/IQTextView/IQTextView.modulemap"; - PRODUCT_MODULE_NAME = IQTextView; - PRODUCT_NAME = IQTextView; + MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardToolbar; + PRODUCT_NAME = IQKeyboardToolbar; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 60E214194E44DC9876A98E4B45B6E9E6 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 727C62357BCC8E0AE55A67EC6658490C /* MBProgressHUD.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MBProgressHUD"; + IBSC_MODULE = MBProgressHUD; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = MBProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 629CB06A036D875A195343EB063B4D8C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 846EDE56DA946ACF6FAB843EB29A21BA /* IQKeyboardToolbar.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardToolbar; + PRODUCT_NAME = IQKeyboardToolbar; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -16661,7 +17207,7 @@ }; 634D2F7349EEE1DFE79655E476A25FC1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 62068575E84E562D2715857256F195F2 /* RxSwiftExt.debug.xcconfig */; + baseConfigurationReference = F5FD142CF1042BDEAD5F794A402A036B /* RxSwiftExt.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16698,9 +17244,26 @@ }; name = Debug; }; + 63A932FA60972BE65F60E95EE7DB97E9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B8DB1EBE506F258F6871BF5B3853F937 /* Kingfisher.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Kingfisher"; + IBSC_MODULE = Kingfisher; + INFOPLIST_FILE = "Target Support Files/Kingfisher/ResourceBundle-Kingfisher-Kingfisher-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = Kingfisher; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; 64A7FDB5B4F348E1DF4AE672EAC026DD /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 615A1FD3776094E854318EE01C75786B /* CocoaLumberjack.debug.xcconfig */; + baseConfigurationReference = 1716B1D0D70C770AC24EDDD4C69E194B /* CocoaLumberjack.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -16737,47 +17300,9 @@ }; name = Debug; }; - 669911B4A20163DB1D61CDBA5C0E3F15 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A9EC385B4E999D9713BD79006E2B9E7C /* IQTextView.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQTextView/IQTextView-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQTextView/IQTextView-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/IQTextView/IQTextView.modulemap"; - PRODUCT_MODULE_NAME = IQTextView; - PRODUCT_NAME = IQTextView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 68F5B3954D22C3AE996F089D0ACE587F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 708DBDCABBB77C6D70637B96FB6FC314 /* GTCommonSDK.debug.xcconfig */; + baseConfigurationReference = 1DFBCAA5D961010443EE4E8BF7F440E3 /* GTCommonSDK.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -16792,47 +17317,9 @@ }; name = Debug; }; - 6B4E69E0158F76E542450D99714FAB44 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 238EA027049C445CADBCD723D15850C9 /* SDWebImage.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; 6BC304EFEB640C20681110D070308640 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 74CF6920D0B4CFAC98C5DBF9737EA29D /* Differentiator.debug.xcconfig */; + baseConfigurationReference = A26A017981C2551A9932A411A10D8C13 /* Differentiator.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -16868,27 +17355,26 @@ }; name = Debug; }; - 6D1573F3B7CC7DE605B6D0DC7BC202B0 /* Release */ = { + 6D6B94B1C6C8342A6240971EDC7F4F03 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7C37BD2829041D89916A260C97F51808 /* AMapFoundation.release.xcconfig */; + baseConfigurationReference = BDF903CC6F915E514FBF685B2291C574 /* RxSwift.debug.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - ENABLE_USER_SCRIPT_SANDBOXING = NO; + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxSwift"; + IBSC_MODULE = RxSwift; + INFOPLIST_FILE = "Target Support Files/RxSwift/ResourceBundle-RxSwift_Privacy-RxSwift-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + PRODUCT_NAME = RxSwift_Privacy; SDKROOT = iphoneos; + SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; 6E44CDAE0AE24EA7109A93ED136F62B3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 038D72D383929263E7180ACF0ED926FB /* TagListView.release.xcconfig */; + baseConfigurationReference = 9D3F97F68C76452A9B412F4F0553D559 /* TagListView.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -16927,7 +17413,7 @@ }; 7082C84E9F4F3C5661F4397D14D70B1D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8CB579539F7E67A543281235A347A0DD /* WechatOpenSDK-XCFramework.release.xcconfig */; + baseConfigurationReference = 7494A83BA67A532F60523715329204DF /* WechatOpenSDK-XCFramework.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -16944,33 +17430,16 @@ }; name = Release; }; - 74450F21AF93BDE38D774C8240255D55 /* Debug */ = { + 7116AA08E5C5E05A3E1D15F5B4C4823E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1858DBC20C1ACE16F5BE62DD4C23AEDF /* MarqueeLabel.debug.xcconfig */; + baseConfigurationReference = DADDA466B0F9556AA080958617E8F666 /* IQTextView.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MarqueeLabel"; - IBSC_MODULE = MarqueeLabel; - INFOPLIST_FILE = "Target Support Files/MarqueeLabel/ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextView"; + IBSC_MODULE = IQTextView; + INFOPLIST_FILE = "Target Support Files/IQTextView/ResourceBundle-IQTextView-IQTextView-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = MarqueeLabel; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - 751313F007EA521A3993D5A6B4514C18 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 80B6A76BDBFB76C791769481A45315DB /* RxRelay.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxRelay"; - IBSC_MODULE = RxRelay; - INFOPLIST_FILE = "Target Support Files/RxRelay/ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RxRelay_Privacy; + PRODUCT_NAME = IQTextView; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -16978,9 +17447,44 @@ }; name = Release; }; + 74A48C190C9E3EA62EC23145908E6AA4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1E34C4B78DD7F2261388D210C5CADD36 /* IQKeyboardNotification.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardNotification"; + IBSC_MODULE = IQKeyboardNotification; + INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = IQKeyboardNotification; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 76D3BC857536C98D671EDFAE14AF716C /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7BD34BB4551BFE8B66525915EEC8A279 /* ZXSDK.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; 77F46C22F13EEDF26EBE7C1A0DAB9E82 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 30A2150EA6103CF85276C506513884F1 /* GYSDK.release.xcconfig */; + baseConfigurationReference = 4B3761DE77E2B197B16591EDBD27853D /* GYSDK.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -16999,7 +17503,7 @@ }; 785092E5318749C2D1F2A11BE7796A70 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 815C778FCFC9DF9AB4BB867705E3D701 /* MarqueeLabel.release.xcconfig */; + baseConfigurationReference = 543C52D19DFF7450FD0F1BFCDEBDB90B /* MarqueeLabel.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17037,49 +17541,26 @@ }; name = Release; }; - 78E308EE9ECD3B57218EE83BC37C86F8 /* Release */ = { + 79DE095A9083C6209C57D39B80D7719D /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 518C323F07471B8EF777A8488A6431AF /* Pods-QuickLocation.release.xcconfig */; + baseConfigurationReference = 543C52D19DFF7450FD0F1BFCDEBDB90B /* MarqueeLabel.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - INFOPLIST_FILE = "Target Support Files/Pods-QuickLocation/Pods-QuickLocation-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MarqueeLabel"; + IBSC_MODULE = MarqueeLabel; + INFOPLIST_FILE = "Target Support Files/MarqueeLabel/ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-QuickLocation/Pods-QuickLocation.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + PRODUCT_NAME = MarqueeLabel; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + WRAPPER_EXTENSION = bundle; }; name = Release; }; 7B4B2E919614433EC6C011E6DF6CECD5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DF72176577676D86E77A44C57C98F44B /* MJExtension.debug.xcconfig */; + baseConfigurationReference = 3E7390C91862B0B79A6128AFE4A9B5F5 /* MJExtension.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17118,7 +17599,7 @@ }; 7C95E035CFE6D756325F4CDCFCB8E188 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E1061F2B93315280A5B73A81ADDA30B9 /* MBProgressHUD.release.xcconfig */; + baseConfigurationReference = 35B8F8C3682AB04ABE8141037BDAA739 /* MBProgressHUD.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -17155,26 +17636,9 @@ }; name = Release; }; - 7FA416E74B027349B9DFFBCC57C47AE8 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 92F1C3BA22F62F1CFB1DE61364BA3A00 /* IQKeyboardNotification.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardNotification"; - IBSC_MODULE = IQKeyboardNotification; - INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardNotification; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 801E9E7712ABA32807ED0BC3F6118C1A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7DCB1E01613F7B40578A36E6266BC0B7 /* OpenIMSDK.debug.xcconfig */; + baseConfigurationReference = F5552552C87459C15E13CB07C4C4B689 /* OpenIMSDK.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17211,28 +17675,26 @@ }; name = Debug; }; - 80D632C6B12D37E97D1F224C2AFCA4DD /* Release */ = { + 80580A4030AB5AD8134DA9941CBB77EA /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AD0CEA64153A7C2D5E5C9DBB44A63976 /* OpenIMSDKCore.release.xcconfig */; + baseConfigurationReference = CE9FDBE3DB1A26028345DD54F26D62B7 /* lottie-ios.debug.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/lottie-ios"; + IBSC_MODULE = Lottie; + INFOPLIST_FILE = "Target Support Files/lottie-ios/ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); + PRODUCT_NAME = LottiePrivacyInfo; SDKROOT = iphoneos; + SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; 8132F4596778D6D7F2FC0053BBA0486B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 260BDB88A25661D414D0FB98126D2229 /* SDCycleScrollView.release.xcconfig */; + baseConfigurationReference = A27AA83F2845140359A4DB58C644F78A /* SDCycleScrollView.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -17269,26 +17731,9 @@ }; name = Release; }; - 81BD4B682BDC387F965169A5A2FCE394 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BFA6FD03C778C0B691600FE0A831EB76 /* ObjectMapper.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ObjectMapper"; - IBSC_MODULE = ObjectMapper; - INFOPLIST_FILE = "Target Support Files/ObjectMapper/ResourceBundle-Privacy-ObjectMapper-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; 823800F5044F68C84CE56D88F733B8BF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B707AC802004219EE1A38C0A808B3868 /* Popover.release.xcconfig */; + baseConfigurationReference = 636B07954D032239F42C35DE71D121DE /* Popover.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -17325,16 +17770,16 @@ }; name = Release; }; - 86C2551D8F47D1C6959D5A89792488CE /* Release */ = { + 85AABA2154B253A555DEFCB9555B9F64 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 815C778FCFC9DF9AB4BB867705E3D701 /* MarqueeLabel.release.xcconfig */; + baseConfigurationReference = 709B926DD9D3886E0BA907D0A3655373 /* RxCocoa.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MarqueeLabel"; - IBSC_MODULE = MarqueeLabel; - INFOPLIST_FILE = "Target Support Files/MarqueeLabel/ResourceBundle-MarqueeLabel-MarqueeLabel-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxCocoa"; + IBSC_MODULE = RxCocoa; + INFOPLIST_FILE = "Target Support Files/RxCocoa/ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = MarqueeLabel; + PRODUCT_NAME = RxCocoa_Privacy; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -17342,9 +17787,120 @@ }; name = Release; }; + 85CCF194FE3600A4FF6E462E8ED33CCC /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 35B8F8C3682AB04ABE8141037BDAA739 /* MBProgressHUD.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MBProgressHUD"; + IBSC_MODULE = MBProgressHUD; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD/ResourceBundle-MBProgressHUD-MBProgressHUD-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = MBProgressHUD; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 860F226BB6B77CB58443727BD36E9FAA /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D020FF9A5704378B0D8B41BF65396696 /* MqttCocoaAsyncSocket.debug.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.modulemap"; + PRODUCT_MODULE_NAME = MqttCocoaAsyncSocket; + PRODUCT_NAME = MqttCocoaAsyncSocket; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 8AF4794AB17D31563D9868E29E98A584 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 64C174FEED5DBDBD7E75CFF8B4BB3ABB /* SwiftyJSON.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftyJSON"; + IBSC_MODULE = SwiftyJSON; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = SwiftyJSON; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 8B8C53BCF7E1FC56DBB96B20720D2D37 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 018A85E94FE9935E7AFCB8B153633334 /* MqttCocoaAsyncSocket.release.xcconfig */; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.modulemap"; + PRODUCT_MODULE_NAME = MqttCocoaAsyncSocket; + PRODUCT_NAME = MqttCocoaAsyncSocket; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; 8BB1669D2FD16A3634D2142D4CB8AA96 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 086F64A3B9E25E5506DF53C6A7398B30 /* MJRefresh.release.xcconfig */; + baseConfigurationReference = CAB2565A0DA889576964CD69CC948242 /* MJRefresh.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17382,16 +17938,33 @@ }; name = Release; }; - 8E7B84ECB85019FA6C5C35EA72AC066F /* Debug */ = { + 8C222A78E23D162A5F180A56C966284F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B02664CA4AF3A20B2AD925D0A1FED67D /* IQKeyboardToolbarManager.debug.xcconfig */; + baseConfigurationReference = B2872DE8B11CC0C62C7F1B425BCBB585 /* AMapFoundation.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 8C5775D3256690EC15997EDD2FA63EC8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3E7390C91862B0B79A6128AFE4A9B5F5 /* MJExtension.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbarManager"; - IBSC_MODULE = IQKeyboardToolbarManager; - INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJExtension"; + IBSC_MODULE = MJExtension; + INFOPLIST_FILE = "Target Support Files/MJExtension/ResourceBundle-MJExtension-MJExtension-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardToolbarManager; + PRODUCT_NAME = MJExtension; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -17399,9 +17972,26 @@ }; name = Debug; }; + 8EBB1406D31681A2E94F269AC611C2ED /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F5929496387F8B541C21CC51C6AAF115 /* MJExtension.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJExtension"; + IBSC_MODULE = MJExtension; + INFOPLIST_FILE = "Target Support Files/MJExtension/ResourceBundle-MJExtension-MJExtension-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = MJExtension; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; 90A83603B6BD81AE9AD6D02FC3FADE71 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B0676AB10DF7580007C901BF2C8B01B8 /* SwiftyJSON.debug.xcconfig */; + baseConfigurationReference = 64C174FEED5DBDBD7E75CFF8B4BB3ABB /* SwiftyJSON.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17438,23 +18028,6 @@ }; name = Debug; }; - 90A8CEA52DC8E421BA80CF81A2E2BA83 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 615A1FD3776094E854318EE01C75786B /* CocoaLumberjack.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CocoaLumberjack"; - IBSC_MODULE = CocoaLumberjack; - INFOPLIST_FILE = "Target Support Files/CocoaLumberjack/ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = CocoaLumberjackPrivacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; 90D4D09BCB6A4660E43ACBE9ECB6FE9A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -17521,9 +18094,26 @@ }; name = Debug; }; + 94987804FACA342994E719E6DA2AA3A7 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 060CD185D2422C4062E0B14A26CF6596 /* SnapKit.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; + IBSC_MODULE = SnapKit; + INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = SnapKit_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; 94E0BDD4FECDD6501C6D9C71D5539419 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 70EB9DECE01FBEF4BE7887739229CDA6 /* lottie-ios.release.xcconfig */; + baseConfigurationReference = 5A225B67BF641EECDAE555557900F543 /* lottie-ios.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17623,86 +18213,44 @@ }; name = Release; }; - 987C5F155979966DFD336A5FEC557C5C /* Debug */ = { + 977A90BE2CB4C356C492639261512F92 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1390CC8E3CD88975425399A7BD6E60F3 /* RxSwift.debug.xcconfig */; + baseConfigurationReference = FDAE672DFD3D8A61B0D211BD81FAAE76 /* IQKeyboardToolbar.debug.xcconfig */; buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RxSwift/RxSwift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbar"; + IBSC_MODULE = IQKeyboardToolbar; + INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RxSwift/RxSwift.modulemap"; - PRODUCT_MODULE_NAME = RxSwift; - PRODUCT_NAME = RxSwift; + PRODUCT_NAME = IQKeyboardToolbar; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + WRAPPER_EXTENSION = bundle; }; name = Debug; }; - 9944C2ECD4A1E40F80E387A35B189F2D /* Release */ = { + 989F7A6EDEA39DB9188FD293F445F34F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C6EED8EF1941D023328AEA4B21A95EFF /* IQTextInputViewNotification.release.xcconfig */; + baseConfigurationReference = 49B586C2492DB8E3B98452DAA26E3559 /* AMapFoundation.release.xcconfig */; buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ENABLE_USER_SCRIPT_SANDBOXING = NO; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", - "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification.modulemap"; - PRODUCT_MODULE_NAME = IQTextInputViewNotification; - PRODUCT_NAME = IQTextInputViewNotification; SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.9; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; }; name = Release; }; 9CDD6C0B552ED299157F8FBA805D287B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1098D704D51AA0E2DEDC327834F7740C /* AlipaySDK-iOS.debug.xcconfig */; + baseConfigurationReference = BCFAA6E3673F32D9D944D7DD589746D5 /* AlipaySDK-iOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -17720,7 +18268,7 @@ }; 9D0D7572FEDA4CC9E75E7387846AFE57 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0FEC85C5E00BEEAFA0B609E7B5609E94 /* SnapKit.debug.xcconfig */; + baseConfigurationReference = 060CD185D2422C4062E0B14A26CF6596 /* SnapKit.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17757,62 +18305,47 @@ }; name = Debug; }; - 9E09134C79E09227E76D99B5CE8B69D8 /* Release */ = { + 9E9C4F2E8D385B2845AC937F554F71DE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0D7269015D795415C30E6E7FDA887D10 /* ZXSDK.release.xcconfig */; + baseConfigurationReference = BDF903CC6F915E514FBF685B2291C574 /* RxSwift.debug.xcconfig */; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - A0BF867D6F81E7FC508C3E72506DB8E4 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3F73DD0E591F2EA915EE953972CB39F5 /* OpenIMSDKCore.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/RxSwift/RxSwift-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", + "@loader_path/Frameworks", ); + MODULEMAP_FILE = "Target Support Files/RxSwift/RxSwift.modulemap"; + PRODUCT_MODULE_NAME = RxSwift; + PRODUCT_NAME = RxSwift; SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; - A19EC7A9994C319A743037E86ADC5DD1 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0728A2587FDDC0AF78C982A4DC85EF61 /* MJExtension.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJExtension"; - IBSC_MODULE = MJExtension; - INFOPLIST_FILE = "Target Support Files/MJExtension/ResourceBundle-MJExtension-MJExtension-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = MJExtension; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; A1BEDCEF2CAAEBAF299D256F525A3382 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D42F775E38DE1A545F3B25BD8738ACF2 /* Kingfisher.debug.xcconfig */; + baseConfigurationReference = B8DB1EBE506F258F6871BF5B3853F937 /* Kingfisher.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17849,9 +18382,26 @@ }; name = Debug; }; + A2C4B069FB30B674A042174B2828FD72 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EBB442D86F1DE12D3FD514D2FA20776B /* SnapKit.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; + IBSC_MODULE = SnapKit; + INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = SnapKit_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; A52A8A275879C134EB281434D1049720 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A12071B705466F16A1CF14EA2B9CDFFC /* AMapSearch.debug.xcconfig */; + baseConfigurationReference = E10C79159E195F6C81ED9B2E89F90A37 /* AMapSearch.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -17866,9 +18416,27 @@ }; name = Debug; }; + A567BED43C10335A7A9B277C9AEB9F54 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 17272198BEED2330EBB2A866A7ABE400 /* OpenIMSDKCore.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; A705AF7A0D0666E36DCE452738EEF514 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 660B0D3207CDA50941350787E807EBF9 /* AMapLocation.debug.xcconfig */; + baseConfigurationReference = 47B192A3DA152CDAA23C460A7AE465C0 /* AMapLocation.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -17883,9 +18451,26 @@ }; name = Debug; }; + A83C47D3B1338B16635947D4786FE297 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E283C787829B0255F3EA02250F65433D /* SDWebImage.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SDWebImage"; + IBSC_MODULE = SDWebImage; + INFOPLIST_FILE = "Target Support Files/SDWebImage/ResourceBundle-SDWebImage-SDWebImage-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = SDWebImage; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; A8894230A204E1888695F3677A130967 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1F0F417D668A29E1F52CC4DA14DE80D6 /* WechatOpenSDK-XCFramework.debug.xcconfig */; + baseConfigurationReference = C05DB1794BBBFB16B8EA48C125B1579E /* WechatOpenSDK-XCFramework.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -17903,7 +18488,7 @@ }; A8BB29B3CA4AB81CF3D835FD149791CB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DBF62C0D3DDC64AEDEF9A5454DD073DF /* RxDataSources.release.xcconfig */; + baseConfigurationReference = 8C6C1C2CD09F3D826E6B56CD9CA8EED3 /* RxDataSources.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -17940,9 +18525,60 @@ }; name = Release; }; + ADD0B09C4682D33C26B8F857F66889EE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 2911308F19328BC6C09F92A3C6D1A163 /* ObjectMapper.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ObjectMapper"; + IBSC_MODULE = ObjectMapper; + INFOPLIST_FILE = "Target Support Files/ObjectMapper/ResourceBundle-Privacy-ObjectMapper-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + AEB77615B5EA1B93F5CF7CA914D1FE4A /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EA0077E342A252E846F4FF0AC2A7752E /* IQTextInputViewNotification.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextInputViewNotification"; + IBSC_MODULE = IQTextInputViewNotification; + INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/ResourceBundle-IQTextInputViewNotification-IQTextInputViewNotification-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = IQTextInputViewNotification; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + AF27C96F6AD93DE37083B90DD45B3FFE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4EEDDA2C8BA124FCC4F0D3BA74E7881E /* ZXSDK.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; AF2BB8153427D2BA0A19C9C04F89F611 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 715CB07F1E5C3BEAB5B768CF6A9DD872 /* HXPHPicker.release.xcconfig */; + baseConfigurationReference = 7A538427ACB5E54D82B9758C7B881AFA /* HXPHPicker.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -17979,26 +18615,26 @@ }; name = Release; }; - B5D89FCBD086706B8A7C07EA8D6E87C0 /* Debug */ = { + B2AF6341BAE29E134D871C5C3CC4E64E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B0676AB10DF7580007C901BF2C8B01B8 /* SwiftyJSON.debug.xcconfig */; + baseConfigurationReference = 01A603880B3B6DF6C5D80FA552A3A479 /* IQKeyboardManagerSwift.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftyJSON"; - IBSC_MODULE = SwiftyJSON; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift"; + IBSC_MODULE = IQKeyboardManagerSwift; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SwiftyJSON; + PRODUCT_NAME = IQKeyboardManagerSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; - B7059015F5197B420B1752EDCE3F79DB /* Release */ = { + B3A725D289C4F6B1720005CF99FDF745 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0719BA04D2F1F80681741FC01F6CCDDC /* IQTextView.release.xcconfig */; + baseConfigurationReference = B1A4FD8A8C9FBB2B4AE098AFCDEA027B /* IQTextView.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextView"; @@ -18011,45 +18647,84 @@ TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; + name = Debug; + }; + B735702FC327B16578CE98797C18A489 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B7C11EDE3B450C9942C6603E24661EF0 /* IQKeyboardReturnManager.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardReturnManager"; + IBSC_MODULE = IQKeyboardReturnManager; + INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = IQKeyboardReturnManager; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; name = Release; }; - B8E7A8936DB5E44A40F65CC0E3D50FDE /* Debug */ = { + B8036B08CD7C7B3CB618FEC3ECEF56B4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DF72176577676D86E77A44C57C98F44B /* MJExtension.debug.xcconfig */; + baseConfigurationReference = 846EDE56DA946ACF6FAB843EB29A21BA /* IQKeyboardToolbar.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJExtension"; - IBSC_MODULE = MJExtension; - INFOPLIST_FILE = "Target Support Files/MJExtension/ResourceBundle-MJExtension-MJExtension-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbar"; + IBSC_MODULE = IQKeyboardToolbar; + INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = MJExtension; + PRODUCT_NAME = IQKeyboardToolbar; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; - B9F391BF42027393B4BF6AA1CBA4453F /* Debug */ = { + B9BACBCA9A45F72D827D3B889F6891B6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0F5B82BDBCAA41F24AD4A6F7D6617A30 /* ObjectMapper.debug.xcconfig */; + baseConfigurationReference = 2DD7CB878C4C7757197E5D41FE20B750 /* libwebp.release.xcconfig */; buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ObjectMapper"; - IBSC_MODULE = ObjectMapper; - INFOPLIST_FILE = "Target Support Files/ObjectMapper/ResourceBundle-Privacy-ObjectMapper-Info.plist"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/libwebp/libwebp-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/libwebp/libwebp-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = Privacy; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/libwebp/libwebp.modulemap"; + PRODUCT_MODULE_NAME = libwebp; + PRODUCT_NAME = libwebp; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; BA922906E64131AB76C4712AF94EF8CB /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 633767D8A7162E8C39BFE4FE885F0056 /* SDCycleScrollView.debug.xcconfig */; + baseConfigurationReference = 2FFD6FB05FFB92E52545C479B4BFCF7C /* SDCycleScrollView.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -18087,7 +18762,7 @@ }; BAD20131EC29650C6737E66854A3A9FD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB11F69CDAC50ABF5A1340AA052D39B4 /* SnapKit.release.xcconfig */; + baseConfigurationReference = EBB442D86F1DE12D3FD514D2FA20776B /* SnapKit.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -18127,7 +18802,7 @@ }; BD9E54B8E276FDC5FAA99D603AAE7808 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BECB67C4910C284EF8C311E0AF7A187D /* RxCocoa.release.xcconfig */; + baseConfigurationReference = 709B926DD9D3886E0BA907D0A3655373 /* RxCocoa.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -18166,7 +18841,7 @@ }; BE13B2154C960503F9352E7CA41C5257 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9C13E6FBDDAB97317E0522724037E9E2 /* Moya.release.xcconfig */; + baseConfigurationReference = 3FB7A78444CD136A1E106D7281BB2012 /* Moya.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -18204,9 +18879,26 @@ }; name = Release; }; + C019AEAB03257E4F4F4E0E1C147E9DED /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B8EC604002D3AACC61D5BDBC802F50D0 /* MJRefresh.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJRefresh"; + IBSC_MODULE = MJRefresh; + INFOPLIST_FILE = "Target Support Files/MJRefresh/ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = MJRefresh.Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; C1238B6F45B99CBFA2DE1E81C06F98A2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A96E31FD91560DE1C982C3A2F559FB6B /* SwiftKeychainWrapper.release.xcconfig */; + baseConfigurationReference = 3C75D009CCCA844FCC9AB9C57F1EFD1F /* SwiftKeychainWrapper.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -18243,26 +18935,102 @@ }; name = Release; }; - C45E55F6F9432BDAF53A56B3242560C5 /* Debug */ = { + C249BC47E6ED79C39FE1FA34EB5EDF52 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BDB33574F45BE6091CBD60487B6B9FAC /* lottie-ios.debug.xcconfig */; + baseConfigurationReference = B479A2DD7E7DF27106FC6E8B4BCC9594 /* RxRelay.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/lottie-ios"; - IBSC_MODULE = Lottie; - INFOPLIST_FILE = "Target Support Files/lottie-ios/ResourceBundle-LottiePrivacyInfo-lottie-ios-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxRelay"; + IBSC_MODULE = RxRelay; + INFOPLIST_FILE = "Target Support Files/RxRelay/ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = LottiePrivacyInfo; + PRODUCT_NAME = RxRelay_Privacy; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; + name = Release; + }; + C4519138CEAFA15F97F80155F0A33215 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B1A4FD8A8C9FBB2B4AE098AFCDEA027B /* IQTextView.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + GCC_PREFIX_HEADER = "Target Support Files/IQTextView/IQTextView-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/IQTextView/IQTextView-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/IQTextView/IQTextView.modulemap"; + PRODUCT_MODULE_NAME = IQTextView; + PRODUCT_NAME = IQTextView; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + C5F50EE217B051942670CAB087EB1BEE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = A462FD5A5791151FAF19DE1A2BB6CAF8 /* IQKeyboardReturnManager.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardReturnManager; + PRODUCT_NAME = IQKeyboardReturnManager; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; name = Debug; }; C6D82ADFF4A838BC1D47CD03A8A190E9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FFD32F8F371F0FF3AB2E0204D4001137 /* KingfisherWebP.debug.xcconfig */; + baseConfigurationReference = BD5055592BE65B1AFCBD850A79CCC6B5 /* KingfisherWebP.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -18299,26 +19067,26 @@ }; name = Debug; }; - C740D30E057C0E1E0876E05625828366 /* Release */ = { + C88ACF82957AE3FB5CED30C3CD6859D5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 086F64A3B9E25E5506DF53C6A7398B30 /* MJRefresh.release.xcconfig */; + baseConfigurationReference = 2854C80D6EF7D3B7B82AD9C4ADC0FD64 /* IQKeyboardCore.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/MJRefresh"; - IBSC_MODULE = MJRefresh; - INFOPLIST_FILE = "Target Support Files/MJRefresh/ResourceBundle-MJRefresh.Privacy-MJRefresh-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardCore"; + IBSC_MODULE = IQKeyboardCore; + INFOPLIST_FILE = "Target Support Files/IQKeyboardCore/ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = MJRefresh.Privacy; + PRODUCT_NAME = IQKeyboardCore; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; CB3020DFC843BCE565F5FA4024538D17 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3BBC561B29ED22D84456A56B25487B1A /* Kingfisher.release.xcconfig */; + baseConfigurationReference = 1FBA36361856104A4D031F00072469BF /* Kingfisher.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -18356,26 +19124,9 @@ }; name = Release; }; - CC5B7F78C83454497957B4ECC02F118F /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1CF8E6F541077AC2F8784FCFDE14C12A /* ZXSDK.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; CD531507144E35A983888394ADD82075 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 261B8297554CE4FE7CB1170B6603261D /* AMap3DMap.debug.xcconfig */; + baseConfigurationReference = 090A0F0AF4335239DE003FB4A5980412 /* AMap3DMap.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -18392,7 +19143,7 @@ }; CECC5694E635C8311E213453B80E51AF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D414BEB5C18132E781D4587C8EFA1857 /* Masonry.release.xcconfig */; + baseConfigurationReference = 217E00EF02173DE5AA3D621B58AD5EA7 /* Masonry.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -18431,7 +19182,7 @@ }; CF4574325CCCF465D3492C60311DBE5E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0791E218AD38A3E5DB7DCC82469F2282 /* Popover.debug.xcconfig */; + baseConfigurationReference = 3799191460893486B21344FB44085E5A /* Popover.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -18467,26 +19218,26 @@ }; name = Debug; }; - CFF37C784A3A519DFE358A217CE35A21 /* Debug */ = { + CF6FCA3816323289BFE894AB53C937C9 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5C4D9BE2EA61918FA56C7073CC77DB33 /* IQKeyboardManagerSwift.debug.xcconfig */; + baseConfigurationReference = F17AA9FF2A03983AFAF7969998113A73 /* IQKeyboardCore.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift"; - IBSC_MODULE = IQKeyboardManagerSwift; - INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardCore"; + IBSC_MODULE = IQKeyboardCore; + INFOPLIST_FILE = "Target Support Files/IQKeyboardCore/ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardManagerSwift; + PRODUCT_NAME = IQKeyboardCore; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; D01F3580E114FEEB4E2AABE445D8CEE8 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 371C690B36365A3FC898E515449C2217 /* SwiftDate.release.xcconfig */; + baseConfigurationReference = 1A0AD4B77AA2B0C8F61E913F33E32B5D /* SwiftDate.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -18526,7 +19277,7 @@ }; D0C03895DE80B8549E8C1D167D22E44D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5C4D9BE2EA61918FA56C7073CC77DB33 /* IQKeyboardManagerSwift.debug.xcconfig */; + baseConfigurationReference = 0A9E8211F029EBA42EEEE2CC2901AFBC /* IQKeyboardManagerSwift.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -18562,26 +19313,9 @@ }; name = Debug; }; - D2389AF3DA22D03EC84FF8CEA2F0AC04 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FDF694330205FA2699A346C81F89D14B /* IQKeyboardToolbar.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbar"; - IBSC_MODULE = IQKeyboardToolbar; - INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/ResourceBundle-IQKeyboardToolbar-IQKeyboardToolbar-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardToolbar; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; D24EC0EF28B2B0C44685D7240EBF2C15 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 58210E256435ABC11184FBEC80BBAD31 /* AMapSearch.release.xcconfig */; + baseConfigurationReference = FE7774FEDAEA41B1AA9734250483E1FE /* AMapSearch.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -18599,7 +19333,7 @@ }; D4970E2DF87C5802E166FAC3F3951336 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8644E0F97A0F7E3524191228AA9D3074 /* TagListView.debug.xcconfig */; + baseConfigurationReference = 93D67B4D138C469D66869335FAC4A656 /* TagListView.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -18635,86 +19369,9 @@ }; name = Debug; }; - D5C802A708AF3E2E14991483FCDD92F1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CF3E1C0900F540641D8FE98FD89E3640 /* YYImage.debug.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/YYImage/YYImage-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/YYImage/YYImage-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/YYImage/YYImage.modulemap"; - PRODUCT_MODULE_NAME = YYImage; - PRODUCT_NAME = YYImage; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - D74D2C75018086888166989C64E6D4D6 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8CA76143A5698109811F6465625A7D19 /* RxSwift.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/RxSwift/RxSwift-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/RxSwift/RxSwift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/RxSwift/RxSwift.modulemap"; - PRODUCT_MODULE_NAME = RxSwift; - PRODUCT_NAME = RxSwift; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.1; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; D817AA34BFD723AEF714916F00BC5145 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B56ACCB20DA9D768C32CE92ADE5257AB /* YBImageBrowser.release.xcconfig */; + baseConfigurationReference = 97EF826E6048C875FF0150EBB63D62DA /* YBImageBrowser.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -18751,47 +19408,9 @@ }; name = Release; }; - DA0EF6FB32EC66C68F7A63EC2775AAC6 /* Debug */ = { + DB5D2204B393A72333EE951E48B642CB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 92F1C3BA22F62F1CFB1DE61364BA3A00 /* IQKeyboardNotification.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardNotification; - PRODUCT_NAME = IQKeyboardNotification; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - DAB7F498C737AB5713BB102639203892 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 1390CC8E3CD88975425399A7BD6E60F3 /* RxSwift.debug.xcconfig */; + baseConfigurationReference = 4DDFE96FD63E4568E70A89429B350567 /* RxSwift.release.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxSwift"; @@ -18804,18 +19423,35 @@ TARGETED_DEVICE_FAMILY = "1,2"; WRAPPER_EXTENSION = bundle; }; - name = Debug; + name = Release; }; - DB12760E9B83D67E33D1ABC87E355DA5 /* Release */ = { + DFA5CD76B1F214F44A797FB939DCF663 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C96FCAF290E620B33506E5F6F3F26719 /* IQKeyboardToolbarManager.release.xcconfig */; + baseConfigurationReference = A462FD5A5791151FAF19DE1A2BB6CAF8 /* IQKeyboardReturnManager.debug.xcconfig */; buildSettings = { CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardToolbarManager"; - IBSC_MODULE = IQKeyboardToolbarManager; - INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbarManager/ResourceBundle-IQKeyboardToolbarManager-IQKeyboardToolbarManager-Info.plist"; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardReturnManager"; + IBSC_MODULE = IQKeyboardReturnManager; + INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/ResourceBundle-IQKeyboardReturnManager-IQKeyboardReturnManager-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardToolbarManager; + PRODUCT_NAME = IQKeyboardReturnManager; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + E3078BE0525EF526A970DC7166E8632F /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 4471EC3FFF68A5CB2C39BF14527FC3D8 /* CocoaLumberjack.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/CocoaLumberjack"; + IBSC_MODULE = CocoaLumberjack; + INFOPLIST_FILE = "Target Support Files/CocoaLumberjack/ResourceBundle-CocoaLumberjackPrivacy-CocoaLumberjack-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = CocoaLumberjackPrivacy; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; @@ -18823,9 +19459,9 @@ }; name = Release; }; - DE9AE4766C31687E11FD9F2CCCDBA4BB /* Release */ = { + E30DE7BA7374DDF0433B59E8AF35D5E8 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3315C38767856D68C851A907CE93A414 /* SDWebImage.release.xcconfig */; + baseConfigurationReference = 2A0F966CE73BB9FB937DE773DED561BE /* YYImage.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -18837,9 +19473,9 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/SDWebImage/SDWebImage-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/YYImage/YYImage-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/SDWebImage/SDWebImage-Info.plist"; + INFOPLIST_FILE = "Target Support Files/YYImage/YYImage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -18847,73 +19483,39 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/SDWebImage/SDWebImage.modulemap"; - PRODUCT_MODULE_NAME = SDWebImage; - PRODUCT_NAME = SDWebImage; + MODULEMAP_FILE = "Target Support Files/YYImage/YYImage.modulemap"; + PRODUCT_MODULE_NAME = YYImage; + PRODUCT_NAME = YYImage; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - DEE4CB55BBA4206A0E6FFB1CA8366648 /* Release */ = { + E59C392C6F353CC2E8D40F986EF33C09 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB11F69CDAC50ABF5A1340AA052D39B4 /* SnapKit.release.xcconfig */; + baseConfigurationReference = 14E16E30B25A8A248D95A482A7EB47AF /* GYSDK.debug.xcconfig */; buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SnapKit"; - IBSC_MODULE = SnapKit; - INFOPLIST_FILE = "Target Support Files/SnapKit/ResourceBundle-SnapKit_Privacy-SnapKit-Info.plist"; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SnapKit_Privacy; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); SDKROOT = iphoneos; - SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; }; - name = Release; + name = Debug; }; - E35574D386C1C58CDA842EE55FBB8250 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4ED0F1D4E099A8871122580C0CEA500F /* IQKeyboardNotification.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardNotification"; - IBSC_MODULE = IQKeyboardNotification; - INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/ResourceBundle-IQKeyboardNotification-IQKeyboardNotification-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardNotification; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - E3F9944B8CB0A9D309971B0AAE71C2B3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = AEA1F78F7416BA70657450BF20259B85 /* SwiftyJSON.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftyJSON"; - IBSC_MODULE = SwiftyJSON; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = SwiftyJSON; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - E48285ADD3D43654F29DD99C99D11500 /* Debug */ = { + E7EBFE7E864F03B2C33E84C0EE4BCC2C /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 887BAFDF5875E4C49937F4B27AA714C4 /* Pods-QuickLocation.debug.xcconfig */; buildSettings = { @@ -18952,44 +19554,9 @@ }; name = Debug; }; - E59C392C6F353CC2E8D40F986EF33C09 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 02F7F5006D4C83A6F5AEDE0548257A71 /* GYSDK.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_OBJC_WEAK = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - E6E8033438C75C7618431585C83A2C5C /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8CA76143A5698109811F6465625A7D19 /* RxSwift.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxSwift"; - IBSC_MODULE = RxSwift; - INFOPLIST_FILE = "Target Support Files/RxSwift/ResourceBundle-RxSwift_Privacy-RxSwift-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RxSwift_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; E8F6D6BE65F8EA78E36FD25E915E85F6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F1A0B9A15DBD2D3F89FC7A2167A4AD3F /* SwiftyUserDefaults.debug.xcconfig */; + baseConfigurationReference = 3F080FACE9A2AB9E5FF8918DF0CD166E /* SwiftyUserDefaults.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -19025,9 +19592,9 @@ }; name = Debug; }; - E976294576B7E993A16F173924D46ABE /* Release */ = { + E925F4986BD74A8B798476AC66556313 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1DF1E44CD5D56F8194F2390A6116F36D /* IQKeyboardToolbar.release.xcconfig */; + baseConfigurationReference = 8510A31B20023A5D55194501EEC480F3 /* CocoaMQTT.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -19039,9 +19606,10 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-prefix.pch"; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + GCC_PREFIX_HEADER = "Target Support Files/CocoaMQTT/CocoaMQTT-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-Info.plist"; + INFOPLIST_FILE = "Target Support Files/CocoaMQTT/CocoaMQTT-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -19049,14 +19617,14 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardToolbar; - PRODUCT_NAME = IQKeyboardToolbar; + MODULEMAP_FILE = "Target Support Files/CocoaMQTT/CocoaMQTT.modulemap"; + PRODUCT_MODULE_NAME = CocoaMQTT; + PRODUCT_NAME = CocoaMQTT; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.9; + SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -19064,26 +19632,9 @@ }; name = Release; }; - E9B2B5A143CEF8D1C33E8A1C215406A8 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BECB67C4910C284EF8C311E0AF7A187D /* RxCocoa.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxCocoa"; - IBSC_MODULE = RxCocoa; - INFOPLIST_FILE = "Target Support Files/RxCocoa/ResourceBundle-RxCocoa_Privacy-RxCocoa-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = RxCocoa_Privacy; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; E9FB586DC0DF19E1617A7998B4E377B3 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0728A2587FDDC0AF78C982A4DC85EF61 /* MJExtension.release.xcconfig */; + baseConfigurationReference = F5929496387F8B541C21CC51C6AAF115 /* MJExtension.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -19121,98 +19672,9 @@ }; name = Release; }; - EA7FBD7FE4D2902D8DCD16A593942772 /* Debug */ = { + EAF73F4DE3F4B03BEE7EF798E12FF3BD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED84EE15E780A4989C1BA79801B0FCF2 /* IQKeyboardCore.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardCore"; - IBSC_MODULE = IQKeyboardCore; - INFOPLIST_FILE = "Target Support Files/IQKeyboardCore/ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - EAF21DF06290AF362E979DACAB4180E2 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 94801563DB532EDC0D80A3BCEE705193 /* IQKeyboardCore.release.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardCore"; - IBSC_MODULE = IQKeyboardCore; - INFOPLIST_FILE = "Target Support Files/IQKeyboardCore/ResourceBundle-IQKeyboardCore-IQKeyboardCore-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQKeyboardCore; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Release; - }; - ED52A173636D4BA1CFB21EBE2E2918B0 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A9EC385B4E999D9713BD79006E2B9E7C /* IQTextView.debug.xcconfig */; - buildSettings = { - CODE_SIGNING_ALLOWED = NO; - CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQTextView"; - IBSC_MODULE = IQTextView; - INFOPLIST_FILE = "Target Support Files/IQTextView/ResourceBundle-IQTextView-IQTextView-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - PRODUCT_NAME = IQTextView; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - WRAPPER_EXTENSION = bundle; - }; - name = Debug; - }; - EDF669387EAE266419D9A8E1BC5D6AED /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 93608F9DC483D379F667A4F03EDE2D96 /* IQTextInputViewNotification.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification.modulemap"; - PRODUCT_MODULE_NAME = IQTextInputViewNotification; - PRODUCT_NAME = IQTextInputViewNotification; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - F0DC847A602AA2EA132B92D583476495 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 615A84F5D6E75DCDEE4DE6130DF59E85 /* libwebp.debug.xcconfig */; + baseConfigurationReference = B479A2DD7E7DF27106FC6E8B4BCC9594 /* RxRelay.release.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -19224,9 +19686,9 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/libwebp/libwebp-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/RxRelay/RxRelay-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/libwebp/libwebp-Info.plist"; + INFOPLIST_FILE = "Target Support Files/RxRelay/RxRelay-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -19234,52 +19696,14 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/libwebp/libwebp.modulemap"; - PRODUCT_MODULE_NAME = libwebp; - PRODUCT_NAME = libwebp; + MODULEMAP_FILE = "Target Support Files/RxRelay/RxRelay.modulemap"; + PRODUCT_MODULE_NAME = RxRelay; + PRODUCT_NAME = RxRelay; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - F1F0AA7E2732EA92BCC25113FC90ACBD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BC7E39CC063AB41D123D508DC96ED3C7 /* YYImage.release.xcconfig */; - buildSettings = { - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - ENABLE_USER_SCRIPT_SANDBOXING = NO; - GCC_PREFIX_HEADER = "Target Support Files/YYImage/YYImage-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/YYImage/YYImage-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/YYImage/YYImage.modulemap"; - PRODUCT_MODULE_NAME = YYImage; - PRODUCT_NAME = YYImage; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.0; + SWIFT_VERSION = 5.1; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -19287,9 +19711,28 @@ }; name = Release; }; + EB07E23E6CB77CC15A640F29244EF0C4 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BE2396AEB28B21E7D7963F4E67D9B1F9 /* OpenIMSDKCore.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CLANG_ENABLE_OBJC_WEAK = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; F297241D9B06A15050FE4F76DABA19CA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AEA1F78F7416BA70657450BF20259B85 /* SwiftyJSON.release.xcconfig */; + baseConfigurationReference = D1B7F2C96D885D7A145E648320C1726E /* SwiftyJSON.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -19329,7 +19772,7 @@ }; F3F27D16C9BE2272FF09C603083ED6CE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BF62A78FF66483CF7EB197B4BC26ADDF /* YBImageBrowser.debug.xcconfig */; + baseConfigurationReference = DEDA766A20F0E865ABB8743367B99D4F /* YBImageBrowser.debug.xcconfig */; buildSettings = { "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -19365,9 +19808,82 @@ }; name = Debug; }; + F43C82080AEA388639D459FF70CB580E /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D1B7F2C96D885D7A145E648320C1726E /* SwiftyJSON.release.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/SwiftyJSON"; + IBSC_MODULE = SwiftyJSON; + INFOPLIST_FILE = "Target Support Files/SwiftyJSON/ResourceBundle-SwiftyJSON-SwiftyJSON-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = SwiftyJSON; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + F51AF8B511CA98CE6C6DCCD2C6F55792 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EA0077E342A252E846F4FF0AC2A7752E /* IQTextInputViewNotification.release.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + GCC_PREFIX_HEADER = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/IQTextInputViewNotification/IQTextInputViewNotification.modulemap"; + PRODUCT_MODULE_NAME = IQTextInputViewNotification; + PRODUCT_NAME = IQTextInputViewNotification; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + F5E1C51A357AB2F2302C42B8292019D8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0A9E8211F029EBA42EEEE2CC2901AFBC /* IQKeyboardManagerSwift.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/IQKeyboardManagerSwift"; + IBSC_MODULE = IQKeyboardManagerSwift; + INFOPLIST_FILE = "Target Support Files/IQKeyboardManagerSwift/ResourceBundle-IQKeyboardManagerSwift-IQKeyboardManagerSwift-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = IQKeyboardManagerSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; F98EE33558C53FC474C6B9EF9F50E27E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3D3A69BB5C302A89D95825EEBCFE3F76 /* Moya.debug.xcconfig */; + baseConfigurationReference = F9C185543B30AD5DE41DCA09C4929D61 /* Moya.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -19404,47 +19920,9 @@ }; name = Debug; }; - FA412114CE56AE2CB00E22EA62ABEB44 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 46A9779C47951687DB62763E0DD55E55 /* IQKeyboardReturnManager.debug.xcconfig */; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = NO; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-prefix.pch"; - GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - MODULEMAP_FILE = "Target Support Files/IQKeyboardReturnManager/IQKeyboardReturnManager.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardReturnManager; - PRODUCT_NAME = IQKeyboardReturnManager; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_INSTALL_OBJC_HEADER = YES; - SWIFT_VERSION = 5.9; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; FC47B2B7FAEC115D227EE81539ED8586 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F7FA543E892B922765067621A07C87FE /* AlipaySDK-iOS.release.xcconfig */; + baseConfigurationReference = A5855B017DB303D2A1DBEC7EFDEEBEF7 /* AlipaySDK-iOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; @@ -19461,9 +19939,9 @@ }; name = Release; }; - FCB77C13CF635801344035CCF8C8BB13 /* Debug */ = { + FC7F9F29FF2A20909D9CC2E775DE03F6 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FDF694330205FA2699A346C81F89D14B /* IQKeyboardToolbar.debug.xcconfig */; + baseConfigurationReference = DADDA466B0F9556AA080958617E8F666 /* IQTextView.release.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -19475,9 +19953,9 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; ENABLE_MODULE_VERIFIER = NO; - GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-prefix.pch"; + GCC_PREFIX_HEADER = "Target Support Files/IQTextView/IQTextView-prefix.pch"; GENERATE_INFOPLIST_FILE = NO; - INFOPLIST_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar-Info.plist"; + INFOPLIST_FILE = "Target Support Files/IQTextView/IQTextView-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -19485,23 +19963,41 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MODULEMAP_FILE = "Target Support Files/IQKeyboardToolbar/IQKeyboardToolbar.modulemap"; - PRODUCT_MODULE_NAME = IQKeyboardToolbar; - PRODUCT_NAME = IQKeyboardToolbar; + MODULEMAP_FILE = "Target Support Files/IQTextView/IQTextView.modulemap"; + PRODUCT_MODULE_NAME = IQTextView; + PRODUCT_NAME = IQTextView; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_INSTALL_OBJC_HEADER = YES; SWIFT_VERSION = 5.9; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; + name = Release; + }; + FD3EAD027CB301408A8381EB584E5FB5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 914F74DC9A660B3CCD6B5049FA3E857E /* RxRelay.debug.xcconfig */; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/RxRelay"; + IBSC_MODULE = RxRelay; + INFOPLIST_FILE = "Target Support Files/RxRelay/ResourceBundle-RxRelay_Privacy-RxRelay-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + PRODUCT_NAME = RxRelay_Privacy; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + WRAPPER_EXTENSION = bundle; + }; name = Debug; }; FD4D1EB782183AD18FE4C7DDDDE0785C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED84EE15E780A4989C1BA79801B0FCF2 /* IQKeyboardCore.debug.xcconfig */; + baseConfigurationReference = 2854C80D6EF7D3B7B82AD9C4ADC0FD64 /* IQKeyboardCore.debug.xcconfig */; buildSettings = { CLANG_ENABLE_OBJC_WEAK = NO; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -19537,6 +20033,84 @@ }; name = Debug; }; + FD57C46FB3D7211F4C882535E570B61D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BBEF8ABEDA5FDBA01511762EB65DD72A /* IQKeyboardNotification.debug.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + GCC_PREFIX_HEADER = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification-prefix.pch"; + GENERATE_INFOPLIST_FILE = NO; + INFOPLIST_FILE = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MODULEMAP_FILE = "Target Support Files/IQKeyboardNotification/IQKeyboardNotification.modulemap"; + PRODUCT_MODULE_NAME = IQKeyboardNotification; + PRODUCT_NAME = IQKeyboardNotification; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_INSTALL_OBJC_HEADER = YES; + SWIFT_VERSION = 5.9; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + FE9B9ACDD964D1961FB6DBA635F56AB0 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 518C323F07471B8EF777A8488A6431AF /* Pods-QuickLocation.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + ENABLE_MODULE_VERIFIER = NO; + ENABLE_USER_SCRIPT_SANDBOXING = NO; + INFOPLIST_FILE = "Target Support Files/Pods-QuickLocation/Pods-QuickLocation-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-QuickLocation/Pods-QuickLocation.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -19558,20 +20132,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 07168E72BCBCF2C5EA9E6C96F7DEA930 /* Build configuration list for PBXNativeTarget "RxSwift" */ = { + 0ABD335369805811737BE0F97C6C7353 /* Build configuration list for PBXNativeTarget "MJExtension-MJExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( - 987C5F155979966DFD336A5FEC557C5C /* Debug */, - D74D2C75018086888166989C64E6D4D6 /* Release */, + 8C5775D3256690EC15997EDD2FA63EC8 /* Debug */, + 8EBB1406D31681A2E94F269AC611C2ED /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 15E1625229AEEF76B371C85A30BEC8D8 /* Build configuration list for PBXNativeTarget "MJRefresh-MJRefresh.Privacy" */ = { + 0B93C26B016DBDD8A7FA041E0E6D87CB /* Build configuration list for PBXNativeTarget "MJRefresh-MJRefresh.Privacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2E15E851224480AAE008F54711E316EF /* Debug */, - C740D30E057C0E1E0876E05625828366 /* Release */, + C019AEAB03257E4F4F4E0E1C147E9DED /* Debug */, + 312BA732DBE2EB1E28A5F40D8ACF82AF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -19585,20 +20159,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 18CC7E116881CCCFF50C55897144816E /* Build configuration list for PBXNativeTarget "YYImage" */ = { + 193B5ADBE19033B315CCB5C55ABE0522 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar" */ = { isa = XCConfigurationList; buildConfigurations = ( - D5C802A708AF3E2E14991483FCDD92F1 /* Debug */, - F1F0AA7E2732EA92BCC25113FC90ACBD /* Release */, + 60CF78555282CDF26258274D2DA579E8 /* Debug */, + 629CB06A036D875A195343EB063B4D8C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 1F1CC3D499493FAF0DD04E927FB9C62C /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification-IQTextInputViewNotification" */ = { + 1A401D82B16E9AE11902CE16E77EE8CD /* Build configuration list for PBXNativeTarget "MarqueeLabel-MarqueeLabel" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4A679B0433574F23A8277663F294A909 /* Debug */, - 09B0AAEEB5F8A95CA14A95B878C2039C /* Release */, + 163BF315B16D37D0C70C0F744F2CAFB8 /* Debug */, + 79DE095A9083C6209C57D39B80D7719D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -19630,15 +20204,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 27E6C1DA6E893A20C30FD7A93AFC374B /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FA412114CE56AE2CB00E22EA62ABEB44 /* Debug */, - 162279A834B2284AE37128B0B344550E /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 28F8531A55605581FC75A55D04CC3532 /* Build configuration list for PBXNativeTarget "SwiftyUserDefaults" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19648,6 +20213,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 294F585694949ACBE0279FE7F4677EF2 /* Build configuration list for PBXNativeTarget "Alamofire-Alamofire" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 068E4D7E4CEF96207225A020C2F8CE51 /* Debug */, + 0EA7D0F9F65C2572386B5E34ED5777CA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 29BB59B7B51BC6194771995E3356CF70 /* Build configuration list for PBXNativeTarget "MJRefresh" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19666,11 +20240,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2FE321B4B52F6E212AA0AC623949A1D1 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */ = { + 2CFDEC658879BF3F8755C0D94533DD07 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification-IQTextInputViewNotification" */ = { isa = XCConfigurationList; buildConfigurations = ( - CFF37C784A3A519DFE358A217CE35A21 /* Debug */, - 3986E01AC7956DBC6D561019D3EE24C2 /* Release */, + 3D7C9FAAE1A93D59246A1D7E4E252870 /* Debug */, + AEB77615B5EA1B93F5CF7CA914D1FE4A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D332E71D2EB81E9402144981B454116 /* Build configuration list for PBXAggregateTarget "ZXSDK" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AF27C96F6AD93DE37083B90DD45B3FFE /* Debug */, + 76D3BC857536C98D671EDFAE14AF716C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2DF8257610A4F0250953B8B24B9302A6 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 94987804FACA342994E719E6DA2AA3A7 /* Debug */, + A2C4B069FB30B674A042174B2828FD72 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -19684,38 +20276,47 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 355641FA650FE0A47CAFAEF548CE37D0 /* Build configuration list for PBXNativeTarget "RxSwift-RxSwift_Privacy" */ = { + 36223DB09DB3CF57C120450B0C942271 /* Build configuration list for PBXAggregateTarget "AMapFoundation" */ = { isa = XCConfigurationList; buildConfigurations = ( - DAB7F498C737AB5713BB102639203892 /* Debug */, - E6E8033438C75C7618431585C83A2C5C /* Release */, + 8C222A78E23D162A5F180A56C966284F /* Debug */, + 989F7A6EDEA39DB9188FD293F445F34F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 3606C6C7473BDDA747B961013F63837B /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager-IQKeyboardToolbarManager" */ = { + 36A794AD3BEBCCD2C0BE75DC3D13CEC0 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification" */ = { isa = XCConfigurationList; buildConfigurations = ( - 8E7B84ECB85019FA6C5C35EA72AC066F /* Debug */, - DB12760E9B83D67E33D1ABC87E355DA5 /* Release */, + 3C25716485DA53A7DFB2DFD43F025056 /* Debug */, + F51AF8B511CA98CE6C6DCCD2C6F55792 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 37D8640B118856AE776EA78AD4DAC492 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar-IQKeyboardToolbar" */ = { + 3CA9216911EF16B6BFFD055F1953965D /* Build configuration list for PBXNativeTarget "SwiftyJSON-SwiftyJSON" */ = { isa = XCConfigurationList; buildConfigurations = ( - D2389AF3DA22D03EC84FF8CEA2F0AC04 /* Debug */, - 07D16CB0F4294FC16734A6A541737458 /* Release */, + 8AF4794AB17D31563D9868E29E98A584 /* Debug */, + F43C82080AEA388639D459FF70CB580E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 39B74D0BE7AD9880E60F5DFCD0523612 /* Build configuration list for PBXNativeTarget "IQTextInputViewNotification" */ = { + 3D1CBD8549563FAC742CB31571F622FE /* Build configuration list for PBXNativeTarget "MqttCocoaAsyncSocket" */ = { isa = XCConfigurationList; buildConfigurations = ( - EDF669387EAE266419D9A8E1BC5D6AED /* Debug */, - 9944C2ECD4A1E40F80E387A35B189F2D /* Release */, + 860F226BB6B77CB58443727BD36E9FAA /* Debug */, + 8B8C53BCF7E1FC56DBB96B20720D2D37 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 464447B68542887B4E815F2387D67490 /* Build configuration list for PBXNativeTarget "IQKeyboardNotification" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FD57C46FB3D7211F4C882535E570B61D /* Debug */, + 5109DABC9EA627490A85B60812376098 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -19729,6 +20330,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 4F5BECF0073A6C526CA38FBEEAE65366 /* Build configuration list for PBXNativeTarget "IQTextView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C4519138CEAFA15F97F80155F0A33215 /* Debug */, + FC7F9F29FF2A20909D9CC2E775DE03F6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 5176F9AA0EF18F0B0B9D8EF8227C5E46 /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19738,6 +20348,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 53ADEEB74F5FB98F256688E4189ECC79 /* Build configuration list for PBXNativeTarget "RxSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9E9C4F2E8D385B2845AC937F554F71DE /* Debug */, + 4CC9BB483A0351F09BE9ED5B967E87D4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 547AC2DDC5CDD1783E0827EEA7D453E1 /* Build configuration list for PBXNativeTarget "MJExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19756,15 +20375,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5E922FEE2AD37BFC983DCA4DA7B6181F /* Build configuration list for PBXNativeTarget "MBProgressHUD-MBProgressHUD" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 28B38B940367D9C192340E058448FB3B /* Debug */, - 57696C1751BC0BBEDFCF721979E6D5C4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 63ECDE2C79B8ED0684A10A9659C0EAFB /* Build configuration list for PBXNativeTarget "Alamofire" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19774,20 +20384,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6A6EAE788828FAC84CA851AF9513C395 /* Build configuration list for PBXNativeTarget "IQKeyboardNotification-IQKeyboardNotification" */ = { + 68A32CA569D382E0EF6F64823689DB89 /* Build configuration list for PBXAggregateTarget "OpenIMSDKCore" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7FA416E74B027349B9DFFBCC57C47AE8 /* Debug */, - E35574D386C1C58CDA842EE55FBB8250 /* Release */, + A567BED43C10335A7A9B277C9AEB9F54 /* Debug */, + EB07E23E6CB77CC15A640F29244EF0C4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 6C8AAC430878C55132CE101BE3947ECE /* Build configuration list for PBXNativeTarget "libwebp" */ = { + 6A29205CCB770D69C4CE94DAE16F442F /* Build configuration list for PBXNativeTarget "CocoaLumberjack-CocoaLumberjackPrivacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - F0DC847A602AA2EA132B92D583476495 /* Debug */, - 43FD5D6C22D4BB488E106147A7F97B78 /* Release */, + 4FCA227431618AF78B9838E5A1120031 /* Debug */, + E3078BE0525EF526A970DC7166E8632F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6E3711E75C912F7271040F0F928F9A89 /* Build configuration list for PBXNativeTarget "Pods-QuickLocation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E7EBFE7E864F03B2C33E84C0EE4BCC2C /* Debug */, + FE9B9ACDD964D1961FB6DBA635F56AB0 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -19801,20 +20420,29 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 702C70FAB15C1256D5CDB0E1AE949E8D /* Build configuration list for PBXAggregateTarget "ZXSDK" */ = { + 6EE0C580D4B4F5DF5D297308DC4983AF /* Build configuration list for PBXNativeTarget "libwebp" */ = { isa = XCConfigurationList; buildConfigurations = ( - CC5B7F78C83454497957B4ECC02F118F /* Debug */, - 9E09134C79E09227E76D99B5CE8B69D8 /* Release */, + 34A74B2C3C8703EB4F1D11F2E1926310 /* Debug */, + B9BACBCA9A45F72D827D3B889F6891B6 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 71C54D251EC42560EFF3CE4B275E8DA4 /* Build configuration list for PBXNativeTarget "SnapKit-SnapKit_Privacy" */ = { + 701421AC78CFCB06DED14D7A82780FB3 /* Build configuration list for PBXNativeTarget "CocoaMQTT" */ = { isa = XCConfigurationList; buildConfigurations = ( - 30F809E0AB8CF55C9380CE9450CCF8E0 /* Debug */, - DEE4CB55BBA4206A0E6FFB1CA8366648 /* Release */, + 5A0F8F0796E3B83B4A2407828E09FD7D /* Debug */, + E925F4986BD74A8B798476AC66556313 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7163CE213F73888D42781422F65C7896 /* Build configuration list for PBXNativeTarget "RxSwift-RxSwift_Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6D6B94B1C6C8342A6240971EDC7F4F03 /* Debug */, + DB5D2204B393A72333EE951E48B642CB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -19828,6 +20456,33 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 74CA0743989155B4C5D31007514878C4 /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C5F50EE217B051942670CAB087EB1BEE /* Debug */, + 2C18334EE317EA80E052CDF4C96A3A3C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 74E7BB30B8789F5471E13D1D9C21C66C /* Build configuration list for PBXNativeTarget "RxCocoa-RxCocoa_Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 207ABC32DFA61C507FB16A0E7CD7C97D /* Debug */, + 85AABA2154B253A555DEFCB9555B9F64 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 757798FC7D05DC5B159999BF40BD2456 /* Build configuration list for PBXNativeTarget "MBProgressHUD-MBProgressHUD" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 60E214194E44DC9876A98E4B45B6E9E6 /* Debug */, + 85CCF194FE3600A4FF6E462E8ED33CCC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 76CB671120DA668996BFAEDD66DF2560 /* Build configuration list for PBXNativeTarget "SwiftKeychainWrapper" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19837,24 +20492,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 7B3ECF9B14E831C1E69A740F6EDD2397 /* Build configuration list for PBXNativeTarget "IQKeyboardNotification" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DA0EF6FB32EC66C68F7A63EC2775AAC6 /* Debug */, - 5642F5C47DFFC3FD95EEAE52C70C8743 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7D3E39350E8F78F3C28A7E4F78B6E0B8 /* Build configuration list for PBXNativeTarget "SwiftyJSON-SwiftyJSON" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B5D89FCBD086706B8A7C07EA8D6E87C0 /* Debug */, - E3F9944B8CB0A9D309971B0AAE71C2B3 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 80CE967CAA1D35721519F892BAF7A19B /* Build configuration list for PBXNativeTarget "SnapKit" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19864,38 +20501,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 89AA749B6C52668A1526F12E92C23B8D /* Build configuration list for PBXAggregateTarget "AMapFoundation" */ = { + 86DB1A97ED27CD00080CD6C1BF42DBFA /* Build configuration list for PBXNativeTarget "RxRelay-RxRelay_Privacy" */ = { isa = XCConfigurationList; buildConfigurations = ( - 45F6DD108D2E5E84D61EAEA6C39166AD /* Debug */, - 6D1573F3B7CC7DE605B6D0DC7BC202B0 /* Release */, + FD3EAD027CB301408A8381EB584E5FB5 /* Debug */, + C249BC47E6ED79C39FE1FA34EB5EDF52 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8B01AA7742F11A0216B05AA927E0058A /* Build configuration list for PBXAggregateTarget "OpenIMSDKCore" */ = { + 8A8565B186B9103A7BC8FE64942C270E /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar-IQKeyboardToolbar" */ = { isa = XCConfigurationList; buildConfigurations = ( - A0BF867D6F81E7FC508C3E72506DB8E4 /* Debug */, - 80D632C6B12D37E97D1F224C2AFCA4DD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8BECD56FE2C07A3980EF80DAF29BEDD9 /* Build configuration list for PBXNativeTarget "IQKeyboardCore-IQKeyboardCore" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EA7FBD7FE4D2902D8DCD16A593942772 /* Debug */, - EAF21DF06290AF362E979DACAB4180E2 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 8D4601F2FE970FD358D36EAA7D359464 /* Build configuration list for PBXNativeTarget "RxCocoa-RxCocoa_Privacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 315B1E191A5B9806F4332E808628D960 /* Debug */, - E9B2B5A143CEF8D1C33E8A1C215406A8 /* Release */, + 977A90BE2CB4C356C492639261512F92 /* Debug */, + B8036B08CD7C7B3CB618FEC3ECEF56B4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -19927,15 +20546,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 950D6D814E279F5AD0981351D37170B0 /* Build configuration list for PBXNativeTarget "Kingfisher-Kingfisher" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 233CC82B062F1562E9165A8F3FF47364 /* Debug */, - 1640536A0FD7A1E7E82E45CC51E13F0B /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 96B7158D5435EB95E2DC0D0FB8F01241 /* Build configuration list for PBXAggregateTarget "WechatOpenSDK-XCFramework" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19945,24 +20555,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 983007A441D8557EA03BD116DF150079 /* Build configuration list for PBXNativeTarget "RxRelay" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 2E64763DEE2C464FC49626D13A3CE7C9 /* Debug */, - 4742912452B70CF0E05A564BD6766C01 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 99544DFEA3ABAD73EE22C7B670A27277 /* Build configuration list for PBXNativeTarget "lottie-ios-LottiePrivacyInfo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C45E55F6F9432BDAF53A56B3242560C5 /* Debug */, - 19DBA2A5D1BC527D42DCC1626816CBB9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; 9A781EFB19863F1A81EBD59375F3671E /* Build configuration list for PBXAggregateTarget "AMapSearch" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -19972,11 +20564,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9F4308D7D5046F7288DB3693BDD9D2FA /* Build configuration list for PBXNativeTarget "IQTextView-IQTextView" */ = { + 9FC117AC9D899E1F16FF60429B123876 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager" */ = { isa = XCConfigurationList; buildConfigurations = ( - ED52A173636D4BA1CFB21EBE2E2918B0 /* Debug */, - B7059015F5197B420B1752EDCE3F79DB /* Release */, + 2110B06D88DAC0C70648E521C78C23AC /* Debug */, + 36D2AB518180F0D393D5C7822646DD1F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -19990,6 +20582,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A2A7560779BF2CE98594D4DD95618156 /* Build configuration list for PBXNativeTarget "ObjectMapper-Privacy" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2125CB4316E177383D6E7F156052BC3F /* Debug */, + ADD0B09C4682D33C26B8F857F66889EE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; A502924529CB9C0C9B064B4F2F767523 /* Build configuration list for PBXNativeTarget "MarqueeLabel" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -20008,6 +20609,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + A8D2F4A6CDB15363D2B7CD87F959C43E /* Build configuration list for PBXNativeTarget "lottie-ios-LottiePrivacyInfo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 80580A4030AB5AD8134DA9941CBB77EA /* Debug */, + 0EA508C10E9E9E4E556F0C47AEBB0C30 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; AAA1F8799DB68036C3BE983C05FAA2C7 /* Build configuration list for PBXNativeTarget "Masonry" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -20017,11 +20627,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AB54FD55C44E74B81F98130A2F89111B /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager" */ = { + AC300E7B80778A8B1063AA52F7BB053A /* Build configuration list for PBXNativeTarget "Kingfisher-Kingfisher" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2573257C59315F1456D64B36074E05B0 /* Debug */, - 06A67DDE254165BED63DA36AEAFFE8D7 /* Release */, + 63A932FA60972BE65F60E95EE7DB97E9 /* Debug */, + 4A285D494837C06E255BBE70ED66648C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AD16F0FCAD771A357F473A4AFE0DAD13 /* Build configuration list for PBXNativeTarget "YYImage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E30DE7BA7374DDF0433B59E8AF35D5E8 /* Debug */, + 3AB760C353A7AF961E99E05A4B294013 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -20035,20 +20654,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B2ABF0C77AFF3164F71BADF22DE56125 /* Build configuration list for PBXNativeTarget "ObjectMapper-Privacy" */ = { + B25EFB22FA9E922D7EFE7E9BF5C8EB0E /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { isa = XCConfigurationList; buildConfigurations = ( - B9F391BF42027393B4BF6AA1CBA4453F /* Debug */, - 81BD4B682BDC387F965169A5A2FCE394 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - B4235B903770F2009D5C2863EFB72F2F /* Build configuration list for PBXNativeTarget "Alamofire-Alamofire" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 04862C6DDEB1DBE6E659E6DE452581DA /* Debug */, - 214849C89594A3C114CACD9239506EA6 /* Release */, + 169F21279F180E2A07A411F02696F82A /* Debug */, + 1179A28E43BB9B438110C899C37B5D94 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -20062,6 +20672,33 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + B6E2A2C8667DB5ECDD64557EAEE2B908 /* Build configuration list for PBXNativeTarget "IQKeyboardCore-IQKeyboardCore" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C88ACF82957AE3FB5CED30C3CD6859D5 /* Debug */, + CF6FCA3816323289BFE894AB53C937C9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B810A89EE45327E8558B0455BE1BFE6F /* Build configuration list for PBXNativeTarget "RxRelay" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 45FC8E4AF4CFA39EE8BFF6D0A14A1D31 /* Debug */, + EAF73F4DE3F4B03BEE7EF798E12FF3BD /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B9C98F60F3068C7DB86F9997E7ADC7D6 /* Build configuration list for PBXNativeTarget "SDWebImage-SDWebImage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A83C47D3B1338B16635947D4786FE297 /* Debug */, + 1608EEC2C7E087E8B7B6FDFEF9ED137C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C5AC09B999620A5A2117D46214FA5B8D /* Build configuration list for PBXNativeTarget "Differentiator" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -20080,51 +20717,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - CDD88F74A6576E75408DEB54D8367BA6 /* Build configuration list for PBXNativeTarget "MJExtension-MJExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B8E7A8936DB5E44A40F65CC0E3D50FDE /* Debug */, - A19EC7A9994C319A743037E86ADC5DD1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CED9CFC3D76AAC6B7819937B55C8760C /* Build configuration list for PBXNativeTarget "IQKeyboardToolbar" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FCB77C13CF635801344035CCF8C8BB13 /* Debug */, - E976294576B7E993A16F173924D46ABE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D19A882E9703087238F6DCEADF438F1A /* Build configuration list for PBXNativeTarget "IQTextView" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 669911B4A20163DB1D61CDBA5C0E3F15 /* Debug */, - 5FBDCA0668558656B9DAB57C304EC2EA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D25D1A86881D18DF2B01C871873DA4FD /* Build configuration list for PBXNativeTarget "SDWebImage" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 6B4E69E0158F76E542450D99714FAB44 /* Debug */, - DE9AE4766C31687E11FD9F2CCCDBA4BB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D2D7ECC79626771DD3DBA21E3D2A1666 /* Build configuration list for PBXNativeTarget "RxRelay-RxRelay_Privacy" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4E27E0C7121FC48A6C0712354A8461D4 /* Debug */, - 751313F007EA521A3993D5A6B4514C18 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; D3166B236F84C229586E28FCE673060A /* Build configuration list for PBXNativeTarget "ObjectMapper" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -20134,6 +20726,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + D37672541719AF3542039591D846B1A2 /* Build configuration list for PBXNativeTarget "IQKeyboardToolbarManager-IQKeyboardToolbarManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 14A867063205257815333F3D89A4B3C5 /* Debug */, + 32CEFCC3790E3E81EE0F8C44E82B42F1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; D508D1CAA0017AF1AAE213E8D2D8E700 /* Build configuration list for PBXNativeTarget "YBImageBrowser" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -20143,6 +20744,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + DA5E7F9090E0F51DF371BAD15789BA85 /* Build configuration list for PBXNativeTarget "IQKeyboardManagerSwift-IQKeyboardManagerSwift" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F5E1C51A357AB2F2302C42B8292019D8 /* Debug */, + B2AF6341BAE29E134D871C5C3CC4E64E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; DB934B2CA50C4F8A1DC14A140BB7C372 /* Build configuration list for PBXNativeTarget "RxDataSources" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -20161,33 +20771,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E8B5922B5EAC07270F7EBC177288A753 /* Build configuration list for PBXNativeTarget "SDWebImage-SDWebImage" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 426F1E0BB41D46C7D52CE07BCCF8E3F8 /* Debug */, - 11BE2D37CE049B8C641F8B18B95A1ABD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E98AA333BE2F80C5073C19F7D874B291 /* Build configuration list for PBXNativeTarget "MarqueeLabel-MarqueeLabel" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 74450F21AF93BDE38D774C8240255D55 /* Debug */, - 86C2551D8F47D1C6959D5A89792488CE /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EA941C1047FD4F475EBCF2297A47EEF3 /* Build configuration list for PBXNativeTarget "Pods-QuickLocation" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - E48285ADD3D43654F29DD99C99D11500 /* Debug */, - 78E308EE9ECD3B57218EE83BC37C86F8 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; EB7001C8F8F3903832E17537BC7A2AC1 /* Build configuration list for PBXNativeTarget "MBProgressHUD" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -20197,20 +20780,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - F34FCEDC1D5872EBC62EDD44DA6477B3 /* Build configuration list for PBXNativeTarget "CocoaLumberjack-CocoaLumberjackPrivacy" */ = { + EE84F2E720E0F4CCA0AA5D9753F54CF1 /* Build configuration list for PBXNativeTarget "IQKeyboardNotification-IQKeyboardNotification" */ = { isa = XCConfigurationList; buildConfigurations = ( - 90A8CEA52DC8E421BA80CF81A2E2BA83 /* Debug */, - 5E36512210BA8DEE48D4EF1CCBB389A1 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F48896F2B355944D89133495B349A209 /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager-IQKeyboardReturnManager" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 385DE5C80E9D907A92232745810D2AAA /* Debug */, - 4C850EC2A3B94F224FE99530B047865F /* Release */, + 08CB6A29392D1DB1390D381263484F6B /* Debug */, + 74A48C190C9E3EA62EC23145908E6AA4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -20224,6 +20798,24 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + F9FAD43D2A0DEB921B66E27E37C7E5B9 /* Build configuration list for PBXNativeTarget "IQTextView-IQTextView" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B3A725D289C4F6B1720005CF99FDF745 /* Debug */, + 7116AA08E5C5E05A3E1D15F5B4C4823E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FE928EFF4FD3F75514DA375AC225A59E /* Build configuration list for PBXNativeTarget "IQKeyboardReturnManager-IQKeyboardReturnManager" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DFA5CD76B1F214F44A797FB939DCF663 /* Debug */, + B735702FC327B16578CE98797C18A489 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; FFD4204E4DCD52FD19E7C87A9DD45C40 /* Build configuration list for PBXNativeTarget "lottie-ios" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/CocoaMQTT.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/CocoaMQTT.xcscheme new file mode 100644 index 0000000..b98be67 --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/CocoaMQTT.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/MqttCocoaAsyncSocket.xcscheme b/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/MqttCocoaAsyncSocket.xcscheme new file mode 100644 index 0000000..6af612b --- /dev/null +++ b/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/MqttCocoaAsyncSocket.xcscheme @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/xcschememanagement.plist b/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/xcschememanagement.plist index 51d737e..05a9681 100644 --- a/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Pods/Pods.xcodeproj/xcuserdata/yanghong.xcuserdatad/xcschemes/xcschememanagement.plist @@ -49,6 +49,11 @@ isShown + CocoaMQTT.xcscheme + + isShown + + Differentiator.xcscheme isShown @@ -214,6 +219,11 @@ isShown + MqttCocoaAsyncSocket.xcscheme + + isShown + + ObjectMapper-Privacy.xcscheme isShown diff --git a/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-Info.plist b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-Info.plist new file mode 100644 index 0000000..91b625b --- /dev/null +++ b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + ${PODS_DEVELOPMENT_LANGUAGE} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 2.2.5 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-dummy.m b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-dummy.m new file mode 100644 index 0000000..6399b30 --- /dev/null +++ b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_CocoaMQTT : NSObject +@end +@implementation PodsDummy_CocoaMQTT +@end diff --git a/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-prefix.pch b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-umbrella.h b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-umbrella.h new file mode 100644 index 0000000..52302f7 --- /dev/null +++ b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double CocoaMQTTVersionNumber; +FOUNDATION_EXPORT const unsigned char CocoaMQTTVersionString[]; + diff --git a/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.debug.xcconfig b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.debug.xcconfig new file mode 100644 index 0000000..e41a4c3 --- /dev/null +++ b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.debug.xcconfig @@ -0,0 +1,16 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" -framework "MqttCocoaAsyncSocket" -framework "Security" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/CocoaMQTT +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.modulemap b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.modulemap new file mode 100644 index 0000000..c9be1fe --- /dev/null +++ b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.modulemap @@ -0,0 +1,6 @@ +framework module CocoaMQTT { + umbrella header "CocoaMQTT-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.release.xcconfig b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.release.xcconfig new file mode 100644 index 0000000..e41a4c3 --- /dev/null +++ b/Pods/Target Support Files/CocoaMQTT/CocoaMQTT.release.xcconfig @@ -0,0 +1,16 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift +OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" -framework "MqttCocoaAsyncSocket" -framework "Security" +OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/CocoaMQTT +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-Info.plist b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-Info.plist new file mode 100644 index 0000000..3fa062a --- /dev/null +++ b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + ${PODS_DEVELOPMENT_LANGUAGE} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.8 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-dummy.m b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-dummy.m new file mode 100644 index 0000000..ea7b24a --- /dev/null +++ b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MqttCocoaAsyncSocket : NSObject +@end +@implementation PodsDummy_MqttCocoaAsyncSocket +@end diff --git a/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-prefix.pch b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-umbrella.h b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-umbrella.h new file mode 100644 index 0000000..5c337ae --- /dev/null +++ b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "MGCDAsyncSocket.h" +#import "MGCDAsyncUdpSocket.h" + +FOUNDATION_EXPORT double MqttCocoaAsyncSocketVersionNumber; +FOUNDATION_EXPORT const unsigned char MqttCocoaAsyncSocketVersionString[]; + diff --git a/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.debug.xcconfig b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.debug.xcconfig new file mode 100644 index 0000000..cd1a06a --- /dev/null +++ b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.debug.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" -framework "Security" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/MqttCocoaAsyncSocket +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.modulemap b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.modulemap new file mode 100644 index 0000000..33f0c5d --- /dev/null +++ b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.modulemap @@ -0,0 +1,6 @@ +framework module MqttCocoaAsyncSocket { + umbrella header "MqttCocoaAsyncSocket-umbrella.h" + + export * + module * { export * } +} diff --git a/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.release.xcconfig b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.release.xcconfig new file mode 100644 index 0000000..cd1a06a --- /dev/null +++ b/Pods/Target Support Files/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.release.xcconfig @@ -0,0 +1,13 @@ +CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_LDFLAGS = $(inherited) -framework "CFNetwork" -framework "Security" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_DEVELOPMENT_LANGUAGE = ${DEVELOPMENT_LANGUAGE} +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/MqttCocoaAsyncSocket +PODS_XCFRAMEWORKS_BUILD_DIR = $(PODS_CONFIGURATION_BUILD_DIR)/XCFrameworkIntermediates +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-acknowledgements.markdown b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-acknowledgements.markdown index 041bbc9..54b2e2e 100644 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-acknowledgements.markdown +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-acknowledgements.markdown @@ -87,6 +87,12 @@ Redistribution and use in source and binary forms, with or without modification, THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +## CocoaMQTT + +This project is dual licensed under the Eclipse Public License 1.0 and the +Eclipse Distribution License 1.0 as described in the epl-v10 and edl-v10 files. + + ## Differentiator MIT License @@ -885,6 +891,16 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +## MqttCocoaAsyncSocket + +Public Domain License + +The MqttCocoaAsyncSocket project is in the public domain. + +The original TCP version (AsyncSocket) was created by Dustin Voss in January 2003. +Updated and maintained by Deusty LLC and the Apple development community. + + ## ObjectMapper The MIT License (MIT) diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-acknowledgements.plist b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-acknowledgements.plist index 9cf4238..3598cf8 100644 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-acknowledgements.plist +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-acknowledgements.plist @@ -140,6 +140,18 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND Type PSGroupSpecifier + + FooterText + This project is dual licensed under the Eclipse Public License 1.0 and the +Eclipse Distribution License 1.0 as described in the epl-v10 and edl-v10 files. + + License + MIT + Title + CocoaMQTT + Type + PSGroupSpecifier + FooterText MIT License @@ -1058,6 +1070,22 @@ SOFTWARE. Type PSGroupSpecifier + + FooterText + Public Domain License + +The MqttCocoaAsyncSocket project is in the public domain. + +The original TCP version (AsyncSocket) was created by Dustin Voss in January 2003. +Updated and maintained by Deusty LLC and the Apple development community. + + License + public domain + Title + MqttCocoaAsyncSocket + Type + PSGroupSpecifier + FooterText The MIT License (MIT) diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Debug-input-files.xcfilelist index 7ce16de..f032cb2 100644 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Debug-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Debug-input-files.xcfilelist @@ -1,6 +1,7 @@ ${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks.sh ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework ${BUILT_PRODUCTS_DIR}/CocoaLumberjack/CocoaLumberjack.framework +${BUILT_PRODUCTS_DIR}/CocoaMQTT/CocoaMQTT.framework ${BUILT_PRODUCTS_DIR}/Differentiator/Differentiator.framework ${BUILT_PRODUCTS_DIR}/HXPHPicker/HXPHPicker.framework ${BUILT_PRODUCTS_DIR}/IQKeyboardCore/IQKeyboardCore.framework @@ -19,6 +20,7 @@ ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework ${BUILT_PRODUCTS_DIR}/MarqueeLabel/MarqueeLabel.framework ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ${BUILT_PRODUCTS_DIR}/Moya/Moya.framework +${BUILT_PRODUCTS_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework ${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework ${BUILT_PRODUCTS_DIR}/Popover/Popover.framework ${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Debug-output-files.xcfilelist index 5cef435..488956d 100644 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Debug-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Debug-output-files.xcfilelist @@ -1,5 +1,6 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CocoaLumberjack.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CocoaMQTT.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Differentiator.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HXPHPicker.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardCore.framework @@ -18,6 +19,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MarqueeLabel.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MqttCocoaAsyncSocket.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Popover.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Release-input-files.xcfilelist index 7ce16de..f032cb2 100644 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Release-input-files.xcfilelist +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Release-input-files.xcfilelist @@ -1,6 +1,7 @@ ${PODS_ROOT}/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks.sh ${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework ${BUILT_PRODUCTS_DIR}/CocoaLumberjack/CocoaLumberjack.framework +${BUILT_PRODUCTS_DIR}/CocoaMQTT/CocoaMQTT.framework ${BUILT_PRODUCTS_DIR}/Differentiator/Differentiator.framework ${BUILT_PRODUCTS_DIR}/HXPHPicker/HXPHPicker.framework ${BUILT_PRODUCTS_DIR}/IQKeyboardCore/IQKeyboardCore.framework @@ -19,6 +20,7 @@ ${BUILT_PRODUCTS_DIR}/MJRefresh/MJRefresh.framework ${BUILT_PRODUCTS_DIR}/MarqueeLabel/MarqueeLabel.framework ${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework ${BUILT_PRODUCTS_DIR}/Moya/Moya.framework +${BUILT_PRODUCTS_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework ${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework ${BUILT_PRODUCTS_DIR}/Popover/Popover.framework ${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Release-output-files.xcfilelist index 5cef435..488956d 100644 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Release-output-files.xcfilelist +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks-Release-output-files.xcfilelist @@ -1,5 +1,6 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CocoaLumberjack.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CocoaMQTT.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Differentiator.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HXPHPicker.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IQKeyboardCore.framework @@ -18,6 +19,7 @@ ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MJRefresh.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MarqueeLabel.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Masonry.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Moya.framework +${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MqttCocoaAsyncSocket.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjectMapper.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Popover.framework ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RxCocoa.framework diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks.sh b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks.sh index f1cd62f..26813bd 100755 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks.sh +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation-frameworks.sh @@ -178,6 +178,7 @@ code_sign_if_enabled() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" install_framework "${BUILT_PRODUCTS_DIR}/CocoaLumberjack/CocoaLumberjack.framework" + install_framework "${BUILT_PRODUCTS_DIR}/CocoaMQTT/CocoaMQTT.framework" install_framework "${BUILT_PRODUCTS_DIR}/Differentiator/Differentiator.framework" install_framework "${BUILT_PRODUCTS_DIR}/HXPHPicker/HXPHPicker.framework" install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardCore/IQKeyboardCore.framework" @@ -196,6 +197,7 @@ if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/MarqueeLabel/MarqueeLabel.framework" install_framework "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework" install_framework "${BUILT_PRODUCTS_DIR}/Moya/Moya.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework" install_framework "${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework" install_framework "${BUILT_PRODUCTS_DIR}/Popover/Popover.framework" install_framework "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework" @@ -221,6 +223,7 @@ fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" install_framework "${BUILT_PRODUCTS_DIR}/CocoaLumberjack/CocoaLumberjack.framework" + install_framework "${BUILT_PRODUCTS_DIR}/CocoaMQTT/CocoaMQTT.framework" install_framework "${BUILT_PRODUCTS_DIR}/Differentiator/Differentiator.framework" install_framework "${BUILT_PRODUCTS_DIR}/HXPHPicker/HXPHPicker.framework" install_framework "${BUILT_PRODUCTS_DIR}/IQKeyboardCore/IQKeyboardCore.framework" @@ -239,6 +242,7 @@ if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/MarqueeLabel/MarqueeLabel.framework" install_framework "${BUILT_PRODUCTS_DIR}/Masonry/Masonry.framework" install_framework "${BUILT_PRODUCTS_DIR}/Moya/Moya.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework" install_framework "${BUILT_PRODUCTS_DIR}/ObjectMapper/ObjectMapper.framework" install_framework "${BUILT_PRODUCTS_DIR}/Popover/Popover.framework" install_framework "${BUILT_PRODUCTS_DIR}/RxCocoa/RxCocoa.framework" diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation.debug.xcconfig b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation.debug.xcconfig index a583565..ec7235d 100644 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation.debug.xcconfig +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation.debug.xcconfig @@ -2,13 +2,13 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES ARCHS = $(ARCHS_STANDARD) CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO ENABLE_USER_SCRIPT_SANDBOXING = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "CFNetwork" -framework "CocoaLumberjack" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI" -OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMap3DMap" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "CFNetwork" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI" +OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMap3DMap" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation.release.xcconfig b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation.release.xcconfig index a583565..ec7235d 100644 --- a/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation.release.xcconfig +++ b/Pods/Target Support Files/Pods-QuickLocation/Pods-QuickLocation.release.xcconfig @@ -2,13 +2,13 @@ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES ARCHS = $(ARCHS_STANDARD) CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = NO ENABLE_USER_SCRIPT_SANDBOXING = NO -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "${PODS_CONFIGURATION_BUILD_DIR}/Moya" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "${PODS_CONFIGURATION_BUILD_DIR}/Popover" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" "${PODS_ROOT}/AlipaySDK-iOS" "${PODS_ROOT}/OpenIMSDKCore/Framework" "${PODS_ROOT}/WechatOpenSDK-XCFramework" "${PODS_ROOT}/YYImage/Vendor" "${PODS_XCFRAMEWORKS_BUILD_DIR}/AlipaySDK-iOS" "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenIMSDKCore" "${PODS_XCFRAMEWORKS_BUILD_DIR}/WechatOpenSDK-XCFramework" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack/CocoaLumberjack.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT/CocoaMQTT.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Differentiator/Differentiator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker/HXPHPicker.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore/IQKeyboardCore.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift/IQKeyboardManagerSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification/IQKeyboardNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager/IQKeyboardReturnManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar/IQKeyboardToolbar.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager/IQKeyboardToolbarManager.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification/IQTextInputViewNotification.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/IQTextView/IQTextView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher/Kingfisher.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP/KingfisherWebP.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD/MBProgressHUD.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJExtension/MJExtension.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh/MJRefresh.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel/MarqueeLabel.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Masonry/Masonry.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Moya/Moya.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket/MqttCocoaAsyncSocket.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper/ObjectMapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK/OpenIMSDK.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Popover/Popover.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa/RxCocoa.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources/RxDataSources.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxRelay/RxRelay.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwift/RxSwift.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt/RxSwiftExt.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView/SDCycleScrollView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage/SDWebImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode/SGQRCode.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate/SwiftDate.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper/SwiftKeychainWrapper.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/TagListView/TagListView.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator/URLNavigator.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser/YBImageBrowser.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/YYImage/YYImage.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/libwebp/libwebp.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios/Lottie.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) /usr/lib/swift '@executable_path/Frameworks' '@loader_path/Frameworks' LIBRARY_SEARCH_PATHS = $(inherited) "${TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" /usr/lib/swift $(SDKROOT)/usr/lib/swift -OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "CFNetwork" -framework "CocoaLumberjack" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI" -OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMap3DMap" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" +OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"resolv" -l"sqlite3.0" -l"swiftCoreGraphics" -l"z" -framework "AVFoundation" -framework "Accelerate" -framework "AdSupport" -framework "Alamofire" -framework "AlipaySDK" -framework "AssetsLibrary" -framework "CFNetwork" -framework "CocoaLumberjack" -framework "CocoaMQTT" -framework "Combine" -framework "CoreFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreText" -framework "Differentiator" -framework "ExternalAccessory" -framework "Foundation" -framework "GLKit" -framework "HXPHPicker" -framework "IQKeyboardCore" -framework "IQKeyboardManagerSwift" -framework "IQKeyboardNotification" -framework "IQKeyboardReturnManager" -framework "IQKeyboardToolbar" -framework "IQKeyboardToolbarManager" -framework "IQTextInputViewNotification" -framework "IQTextView" -framework "ImageIO" -framework "Kingfisher" -framework "KingfisherWebP" -framework "Lottie" -framework "MBProgressHUD" -framework "MJExtension" -framework "MJRefresh" -framework "MarqueeLabel" -framework "Masonry" -framework "MobileCoreServices" -framework "Moya" -framework "MqttCocoaAsyncSocket" -framework "ObjectMapper" -framework "OpenGLES" -framework "OpenIMCore" -framework "OpenIMSDK" -framework "Photos" -framework "PhotosUI" -framework "Popover" -framework "QuartzCore" -framework "RxCocoa" -framework "RxDataSources" -framework "RxRelay" -framework "RxSwift" -framework "RxSwiftExt" -framework "SDCycleScrollView" -framework "SDWebImage" -framework "SGQRCode" -framework "Security" -framework "SnapKit" -framework "SwiftDate" -framework "SwiftKeychainWrapper" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "TagListView" -framework "UIKit" -framework "URLNavigator" -framework "WebKit" -framework "WechatOpenSDK" -framework "YBImageBrowser" -framework "YYImage" -framework "libwebp" -weak_framework "AppTrackingTransparency" -weak_framework "Combine" -weak_framework "Network" -weak_framework "SwiftUI" +OTHER_MODULE_VERIFIER_FLAGS = $(inherited) "-F${PODS_CONFIGURATION_BUILD_DIR}/AMap3DMap" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapFoundation" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapLocation" "-F${PODS_CONFIGURATION_BUILD_DIR}/AMapSearch" "-F${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "-F${PODS_CONFIGURATION_BUILD_DIR}/AlipaySDK-iOS" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaLumberjack" "-F${PODS_CONFIGURATION_BUILD_DIR}/CocoaMQTT" "-F${PODS_CONFIGURATION_BUILD_DIR}/Differentiator" "-F${PODS_CONFIGURATION_BUILD_DIR}/GTCommonSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/GYSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/HXPHPicker" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardManagerSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardReturnManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbar" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQKeyboardToolbarManager" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextInputViewNotification" "-F${PODS_CONFIGURATION_BUILD_DIR}/IQTextView" "-F${PODS_CONFIGURATION_BUILD_DIR}/Kingfisher" "-F${PODS_CONFIGURATION_BUILD_DIR}/KingfisherWebP" "-F${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJExtension" "-F${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "-F${PODS_CONFIGURATION_BUILD_DIR}/MarqueeLabel" "-F${PODS_CONFIGURATION_BUILD_DIR}/Masonry" "-F${PODS_CONFIGURATION_BUILD_DIR}/Moya" "-F${PODS_CONFIGURATION_BUILD_DIR}/MqttCocoaAsyncSocket" "-F${PODS_CONFIGURATION_BUILD_DIR}/ObjectMapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/OpenIMSDKCore" "-F${PODS_CONFIGURATION_BUILD_DIR}/Popover" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxCocoa" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxDataSources" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxRelay" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwift" "-F${PODS_CONFIGURATION_BUILD_DIR}/RxSwiftExt" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDCycleScrollView" "-F${PODS_CONFIGURATION_BUILD_DIR}/SDWebImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/SGQRCode" "-F${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftDate" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftKeychainWrapper" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "-F${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "-F${PODS_CONFIGURATION_BUILD_DIR}/TagListView" "-F${PODS_CONFIGURATION_BUILD_DIR}/URLNavigator" "-F${PODS_CONFIGURATION_BUILD_DIR}/WechatOpenSDK-XCFramework" "-F${PODS_CONFIGURATION_BUILD_DIR}/YBImageBrowser" "-F${PODS_CONFIGURATION_BUILD_DIR}/YYImage" "-F${PODS_CONFIGURATION_BUILD_DIR}/ZXSDK" "-F${PODS_CONFIGURATION_BUILD_DIR}/libwebp" "-F${PODS_CONFIGURATION_BUILD_DIR}/lottie-ios" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) diff --git a/QuickLocation.xcodeproj/project.pbxproj b/QuickLocation.xcodeproj/project.pbxproj index 7754c20..32ae989 100644 --- a/QuickLocation.xcodeproj/project.pbxproj +++ b/QuickLocation.xcodeproj/project.pbxproj @@ -188,6 +188,9 @@ 30C4C01D2FDBF557009215C1 /* RemoveMemberViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C4C01C2FDBF557009215C1 /* RemoveMemberViewModel.swift */; }; 30C4C0202FDC0EC5009215C1 /* GroupInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C4C01F2FDC0EC5009215C1 /* GroupInfoView.swift */; }; 30C4C0222FDC0ED3009215C1 /* GroupInfoVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C4C0212FDC0ED3009215C1 /* GroupInfoVC.swift */; }; + 30D87CDB2FDFA9EE00E958FD /* MQTTService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */; }; + 30D87CDD2FDFF07500E958FD /* InteractionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDC2FDFF07500E958FD /* InteractionView.swift */; }; + 30D87CDF2FDFF1A100E958FD /* QuickMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */; }; 30DC18522FD009CD0041DCD1 /* VipExpenseModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30DC18512FD009CD0041DCD1 /* VipExpenseModel.swift */; }; 30DC18542FD00C4A0041DCD1 /* VipRechargeVM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30DC18532FD00C4A0041DCD1 /* VipRechargeVM.swift */; }; 30DC185A2FD11E7A0041DCD1 /* WebOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30DC18562FD11E7A0041DCD1 /* WebOperations.swift */; }; @@ -420,6 +423,9 @@ 30C4C01C2FDBF557009215C1 /* RemoveMemberViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoveMemberViewModel.swift; sourceTree = ""; }; 30C4C01F2FDC0EC5009215C1 /* GroupInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupInfoView.swift; sourceTree = ""; }; 30C4C0212FDC0ED3009215C1 /* GroupInfoVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupInfoVC.swift; sourceTree = ""; }; + 30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MQTTService.swift; sourceTree = ""; }; + 30D87CDC2FDFF07500E958FD /* InteractionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractionView.swift; sourceTree = ""; }; + 30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickMessageView.swift; sourceTree = ""; }; 30DC18512FD009CD0041DCD1 /* VipExpenseModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VipExpenseModel.swift; sourceTree = ""; }; 30DC18532FD00C4A0041DCD1 /* VipRechargeVM.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VipRechargeVM.swift; sourceTree = ""; }; 30DC18552FD11E7A0041DCD1 /* NavigationTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationTitleView.swift; sourceTree = ""; }; @@ -472,6 +478,11 @@ path = lotties; sourceTree = ""; }; + 30D87CEF2FDFF52100E958FD /* TTGTagCollectionView */ = { + isa = PBXFileSystemSynchronizedRootGroup; + path = TTGTagCollectionView; + sourceTree = ""; + }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -765,6 +776,7 @@ 305A75282FCA8C7000227D26 /* Notification */, 305A752A2FCA8C7000227D26 /* Theme */, 305A752C2FCA8C7000227D26 /* URL */, + 30D87CD52FDF9F1900E958FD /* MQTT */, ); path = Manager; sourceTree = ""; @@ -852,6 +864,8 @@ 305A76292FCA8C7000227D26 /* HomeViewController.swift */, 305A798B2FCAB99300227D26 /* HomeViewModel.swift */, 30A7A9102FCAEE3D00105780 /* GroupListPopView.swift */, + 30D87CDE2FDFF1A100E958FD /* QuickMessageView.swift */, + 30D87CDC2FDFF07500E958FD /* InteractionView.swift */, ); path = Home; sourceTree = ""; @@ -1032,6 +1046,7 @@ 305A767D2FCA8C7000227D26 /* UIKit */ = { isa = PBXGroup; children = ( + 30D87CEF2FDFF52100E958FD /* TTGTagCollectionView */, 305A76482FCA8C7000227D26 /* Alert */, 305A76502FCA8C7000227D26 /* EmptyDataSet */, 305A76542FCA8C7000227D26 /* HUD */, @@ -1174,6 +1189,14 @@ path = GroupInfo; sourceTree = ""; }; + 30D87CD52FDF9F1900E958FD /* MQTT */ = { + isa = PBXGroup; + children = ( + 30D87CDA2FDFA9EE00E958FD /* MQTTService.swift */, + ); + path = MQTT; + sourceTree = ""; + }; 30DC18582FD11E7A0041DCD1 /* Controller */ = { isa = PBXGroup; children = ( @@ -1313,6 +1336,7 @@ ); fileSystemSynchronizedGroups = ( 3070777D2FD2A214004C37CC /* lotties */, + 30D87CEF2FDFF52100E958FD /* TTGTagCollectionView */, ); name = QuickLocation; productName = QuickLocation; @@ -1457,6 +1481,7 @@ 30C4C0222FDC0ED3009215C1 /* GroupInfoVC.swift in Sources */, 305A76902FCA8C7000227D26 /* UserAPI.swift in Sources */, 30EFF3DE2FDA982C00EB35D4 /* EmergencyContactAddVC.swift in Sources */, + 30D87CDF2FDFF1A100E958FD /* QuickMessageView.swift in Sources */, 305A76912FCA8C7000227D26 /* Constant.swift in Sources */, 305A76922FCA8C7000227D26 /* LogUtils.swift in Sources */, 305A76932FCA8C7000227D26 /* AddImageCell.swift in Sources */, @@ -1620,6 +1645,7 @@ 305A76FB2FCA8C7000227D26 /* EmptyDataSet.swift in Sources */, 305A76FC2FCA8C7000227D26 /* EmptyDataSetDelegate.swift in Sources */, 305A76FD2FCA8C7000227D26 /* EmptyDataSetSource.swift in Sources */, + 30D87CDB2FDFA9EE00E958FD /* MQTTService.swift in Sources */, 30EFF3CD2FDA668A00EB35D4 /* MyProfileView.swift in Sources */, 305A76FE2FCA8C7000227D26 /* EmptyDataSetView.swift in Sources */, 30C4C0192FDBF094009215C1 /* RemoveMemberVC.swift in Sources */, @@ -1630,6 +1656,7 @@ 305A77032FCA8C7000227D26 /* ProgressHUD.swift in Sources */, 305A77042FCA8C7000227D26 /* MXParallaxHeader.m in Sources */, 305A77052FCA8C7000227D26 /* MXScrollView.m in Sources */, + 30D87CDD2FDFF07500E958FD /* InteractionView.swift in Sources */, 30BAB8652FCD718A00C33B5C /* JoinGroupView.swift in Sources */, 305A77062FCA8C7000227D26 /* MXScrollViewController.m in Sources */, 305A77072FCA8C7000227D26 /* Helper.swift in Sources */, diff --git a/QuickLocation.xcworkspace/xcuserdata/yanghong.xcuserdatad/UserInterfaceState.xcuserstate b/QuickLocation.xcworkspace/xcuserdata/yanghong.xcuserdatad/UserInterfaceState.xcuserstate index f3be8e9ea8904c634cec1b744f2d7a49c8f59510..5638b49119dc9895161e1fb1a34ec8a0ecb18139 100644 GIT binary patch literal 1157933 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ǹ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 i^P#k=n#d_L|9={B{=TH2}p>JUl8h| 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�OlXEoUsy5XH?tig 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 xmAXg$*3Sj0<;p#&i6ZU-%pdUDU-zU0e)D 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 literal 0 HcmV?d00001 diff --git a/QuickLocation/Assets.xcassets/Common/x.imageset/Group_1572@3x.png b/QuickLocation/Assets.xcassets/Common/x.imageset/Group_1572@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ede26f8c56afd92c077ff0cbb6a5756d70ce716e GIT binary patch literal 1068 zcmV+{1k?M8P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91B%lKT1ONa40RR91CjbBd0Bx?BEC2ulmPtfGR9FeUm`_MlQ51)#G7?hC z5B? zj3}&}zMtGT9Ix-rygSYFz~{Vs?mg#s?)!7^dlstI>M&Gb2`)feVT(*!Z~_)#9*!6I zGY5%%=HN8!$h#(KI4x-=Hm`zKl9u~bwS!ww&>%X}vbLgvCSlcjIo9P z<(7uE-!yKkpe}d{a#;IF;~2E8DCL47SO9C%eh&NBPXGr+m<4NVG~U61R-Gks^}-ua zZfnvmZqUKe18?CESevG?Z^Pgw8p;96WldVr>`6^YM?cJfKZ9rZim5>voQehIuqKTu z=nJNxQ`h(qXic!DYpjIPXG$?HRynMFqA>uC?@}D`yy;ANCD`s5<=4N&in#&p^)#aUNZ1Kaz<+!z_>Mr@W~s4?$^2wS6{f^+4}O9* zty})ur7;?tPccd52xv2Y41XbH>U#itlDJ%d5$cAQ5VF^Fbmv-xpBzCgoFR)}_1MqSyF!W7=f-HPHRWpVeTcwQPzK-b^;d^9^o0}t>Y%d^reF=My`WJ{ zJ)IexiUsAcCXE^BPfbBby)W1Q-j~R){cjqqrGL3HLNl1PBRSR#-owGv88qQkE|=54 z0{Y(XT~EouUPya2UBEvC;cFaOlybS8%56>esQv@fRp8Gp@V5j#1$swr`G3-s)8&?i zwN)CED#%}j%lHmQPCk0LG(cL`*8hXHXgpszJ_EIHt!Sl;0n%_<(oAelXJ{DoE~CP< mKjmIbQnR$2rY>IvhW`O(m0OWi3ZQrZ0000;rG0Ni5^MjZpdNe2MM&2=OEr?z14B>bW$e09I zc%5_oxEui2yqKtc31{oHs@NPa+N)m;u|F^pL{KU9V0j`nH1bL4j>~~bZvBj&S59Rf z&y4-_a5yVk%vP6O9FL9bk;0Kj<^q@;iyoSWVdK_D7R+nP$80GRrSD|7}_ zP!Y@|wQnb+PI;lOV!F6^D2awHIx9puns=8JR-ipD z>MLeW5dHuRR^&VM$c~n@?TD!gijr3FU`=Q{&B-CD$XPr?aMNNQvsRREMGC~Ld&AnJ z2@e3I_ep@VxrP2ptU&nCio7)dV&EpGgXergVleS4(7Y^a7*^C!Kd{dUP}z>&;Vhe4 zd0Qmyh08yPYz+-t3Xp5JJU07U88eIuwPX?Xf9_rg@{1jf)a_~PaT4@1E9eLl&kfq{ z(fVd;_%Z=$>V8@*H1iH!^xq}%PqTUULQxU)Gw{26G@5XQq?y&7C6n2Yc$U;2DoAb9{C91&ZMoN|-Y#ms&j2$VPU3qWKQ%IjKyp zZ7I|5#}l*e$Ym0|l5V!T$J8`p+YcEEY}RW7;_H6B0Huwf3&|8y5hAYZXn< z(2dvAWy>uhyd0|y1C_SjdFyp(tbWp1>N;D1QAEiFh~|W%Z>HExP_1+XmRn00@GrcT zQUVGP_^Ylp;GHv8ljyoNv)N+vdr-dpeYk0Yj((U7?S4dfULtb92)~`KN2$ps<+a`M zL-(tsdXgX;J7<;{*PB?Z#JIDl8iN{dqI}thquTNawccjKZUwoy^g`UvjW;IozSb5z zu-9FBd#iD;EgMA)vKRSE1dZl=A_wo*rRt^<2zsi3%)!= z=Ib6Vyyl7DXDAAd-ym7qh`t&H;zXP~cFC?q24%!lqGxn6#K&Li})7!QX-{RIW z=z9I=q7OV<4&xU6|3qh2!2SRB^$9CKcvPq?JIU3Kv7>h0%S?FCB7-%acC3u4mnA{Tm~_z#KN5l5AdUk+vrS z7f~%gOjz$!k_k=iSbdsyd}Z!GL~`s!Z7FHVJ{4D}m;APtbgfCvBPr4i0H{cPPkKX~ lH8z~au`Vpc1Q`G(m!h_eZ3i@7??cOgm;-T9{K(WV{sfv(n4$mx literal 0 HcmV?d00001 diff --git a/QuickLocation/Assets.xcassets/Home/interaction_header.imageset/interaction_header@3x.png b/QuickLocation/Assets.xcassets/Home/interaction_header.imageset/interaction_header@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..76304603614828600d0dfd0f5824ffa88f97d43e GIT binary patch literal 6952 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 literal 0 HcmV?d00001 diff --git a/QuickLocation/Assets.xcassets/Home/navigate.imageset/Contents.json b/QuickLocation/Assets.xcassets/Home/navigate.imageset/Contents.json new file mode 100644 index 0000000..44bc01f --- /dev/null +++ b/QuickLocation/Assets.xcassets/Home/navigate.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group_1951@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group_1951@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/QuickLocation/Assets.xcassets/Home/navigate.imageset/Group_1951@2x.png b/QuickLocation/Assets.xcassets/Home/navigate.imageset/Group_1951@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..82b74e1abaa8e3dc718104fe2efa528aaebfcb62 GIT binary patch literal 2214 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 literal 0 HcmV?d00001 diff --git a/QuickLocation/Assets.xcassets/Home/share.imageset/Contents.json b/QuickLocation/Assets.xcassets/Home/share.imageset/Contents.json new file mode 100644 index 0000000..f5da3ea --- /dev/null +++ b/QuickLocation/Assets.xcassets/Home/share.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group_1947@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group_1947@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/QuickLocation/Assets.xcassets/Home/share.imageset/Group_1947@2x.png b/QuickLocation/Assets.xcassets/Home/share.imageset/Group_1947@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c5b276a49fe0138114a764b0a60b085724829e39 GIT binary patch literal 1689 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 Z^#5t8JN-jn{%imM002ovPDHLkV1ntjEFb^? literal 0 HcmV?d00001 diff --git a/QuickLocation/Main/Tabbar/MainTabBarController.swift b/QuickLocation/Main/Tabbar/MainTabBarController.swift index a36109c..43f684f 100644 --- a/QuickLocation/Main/Tabbar/MainTabBarController.swift +++ b/QuickLocation/Main/Tabbar/MainTabBarController.swift @@ -79,6 +79,11 @@ final class MainTabBarController: UITabBarController { guard let nav = selectedViewController as? UINavigationController else { return } customTabBar.isHidden = nav.viewControllers.count > 1 } + + /// 强制显示/隐藏 tabBar(供底部面板使用) + func setTabBarHidden(_ hidden: Bool) { + customTabBar.isHidden = hidden + } } // MARK: - QuickLocationTabBarDelegate diff --git a/QuickLocation/Manager/MQTT/MQTTService.swift b/QuickLocation/Manager/MQTT/MQTTService.swift new file mode 100644 index 0000000..72bd7f0 --- /dev/null +++ b/QuickLocation/Manager/MQTT/MQTTService.swift @@ -0,0 +1,257 @@ +// +// MQTTService.swift +// QuickLocation +// +// Created by 八条 on 2026/6/12. +// + +import Foundation +import CocoaMQTT +import UIKit +import _LocationEssentials + +// MARK: - MQTT 模型 + +/// 位置上报类型 +enum MqttType: String, Codable { + case track = "track" // 追踪(获取)和更新用户状态 + case disconnect = "disconnect" + case message = "message" + case join = "join" // 加入群 + case leave = "leave" // 离开群 + case dismiss = "dismiss" // 解散群 + case kick = "kick" // 踢人 + case signIn = "signin" // 签到 + case sos = "sos" // 求助 + case needTrack = "needtrack" // 追踪上报 + case emote = "emote" // 接收表情 +} + +/// 单点位置 +struct Points: Codable { + let lat: Double + let lon: Double + let addr: String + let time: Int64 // 毫秒时间戳 + let speed: Double + let bearing: Double + let altitude: Double + let accuracy: Double +} + +/// 位置上报数据(发送) +struct MqttLocation: Codable { + let battery: String + let points: [Points] +} + +/// MQTT 收到的位置消息(接收解析用) +struct MqttIncomingMessage: Decodable { + let type: String? + let data: MqttIncomingData? + let extra: String? +} + +struct MqttIncomingData: Decodable { + let points: [Points]? + let battery: String? +} + +// MARK: - MQTTService + +/// MQTT 5.0 服务,管理连接、订阅和消息收发 +final class MQTTService: NSObject { + + static let shared = MQTTService() + + private var mqtt: CocoaMQTT5? + private var isConnected = false + + // MARK: - 连接状态回调 + var onConnected: (() -> Void)? + var onDisconnected: (() -> Void)? + + /// 全局接收回调(所有未匹配 topicCallback 的消息) + var onMessageReceived: ((CocoaMQTT5Message, UInt16, MqttPublishProperties) -> Void)? + + /// 按 topic 订阅的回调(优先匹配) + private var topicCallbacks: [String: (CocoaMQTT5Message) -> Void] = [:] + + // MARK: - 配置 + private var host: String { "emqx.batiao8.com" } + private var port: UInt16 { 1883 } + /// 当前 clientID,切换用户时可更新后重连 + private(set) var clientID: String = "" + private var userName = "batiao" + private var password = "Batiao12B" + private var topic = "smartdrive/" + + override private init() {} + + // MARK: - 连接 + func connect() { + guard !isConnected else { return } + + if clientID.isEmpty { + clientID = "smartdrive_\(AppContextManager.shared.userId)" + } + let mqtt = CocoaMQTT5(clientID: clientID, host: host, port: port) + mqtt.username = userName + mqtt.password = password + mqtt.keepAlive = 60 + mqtt.autoReconnect = true + mqtt.autoReconnectTimeInterval = 5 + mqtt.delegate = self + mqtt.logLevel = .warning + + self.mqtt = mqtt + _ = mqtt.connect() + } + + // MARK: - 断开 + func disconnect() { + mqtt?.disconnect() + isConnected = false + } + + // MARK: - 切换用户 + /// 更新 clientID 并重连(切换用户后调用) + func updateClientID(_ newID: String) { + clientID = newID + disconnect() + connect() + } + + // MARK: - 订阅主题 + /// - Parameters: + /// - topic: 主题 + /// - qos: 服务质量 + /// - callback: 可选,该 topic 的专用回调,收到消息时优先于此回调 + func subscribe(topic: String, qos: CocoaMQTTQoS = .qos1, callback: ((CocoaMQTT5Message) -> Void)? = nil) { + let subscription = MqttSubscription(topic: topic, qos: qos) + mqtt?.subscribe([subscription]) + if let cb = callback { + topicCallbacks[topic] = cb + } + } + + // MARK: - 取消订阅 + func unsubscribe(topic: String) { + mqtt?.unsubscribe(topic) + topicCallbacks.removeValue(forKey: topic) + } + + /// 订阅指定圈子的所有成员位置 topic: smartdrive/ + func subscribeGroupMembers(_ memberIds: [String]) { + for id in memberIds { + subscribe(topic: "\(topic)\(id)") + } + } + + /// 取消订阅上一批成员 + func unsubscribeGroupMembers(_ memberIds: [String]) { + for id in memberIds { + mqtt?.unsubscribe("\(topic)\(id)") + } + } + + // MARK: - 发布消息 + @discardableResult + func publish(topic: String, message: String, qos: CocoaMQTTQoS = .qos1) -> Int { + let properties = MqttPublishProperties() + return mqtt?.publish(topic, withString: message, qos: qos, DUP: false, retained: false, properties: properties) ?? -1 + } + + @discardableResult + func publish(topic: String, data: Data, qos: CocoaMQTTQoS = .qos1) -> Int { + let properties = MqttPublishProperties() + let message = CocoaMQTT5Message(topic: topic, payload: [UInt8](data)) + return mqtt?.publish(message, DUP: false, retained: false, properties: properties) ?? -1 + } + + // MARK: - 位置上报 + /// 构建并上报位置数据(格式与 Android 一致) + func reportLocation(lat: Double, lon: Double, addr: String, + speed: CLLocationSpeed, bearing: CLLocationDirection, + altitude: CLLocationDistance, accuracy: CLLocationAccuracy) { + let battery = UIDevice.current.batteryLevel > 0 + ? Int(UIDevice.current.batteryLevel * 100) + : 0 + + let point = Points( + lat: lat, lon: lon, addr: addr, + time: Int64(Date().timeIntervalSince1970 * 1000), + speed: speed, bearing: bearing, + altitude: altitude, accuracy: accuracy + ) + let location = MqttLocation(battery: battery.string, points: [point]) + + guard let jsonData = try? JSONEncoder().encode(location), + let dataDict = try? JSONSerialization.jsonObject(with: jsonData) as? [String: Any] + else { return } + + // 外层包装,data 是 JSON 对象而非字符串 + let payload: [String: Any] = [ + "type": MqttType.track.rawValue, + "extra": "", + "data": dataDict + ] + + publish(topic: "\(topic)\(AppContextManager.shared.userId)", message: payload.toJsonString()) + } +} + +// MARK: - CocoaMQTT5Delegate +extension MQTTService: CocoaMQTT5Delegate { + + func mqtt5(_ mqtt5: CocoaMQTT5, didConnectAck ack: CocoaMQTTCONNACKReasonCode, connAckData: MqttDecodeConnAck?) { + isConnected = true + print("MQTT5 connected: \(ack)") + onConnected?() + } + + func mqtt5(_ mqtt5: CocoaMQTT5, didPublishMessage message: CocoaMQTT5Message, id: UInt16) { + print("MQTT5 published: \(message.topic)") + } + + func mqtt5(_ mqtt5: CocoaMQTT5, didPublishAck id: UInt16, pubAckData: MqttDecodePubAck?) { + print("MQTT5 publish ack: \(id)") + } + + func mqtt5(_ mqtt5: CocoaMQTT5, didPublishRec id: UInt16, pubRecData: MqttDecodePubRec?) {} + + func mqtt5(_ mqtt5: CocoaMQTT5, didReceiveMessage message: CocoaMQTT5Message, id: UInt16, publishData: MqttDecodePublish?) { + // 优先 topic 专用回调 + if let cb = topicCallbacks[message.topic] { + cb(message) + return + } + // 没有专用回调时走全局回调 + if let payload = message.string { + print("MQTT5 received on \(message.topic): \(payload)") + } + onMessageReceived?(message, id, MqttPublishProperties()) + } + + func mqtt5(_ mqtt5: CocoaMQTT5, didSubscribeTopics success: NSDictionary, failed: [String], subAckData: MqttDecodeSubAck?) { + print("MQTT5 subscribe success: \(success), failed: \(failed)") + } + + func mqtt5(_ mqtt5: CocoaMQTT5, didUnsubscribeTopics topics: [String], unsubAckData: MqttDecodeUnsubAck?) { + print("MQTT5 unsubscribe: \(topics)") + } + + func mqtt5(_ mqtt5: CocoaMQTT5, didReceiveDisconnectReasonCode reasonCode: CocoaMQTTDISCONNECTReasonCode) {} + + func mqtt5(_ mqtt5: CocoaMQTT5, didReceiveAuthReasonCode reasonCode: CocoaMQTTAUTHReasonCode) {} + + func mqtt5DidPing(_ mqtt5: CocoaMQTT5) {} + + func mqtt5DidReceivePong(_ mqtt5: CocoaMQTT5) {} + + func mqtt5DidDisconnect(_ mqtt5: CocoaMQTT5, withError err: Error?) { + isConnected = false + print("MQTT5 disconnected: \(err?.localizedDescription ?? "")") + onDisconnected?() + } +} diff --git a/QuickLocation/Model/GroupModel.swift b/QuickLocation/Model/GroupModel.swift index 6d9f0be..6e79c05 100644 --- a/QuickLocation/Model/GroupModel.swift +++ b/QuickLocation/Model/GroupModel.swift @@ -185,6 +185,8 @@ struct GroupMemberModel: Mappable, Equatable { } /// 是否在线 var is_online: Bool = false + /// 最后在线文本(MQTT 计算) + var lastUpdateText: String = "" /// 设备电量 var battery: String = "" /// 最后在线时间 diff --git a/QuickLocation/QuickLocation-Bridging-Header.h b/QuickLocation/QuickLocation-Bridging-Header.h index 94ee369..c28fd20 100644 --- a/QuickLocation/QuickLocation-Bridging-Header.h +++ b/QuickLocation/QuickLocation-Bridging-Header.h @@ -17,6 +17,8 @@ #import "MXScrollView.h" #import "MXScrollViewController.h" +#import "TTGTextTagCollectionView.h" + // Pop #import "DLViewTransition.h" diff --git a/QuickLocation/Section/Group/GroupInfo/GroupInfoVC.swift b/QuickLocation/Section/Group/GroupInfo/GroupInfoVC.swift index b173f80..260485e 100644 --- a/QuickLocation/Section/Group/GroupInfo/GroupInfoVC.swift +++ b/QuickLocation/Section/Group/GroupInfo/GroupInfoVC.swift @@ -30,7 +30,7 @@ class GroupInfoVC: BaseViewController { rootView.groupIcon.image = model.groupIcon rootView.groupNameLab.text = model.name - + rootView.setupData(model) rootView.applyBtn.rx.tap.subscribe(onNext: { _ in self.requestOperateGroup() }).disposed(by: disposeBag) diff --git a/QuickLocation/Section/Group/GroupInfo/GroupInfoView.swift b/QuickLocation/Section/Group/GroupInfo/GroupInfoView.swift index b53b73b..aa908ed 100644 --- a/QuickLocation/Section/Group/GroupInfo/GroupInfoView.swift +++ b/QuickLocation/Section/Group/GroupInfo/GroupInfoView.swift @@ -8,11 +8,21 @@ import UIKit import RxSwift import RxCocoa +import TagListView class GroupInfoView: UIView { var disposeBag = DisposeBag() + func setupData(_ model: GroupInfoModel) { + groupDescLab.text = model.description.isEmpty ? "暂无描述" : model.description + tagListView.addTags(model.labels) + tagListView.tagViews.forEach { + $0.layer.cornerRadius = 4 + } + tagListView.invalidateIntrinsicContentSize() // 通知系统重新算高 + } + private func setupRx() { backBtn.rx.tap.subscribe(onNext: { _ in @@ -28,6 +38,8 @@ class GroupInfoView: UIView { addSubview(groupIcon) addSubview(groupNameLab) + addSubview(groupDescView) + addSubview(tagView) addSubview(applyBtn) navBgView.layoutChain @@ -59,6 +71,14 @@ class GroupInfoView: UIView { .topToBottomOfView(groupIcon, offset: 4) .centerX() + groupDescView.layoutChain + .topToBottomOfView(groupNameLab, offset: 30) + .edgesHorzontal(15) + + tagView.layoutChain + .topToBottomOfView(groupDescView, offset: 10) + .edgesHorzontal(15) + applyBtn.layoutChain .edgesHorzontal(30) .bottom(kSafeBottomMargin + 10) @@ -108,6 +128,78 @@ class GroupInfoView: UIView { return label }() + lazy var groupDescView: UIView = { + let view = UIView() + view.backgroundColor = UIColor(hexStr: "#F5FBFF") + view.cornerRadius = 10 + + let titleLab = UILabel() + titleLab.text = "圈子描述" + titleLab.textColor = ThemeManager.shared.color.titleAuxColor + titleLab.font = .systemFont(ofSize: 12, weight: .medium) + view.addSubview(titleLab) + titleLab.layoutChain + .left(15) + .width(50) + .top(22) + + view.addSubview(groupDescLab) + groupDescLab.layoutChain + .top(20) + .leftToRightOfView(titleLab, offset: 20) + .right(15) + .bottom(20) + + return view + }() + + lazy var groupDescLab: UILabel = { + let label = UILabel() + label.textColor = ThemeManager.shared.color.titleAuxColor + label.font = .systemFont(ofSize: 14, weight: .medium) + label.numberOfLines = 0 + return label + }() + + // 标签 + lazy var tagView: UIView = { + let view = UIView() + view.backgroundColor = UIColor(hexStr: "#F5FBFF") + view.cornerRadius = 10 + + let titleLab = UILabel() + titleLab.text = "圈子标签" + titleLab.textColor = ThemeManager.shared.color.titleAuxColor + titleLab.font = .systemFont(ofSize: 12, weight: .medium) + view.addSubview(titleLab) + titleLab.layoutChain + .left(15) + .width(50) + .top(20) + + view.addSubview(tagListView) + tagListView.layoutChain + .top(15) + .leftToRightOfView(titleLab, offset: 23) + .height(27, relation: .greaterThanOrEqual) + .right(15) + .bottom(20) + + return view + }() + + lazy var tagListView: TagListView = { + let view = TagListView() + view.textFont = UIFont.systemFont(ofSize: 12, weight: .medium) + view.textColor = UIColor(hexStr: "#16B3FF") + view.tagBackgroundColor = UIColor(hexStr: "#E3F6FF") + view.paddingX = 20 // 水平内边距 + view.paddingY = 6 // 垂直内边距 + view.alignment = .left // 对齐 + view.translatesAutoresizingMaskIntoConstraints = false + return view + }() + lazy var applyBtn: UIButton = { let btn = UIButton(type: .custom) btn.setTitle("申请加入", for: .normal) diff --git a/QuickLocation/Section/Home/GroupMemberView.swift b/QuickLocation/Section/Home/GroupMemberView.swift index 85a0dde..c33446e 100644 --- a/QuickLocation/Section/Home/GroupMemberView.swift +++ b/QuickLocation/Section/Home/GroupMemberView.swift @@ -135,6 +135,7 @@ class GroupMemberView: UIView { tableView.estimatedRowHeight = 76 tableView.bounces = false tableView.showsVerticalScrollIndicator = false + tableView.isScrollEnabled = false tableView.register(GroupMemberCell.self) return tableView }() @@ -165,12 +166,24 @@ class GroupMemberCell: UITableViewCell { nameLab.textColor = UIColor(hexStr: isCurrentUser ? "#16B3FF" : "#0F2846") // 电量 16是电池图标宽度,右边有电池造型需要减去 - batteryView.layoutChain.width(CGFloat((16 - 1) * (model.battery.int / 100))) + let batteryPercent = min(CGFloat(model.battery.int), 100) + batteryView.layoutChain.width(CGFloat(16 - 1) * batteryPercent / 100.0) batteryLab.text = "\(model.battery)%" + + // 在线状态 + if model.is_online { + onlineDotView.isHidden = false + onlineStatusLab.text = "在线" + onlineStatusLab.textColor = ThemeManager.shared.color.titleAuxColor + } else { + onlineDotView.isHidden = true + onlineStatusLab.text = model.lastUpdateText + onlineStatusLab.textColor = UIColor(hexStr: "#999999") + } } private func setupSubviews() { - contentView.addSubview(ownBgView) + contentView.addSubview(selectedBgView) contentView.addSubview(avaterImgView) contentView.addSubview(vipIcon) contentView.addSubview(batteryInfoView) @@ -188,7 +201,7 @@ class GroupMemberCell: UITableViewCell { } private func setupLayout() { - ownBgView.layoutChain + selectedBgView.layoutChain .edgesHorzontal(15) .edgesVertical() @@ -212,7 +225,7 @@ class GroupMemberCell: UITableViewCell { .width(16) .height(8) - batteryView.layoutChain + batteryView.layoutChain .topToView(batteryIcon) .leftToView(batteryIcon, offset: -1) .bottomToView(batteryIcon) @@ -256,7 +269,7 @@ class GroupMemberCell: UITableViewCell { .bottom(18) } - lazy var ownBgView: UIView = { + lazy var selectedBgView: UIView = { let view = UIView() view.backgroundColor = UIColor(hexStr: "#EAFBFF") view.cornerRadius = 10 @@ -387,32 +400,38 @@ class GroupMemberCell: UITableViewCell { let view = UIView() view.backgroundColor = .clear - let dot = UIView() - dot.backgroundColor = UIColor(hexStr: "#67EA76") - dot.cornerRadius = 4 + view.addSubview(onlineDotView) + view.addSubview(onlineStatusLab) - let label = UILabel() - label.textColor = ThemeManager.shared.color.titleAuxColor - label.font = .systemFont(ofSize: 10, weight: .medium) - label.text = "在线" - - view.addSubview(dot) - view.addSubview(label) - - dot.layoutChain + onlineDotView.layoutChain .left() .centerY() .height(8) .width(8) - label.layoutChain + onlineStatusLab.layoutChain .edgesVertical() - .leftToRightOfView(dot, offset: 3) + .leftToRightOfView(onlineDotView, offset: 3) .right() return view }() + lazy var onlineDotView: UIView = { + let view = UIView() + view.backgroundColor = UIColor(hexStr: "#67EA76") + view.cornerRadius = 4 + return view + }() + + lazy var onlineStatusLab: UILabel = { + let label = UILabel() + label.textColor = ThemeManager.shared.color.titleAuxColor + label.font = .systemFont(ofSize: 10, weight: .medium) + label.text = "在线" + return label + }() + override func awakeFromNib() { super.awakeFromNib() // Initialization code @@ -431,7 +450,6 @@ class GroupMemberCell: UITableViewCell { override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) - - // Configure the view for the selected state + selectedBgView.isHidden = !selected } } diff --git a/QuickLocation/Section/Home/HomeView.swift b/QuickLocation/Section/Home/HomeView.swift index 7cfb81e..cfdff26 100644 --- a/QuickLocation/Section/Home/HomeView.swift +++ b/QuickLocation/Section/Home/HomeView.swift @@ -19,12 +19,18 @@ class HomeView: UIView { let groupMemberView = GroupMemberView(frame: .zero) + let quickMessageView = QuickMessageView(frame: CGRectMake(0, kScreenHeight, kScreenWidth, 93)) + + let interactionView = InteractionView(frame: CGRectMake(0, kScreenHeight, kScreenWidth, 384)) + // MARK: - groupMemberView 拖拽 private var groupMemberTopConstraint: NSLayoutConstraint? private var groupMemberUpLimit: CGFloat = 0 private var groupMemberDownLimit: CGFloat = 0 private var isGroupMemberLimitsSet = false private var panStartTop: CGFloat = 0 + /// 内嵌 tableView 是否可滑动(最大化时才可) + private var isSubCanScroll = false // MARK: - Map #if !targetEnvironment(simulator) @@ -58,9 +64,37 @@ class HomeView: UIView { }() #endif + /// 面板关闭回调 + var onDismissPanel: (() -> Void)? + // MARK: - Setup private func setupRx() { + quickMessageView.closeBtn.rx.tap + .subscribe(onNext: { [weak self] _ in + self?.dismissMemberPanel() + self?.onDismissPanel?() + }) + .disposed(by: disposeBag) + // tableView 到达顶部继续下拉时,改由 GroupMemberView 的 pan 手势接管 + groupMemberView.tableView.rx.contentOffset + .subscribe(onNext: { [weak self] offset in + guard let self = self else { return } + if self.isSubCanScroll { + if offset.y <= 0 { + self.isSubCanScroll = false + self.groupMemberView.tableView.setContentOffset(.zero, animated: false) + } + } else if offset.y != 0 { + self.groupMemberView.tableView.setContentOffset(.zero, animated: false) + } + }) + .disposed(by: disposeBag) + + // 收回互动view + quickMessageView.closeBtn.rx.tap.subscribe(onNext: { _ in + self.dismissMemberPanel() + }).disposed(by: disposeBag) } private func setupUI() { @@ -136,7 +170,7 @@ class HomeView: UIView { .left(23) .centerY() .width(40) - + bubbleView.layoutChain .top(12) .height(58) @@ -200,13 +234,35 @@ class HomeView: UIView { .topToBottomOfView(toolsView, offset: 10) .edgesHorzontal() .bottom() - + groupMemberTopConstraint = groupMemberView.jh_constraint( .top, toAttribute: .bottom, otherView: toolsView, relation: .equal ) let pan = UIPanGestureRecognizer(target: self, action: #selector(handleGroupMemberPan(_:))) + pan.delegate = self groupMemberView.addGestureRecognizer(pan) + + // 底部弹出面板(quickMessageView 在上,interactionView 在下) + addSubview(interactionView) + addSubview(quickMessageView) + } + + // MARK: - 底部面板显隐 + func showMemberPanel(member: CircleMember) { + interactionView.configure(member: member) + quickMessageView.isHidden = false + interactionView.isHidden = false + quickMessageView.frame.origin.y = kScreenHeight - 384 - 93 + interactionView.frame.origin.y = kScreenHeight - 384 + } + + func dismissMemberPanel() { + quickMessageView.frame.origin.y = kScreenHeight + interactionView.frame.origin.y = kScreenHeight + quickMessageView.isHidden = true + interactionView.isHidden = true + onDismissPanel?() } override init(frame: CGRect) { @@ -239,10 +295,24 @@ class HomeView: UIView { switch pan.state { case .began: - panStartTop = pan.location(in: self).y - pan.translation(in: self).y + panStartTop = groupMemberView.frame.minY case .changed: let newTop = panStartTop + pan.translation(in: self).y + + // 最大化状态下,tableView 可以向下滑时,不干扰自身滑动; + // 只有 tableView 到达顶部继续下拉时,才切换为 view 拖拽 + if isSubCanScroll { + let tableViewOffset = self.groupMemberView.tableView.contentOffset.y + if tableViewOffset > 0, newTop >= groupMemberUpLimit { + // 还未滑到顶部,让 tableView 处理 + return + } + // 到达顶部继续下拉 → 关闭子滚动,交由 view 的 pan 处理 + isSubCanScroll = false + panStartTop = groupMemberView.frame.minY + } + let clamped = max(groupMemberUpLimit, min(groupMemberDownLimit, newTop)) topConstraint.constant = clamped - groupMemberDownLimit + 10 @@ -260,6 +330,13 @@ class HomeView: UIView { UIView.animate(withDuration: 0.25, delay: 0, options: [.curveEaseOut, .allowUserInteraction]) { self.layoutIfNeeded() + } completion: { _ in + let atTop = target == self.groupMemberUpLimit + self.isSubCanScroll = atTop + // 未最大化时重置 tableView 到顶部 + if !atTop { + self.groupMemberView.tableView.contentOffset.y = 0 + } } default: @@ -267,6 +344,17 @@ class HomeView: UIView { } } + /// 收起 GroupMemberView(选中成员后调用) + func dismissGroupMemberView() { + guard isGroupMemberLimitsSet, let topConstraint = groupMemberTopConstraint else { return } + isSubCanScroll = false + topConstraint.constant = groupMemberDownLimit - groupMemberDownLimit + 10 + groupMemberView.tableView.setContentOffset(.zero, animated: false) + UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseOut) { + self.layoutIfNeeded() + } + } + // MARK: - UI Components lazy var navBarBg: UIImageView = { let view = UIImageView() @@ -482,3 +570,13 @@ class HomeView: UIView { return view }() } + +// MARK: - UIGestureRecognizerDelegate +extension HomeView: UIGestureRecognizerDelegate { + func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, + shouldRecognizeSimultaneouslyWith other: UIGestureRecognizer) -> Bool { + // 允许 GroupMemberView 的 pan 与 tableView 的 pan 同时识别 + // 滚动状态由 isSubCanScroll + contentOffset 控制,不影响手势判定 + return true + } +} diff --git a/QuickLocation/Section/Home/HomeViewController.swift b/QuickLocation/Section/Home/HomeViewController.swift index 65b87fe..adf40e4 100644 --- a/QuickLocation/Section/Home/HomeViewController.swift +++ b/QuickLocation/Section/Home/HomeViewController.swift @@ -14,6 +14,7 @@ import SwiftyUserDefaults #if !targetEnvironment(simulator) import MAMapKit +import CocoaMQTT #endif class HomeViewController: BaseViewController { @@ -35,6 +36,13 @@ class HomeViewController: BaseViewController { private var members: [CircleMember] = [] private var currentUserMember: CircleMember? private var currentUserAnnotation: MemberAnnotation? + /// 最新位置(供 MQTT 定时上报) + private var lastLocation: CLLocation? + private var locationTimer: Timer? + /// 当前已订阅 MQTT 的成员 ID 列表 + private var subscribedMemberIds: [String] = [] + /// 底部成员面板是否显示 + private var isMemberPanelShown = false override func loadView() { #if !targetEnvironment(simulator) @@ -52,11 +60,62 @@ class HomeViewController: BaseViewController { setupMap() setupHeading() reactiveAction() - + requestUserConfig() + + // MQTT 位置上报 + UIDevice.current.isBatteryMonitoringEnabled = true + startLocationTimer() + } + + // MARK: - MQTT 位置上报 + private let geocoder = CLGeocoder() + private var lastGeocodedCoord: CLLocationCoordinate2D? + private var lastAddress: String = "" + + private func startLocationTimer() { + locationTimer?.invalidate() + locationTimer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { [weak self] _ in + guard let self = self, let loc = self.lastLocation else { return } + let coord = loc.coordinate + + // 坐标变化不大时复用上次地址 + if let last = self.lastGeocodedCoord, + hypot(coord.latitude - last.latitude, coord.longitude - last.longitude) < 0.001, + !self.lastAddress.isEmpty { + self.publishLocation(coord: coord, address: self.lastAddress, loc: loc) + return + } + + // 反向地理编码获取地址 + self.geocoder.reverseGeocodeLocation(loc) { [weak self] placemarks, error in + guard let self = self else { return } + let address = placemarks?.first?.name + ?? placemarks?.first?.thoroughfare + ?? placemarks?.first?.locality + ?? "" + self.lastAddress = address + self.lastGeocodedCoord = coord + self.publishLocation(coord: coord, address: address, loc: loc) + } + } + } + + private func publishLocation(coord: CLLocationCoordinate2D, address: String, loc: CLLocation) { + MQTTService.shared.reportLocation( + lat: coord.latitude, + lon: coord.longitude, + addr: address, + speed: loc.speed, + bearing: loc.course, + altitude: loc.altitude, + accuracy: loc.horizontalAccuracy + ) } + // MARK: - Actions private func reactiveAction() { + rootView.groupView.rx.tapGesture.subscribe { _ in guard let groupModel = self.viewModel.groupModel else { return } let groupViewFrame = self.view.convert(self.rootView.groupView.frame, from: self.rootView) @@ -93,6 +152,17 @@ class HomeViewController: BaseViewController { .subscribe { [weak self] notification in self?.requestGroupInfo() }.disposed(by: disposeBag) + + // 面板关闭回调 + rootView.onDismissPanel = { [weak self] in + self?.isMemberPanelShown = false + (self?.tabBarController as? MainTabBarController)?.setTabBarHidden(false) + } + + // MQTT 接收 + MQTTService.shared.onMessageReceived = { message, id, properties in + print("收到消息: \(message.string ?? "")") + } } private func bindViewModel() { @@ -100,9 +170,20 @@ class HomeViewController: BaseViewController { .bind(to: tableView.rx.items(dataSource: dataSource)) .disposed(by: disposeBag) - tableView.rx.modelSelected(GroupMemberModel.self) + let selectedMember = tableView.rx.modelSelected(GroupMemberModel.self) + .share() + + selectedMember .subscribe(viewModel.cellAction.inputs) .disposed(by: disposeBag) + + // 选中成员 → 地图定位 + selectedMember + .subscribe(onNext: { [weak self] model in + guard let self = self else { return } + self.locateMember(userId: model.user_id) + }) + .disposed(by: disposeBag) } // MARK: - UITableViewDataSource @@ -161,6 +242,7 @@ class HomeViewController: BaseViewController { self.rootView.groupMemberView.setupCountData(self.viewModel.memberCount, self.viewModel.memberOnlineCount) self.rootView.groupNameLab.text = self.viewModel.groupName self.syncMemberAnnotations(model.select_group_employee) + self.refreshMQTTSubscriptions(model.select_group_employee) }.disposed(by: disposeBag) } @@ -175,6 +257,11 @@ class HomeViewController: BaseViewController { #if !targetEnvironment(simulator) rootView.mapView.delegate = self + // 地图点击选择标注 + let mapTap = UITapGestureRecognizer(target: self, action: #selector(handleMapTap(_:))) + mapTap.cancelsTouchesInView = false + rootView.mapView.addGestureRecognizer(mapTap) + let r = MAUserLocationRepresentation() r.showsAccuracyRing = false r.showsHeadingIndicator = false @@ -188,6 +275,23 @@ class HomeViewController: BaseViewController { #endif } + @objc private func handleMapTap(_ tap: UITapGestureRecognizer) { + let point = tap.location(in: rootView.mapView) + // 用 mapView 的坐标转屏幕坐标判断命中 + for ann in rootView.mapView.annotations?.compactMap({ $0 as? MemberAnnotation }) ?? [] { + guard !ann.member.isCurrentUser else { continue } + let pt = rootView.mapView.convert(ann.coordinate, toPointTo: rootView.mapView) + // 30pt 命中半径 + let hitRect = CGRect(x: pt.x - 30, y: pt.y - 30, width: 60, height: 60) + if hitRect.contains(point) { + self.isMemberPanelShown = true + (self.tabBarController as? MainTabBarController)?.setTabBarHidden(true) + rootView.showMemberPanel(member: ann.member) + break + } + } + } + private func transparentImage() -> UIImage { UIGraphicsBeginImageContextWithOptions(CGSize(width: 1, height: 1), false, 0) let img = UIGraphicsGetImageFromCurrentImageContext() ?? UIImage() @@ -227,7 +331,8 @@ class HomeViewController: BaseViewController { coordinate: kCLLocationCoordinate2DInvalid, address: "", heading: 0, - lastUpdateText: "在线" + lastUpdateText: "在线", + battery: "" ) // 其他成员从 select_group_employee 取,过滤掉当前用户 @@ -255,6 +360,105 @@ class HomeViewController: BaseViewController { mapView.addAnnotations(annotations) #endif } + + #if !targetEnvironment(simulator) + /// 选中成员后地图定位到该成员,收起 GroupMemberView + private func locateMember(userId: String) { + rootView.dismissGroupMemberView() + guard let member = members.first(where: { $0.id == userId }), + CLLocationCoordinate2DIsValid(member.coordinate) else { return } + rootView.mapView.setCenter(member.coordinate, animated: true) + rootView.mapView.setZoomLevel(16, animated: true) + } + + #endif +} + +// MARK: - MQTT +extension HomeViewController { + /// 切换圈子时刷新 MQTT 订阅(排除当前用户) + private func refreshMQTTSubscriptions(_ members: [GroupMemberModel]) { + let currentId = AppContextManager.shared.userId + let newIds = members.map { $0.user_id }.filter { $0 != currentId } + let toUnsub = subscribedMemberIds.filter { !newIds.contains($0) } + MQTTService.shared.unsubscribeGroupMembers(toUnsub) + let toSub = newIds.filter { !subscribedMemberIds.contains($0) } + for memberId in toSub { + let topic = "smartdrive/\(memberId)" + MQTTService.shared.subscribe(topic: topic) { [weak self] message in + + self?.handleMemberLocation(topic: message.topic, payload: message.string) + } + } + subscribedMemberIds = newIds + } + + /// 处理成员位置更新(从 topic 提取 userId,更新地图标注) + private func handleMemberLocation(topic: String, payload: String?) { + guard let payload = payload, + let data = payload.data(using: .utf8), + let msg = try? JSONDecoder().decode(MqttIncomingMessage.self, from: data), + let firstPoint = msg.data?.points?.first + else { return } + print("📩 收到消息 -> 主题:\(topic),内容:\(msg)") + let userId = topic.replacingOccurrences(of: "smartdrive/", with: "") + let coord = CLLocationCoordinate2D(latitude: firstPoint.lat, longitude: firstPoint.lon) + guard CLLocationCoordinate2DIsValid(coord) else { return } + + // 根据 time 字段判断在线状态(毫秒时间戳) + let nowMs = Date().timeIntervalSince1970 * 1000 + let msgTimeMs = Double(firstPoint.time) + let diffSec = (nowMs - msgTimeMs) / 1000 + let isOnline = diffSec < 60 + let lastUpdateText: String + if isOnline { + lastUpdateText = "" + } else if diffSec < 3600 { + lastUpdateText = "\(Int(diffSec / 60))分钟前" + } else if diffSec < 86400 { + lastUpdateText = "\(Int(diffSec / 3600))小时前" + } else { + lastUpdateText = "\(Int(diffSec / 86400))天前" + } + + let battery = msg.data?.battery ?? "" + DispatchQueue.main.async { [weak self] in + guard let self = self else { return } + // 更新列表(地址、电量、在线状态) + self.viewModel.updateMemberLocation( + userId: userId, lat: firstPoint.lat, lon: firstPoint.lon, + address: firstPoint.addr, battery: battery, + isOnline: isOnline, lastUpdateText: lastUpdateText + ) + // 更新地图标注位置 + self.updateAnnotation(userId: userId, coordinate: coord, address: firstPoint.addr) + } + } + + /// 更新指定成员的标注位置(只更新坐标,头像/名称不变) + private func updateAnnotation(userId: String, coordinate: CLLocationCoordinate2D, address: String) { + #if !targetEnvironment(simulator) + // 更新 members 数组 + if let idx = members.firstIndex(where: { $0.id == userId }) { + let old = members[idx] + members[idx] = CircleMember( + id: old.id, name: old.name, avatar: old.avatar, + isOnline: true, isOwner: old.isOwner, + coordinate: coordinate, address: address, + heading: old.heading, lastUpdateText: "在线", + battery: old.battery + ) + } + // 更新地图标注坐标 + let mapView = rootView.mapView + for ann in mapView.annotations?.compactMap({ $0 as? MemberAnnotation }) ?? [] { + if ann.member.id == userId { + ann.coordinate = coordinate + break + } + } + #endif + } } #if !targetEnvironment(simulator) @@ -278,6 +482,8 @@ extension HomeViewController: MAMapViewDelegate { annotationView?.configure(with: memberAnnotation.member) + + if memberAnnotation.member.isCurrentUser { currentUserAnnotation = memberAnnotation annotationView?.updateHeading(currentHeading) @@ -288,6 +494,7 @@ extension HomeViewController: MAMapViewDelegate { func mapView(_ mapView: MAMapView!, didUpdate userLocation: MAUserLocation!, updatingLocation: Bool) { guard updatingLocation, let location = userLocation.location else { return } + lastLocation = location let coordinate = location.coordinate guard CLLocationCoordinate2DIsValid(coordinate) else { return } @@ -295,13 +502,30 @@ extension HomeViewController: MAMapViewDelegate { ann.coordinate = coordinate } - mapView.setCenter(coordinate, animated: true) - mapView.setUserTrackingMode(.follow, animated: true) + if !isMemberPanelShown { + mapView.setCenter(coordinate, animated: true) + mapView.setUserTrackingMode(.follow, animated: true) + } } func mapViewRequireLocationAuth(_ locationManager: CLLocationManager!) { locationManager.requestAlwaysAuthorization() } + + func mapView(_ mapView: MAMapView!, didSelect view: MAAnnotationView!) { + guard let annotationView = view as? MemberAnnotationView, + let annotation = annotationView.annotation as? MemberAnnotation, + !annotation.member.isCurrentUser else { return } + // 弹出底部面板 + rootView.showMemberPanel(member: annotation.member) + } + + func mapView(_ mapView: MAMapView!, didDeselect view: MAAnnotationView!) { + guard let annotationView = view as? MemberAnnotationView, + let annotation = annotationView.annotation as? MemberAnnotation, + !annotation.member.isCurrentUser else { return } + rootView.dismissMemberPanel() + } } #endif diff --git a/QuickLocation/Section/Home/HomeViewModel.swift b/QuickLocation/Section/Home/HomeViewModel.swift index 0355e86..6dcd9fd 100644 --- a/QuickLocation/Section/Home/HomeViewModel.swift +++ b/QuickLocation/Section/Home/HomeViewModel.swift @@ -32,7 +32,7 @@ class HomeViewModel { var groupModel: GroupModel? { didSet { guard let model = groupModel else { return } - loadGroupMemberList(model.select_group_employee) + self.memberList = model.select_group_employee } } @@ -80,14 +80,39 @@ class HomeViewModel { return model.default_group_key.contains(id) } - func loadGroupMemberList(_ list: [GroupMemberModel]) { - // 调整圈子成为位置 圈主 -> 本人 -> 成员 - var tempList = list - tempList.moveToFirst { $0.user_id == AppContextManager.shared.userId } - tempList.moveToFirst { isGroupOwn(id: $0.user_id) } - sectionedItems.onNext(tempList.mapSection()) + var memberList: [GroupMemberModel] = [] { + didSet { + var tempList = memberList + + // 当前用户的电量 +// if var model = memberList.first(where: { $0.user_id == AppContextManager.shared.userId }), +// let idx = memberList.firstIndex(where: { $0.user_id == AppContextManager.shared.userId }) { +// let battery = UIDevice.current.batteryLevel > 0 +// ? Int(UIDevice.current.batteryLevel * 100) +// : 0 +// model.battery = battery.string +// model.is_online = true +// tempList[idx] = model +// } + + tempList.moveToFirst { $0.user_id == AppContextManager.shared.userId } + tempList.moveToFirst { isGroupOwn(id: $0.user_id) } + memberList = tempList + sectionedItems.onNext(memberList.mapSection()) + } } + /// MQTT 位置更新后刷新成员的地址、电量、在线状态 + func updateMemberLocation(userId: String, lat: Double, lon: Double, address: String, battery: String, isOnline: Bool, lastUpdateText: String) { + guard let idx = memberList.firstIndex(where: { $0.user_id == userId }) else { return } + var updated = memberList + updated[idx].last_position = "\(lat):\(lon):\(address)" + updated[idx].battery = battery + updated[idx].is_online = isOnline + updated[idx].lastUpdateText = lastUpdateText + memberList = updated // 触发 didSet → 排序 + 重发 sectionedItems + } + // MARK: - Init init() { output = Output( diff --git a/QuickLocation/Section/Home/InteractionView.swift b/QuickLocation/Section/Home/InteractionView.swift new file mode 100644 index 0000000..9b63523 --- /dev/null +++ b/QuickLocation/Section/Home/InteractionView.swift @@ -0,0 +1,214 @@ +// +// InteractionView.swift +// QuickLocation +// +// Created by 八条 on 2026/6/15. +// + +import UIKit + +class InteractionView: UIView { + + func configure(member: CircleMember) { + avaterImgView.image = UIImage(named: "UserIcon/\(member.avatar)") + nameLab.text = member.name + locationLab.text = member.address + // 电量 + let batteryInt = Int(member.battery) ?? 0 + let batteryPercent = min(CGFloat(batteryInt), 100) + batteryView.layoutChain.width(CGFloat(16 - 1) * batteryPercent / 100.0) + batteryLab.text = "\(member.battery)%" + } + + private func setupRx() { + + } + + private func setupUI() { + addSubview(infoView) + infoView.addSubview(headerBgView) + infoView.addSubview(lineView) + infoView.addSubview(avaterImgView) + infoView.addSubview(batteryInfoView) + batteryInfoView.addSubview(cornerView) + cornerView.addSubview(batteryView) + cornerView.addSubview(batteryIcon) + cornerView.addSubview(batteryLab) + infoView.addSubview(nameLab) + infoView.addSubview(locationLab) + infoView.addSubview(navigateBtn) + infoView.addSubview(shareBtn) + + infoView.layoutChain.edges() + + headerBgView.layoutChain + .edges(excludingEdge: .bottom) + .height(134) + + lineView.layoutChain + .top(13) + .width(36) + .height(4) + .centerX() + + avaterImgView.layoutChain + .top(25) + .left(25) + .width(50) + .height(50) + + batteryInfoView.layoutChain + .leftToView(avaterImgView) + .rightToView(avaterImgView) + .bottomToView(avaterImgView) + .height(12) + + cornerView.layoutChain.edges() + + batteryIcon.layoutChain + .left(7) + .centerY() + .width(16) + .height(8) + + batteryView.layoutChain + .topToView(batteryIcon) + .leftToView(batteryIcon, offset: -1) + .bottomToView(batteryIcon) + + batteryLab.layoutChain + .leftToRightOfView(batteryIcon, offset: 4) + .right(5) + .centerY() + + nameLab.layoutChain + .topToView(avaterImgView, offset: 8) + .leftToRightOfView(avaterImgView, offset: 15) + + locationLab.layoutChain + .topToBottomOfView(nameLab) + .leftToView(nameLab) + + shareBtn.layoutChain + .right(15) + .centerY(avaterImgView) + .width(30) + .height(30) + + navigateBtn.layoutChain + .rightToLeftOfView(shareBtn, offset: -10) + .centerY(avaterImgView) + .width(30) + .height(30) + } + + lazy var infoView: UIView = { + let view = UIView() + view.backgroundColor = .white + return view + }() + + lazy var headerBgView: UIImageView = { + let view = UIImageView(image: UIImage(named: "Home/interaction_header")) + return view + }() + + lazy var lineView: UIView = { + let view = UIView() + view.backgroundColor = .white + view.cornerRadius = 2 + return view + }() + + lazy var avaterImgView: UIImageView = { + let view = UIImageView() + view.backgroundColor = .lightGray + view.contentMode = .scaleAspectFill + view.cornerRadius = 25 + return view + }() + + lazy var batteryInfoView: UIView = { + let view = UIView() + view.backgroundColor = .clear + view.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.1).cgColor + view.layer.shadowOffset = CGSize(width: 0, height: 2) + view.layer.shadowOpacity = 1 + view.layer.shadowRadius = 6 + return view + }() + + lazy var cornerView: UIView = { + let view = UIView() + view.backgroundColor = .white + view.cornerRadius = 6 + return view + }() + + lazy var batteryView: UIView = { + let view = UIView() + view.backgroundColor = UIColor(hexStr: "#75E582") + return view + }() + + lazy var batteryIcon: UIImageView = { + let view = UIImageView() + view.backgroundColor = .clear + view.image = UIImage(named: "Home/battery") + return view + }() + + lazy var batteryLab: UILabel = { + let label = UILabel() + label.textColor = UIColor(hexStr: "#D4D4D4") + label.font = .systemFont(ofSize: 6, weight: .medium) + return label + }() + + lazy var nameLab: UILabel = { + let label = UILabel() + label.textColor = UIColor(hexStr: "#0F2846") + label.font = .systemFont(ofSize: 14, weight: .semibold) + return label + }() + + lazy var locationLab: UILabel = { + let label = UILabel() + label.textColor = UIColor(hexStr: "#8D8D8D") + label.font = .systemFont(ofSize: 10, weight: .regular) + return label + }() + + lazy var navigateBtn: UIButton = { + let btn = UIButton(type: .custom) + btn.setImage(UIImage(named: "Home/navigate"), for: .normal) + btn.cornerRadius = 15 + btn.extendEdgeInsets = UIEdgeInsets(top: 30, left: 30, bottom: 30, right: 0) + return btn + }() + + lazy var shareBtn: UIButton = { + let btn = UIButton(type: .custom) + btn.setImage(UIImage(named: "Home/share"), for: .normal) + btn.cornerRadius = 15 + btn.extendEdgeInsets = UIEdgeInsets(top: 30, left: 0, bottom: 30, right: 15) + return btn + }() + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = .clear + setupUI() + setupRx() + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func layoutSubviews() { + super.layoutSubviews() + infoView.layoutIfNeeded() + infoView.setCornerRadius(corners: [.topLeft ,.topRight], withCornerRadii: CGSize(width: 20, height: 20)) + } +} diff --git a/QuickLocation/Section/Home/QuickMessageView.swift b/QuickLocation/Section/Home/QuickMessageView.swift new file mode 100644 index 0000000..5a23c5b --- /dev/null +++ b/QuickLocation/Section/Home/QuickMessageView.swift @@ -0,0 +1,96 @@ +// +// QuickMessageView.swift +// QuickLocation +// +// Created by 八条 on 2026/6/15. +// + +import UIKit +import TagListView + +class QuickMessageView: UIView { + + private let list: [String] = [ + "爱你哦!", "预计到达时间?", "发生什么情况?", "注意安全", "在路上", "给我打电话", + ] + + func setupTagData(list: [String]) { + tagListView.removeAllTags() + for text in list { + let tag = TTGTextTag.init() + + let content = TTGTextTagStringContent.init(text: text) + content.textColor = ThemeManager.shared.color.titleAuxColor + content.textFont = UIFont.systemFont(ofSize: 12, weight: .medium) + + let normalStyle = TTGTextTagStyle.init() + normalStyle.backgroundColor = .white + normalStyle.extraSpace = CGSize.init(width: 15, height: 15) + normalStyle.shadowColor = UIColor(hexStr: "#333333", alpha: 0.25) + normalStyle.borderColor = .clear + normalStyle.cornerRadius = 8 + + tag.content = content + tag.style = normalStyle + + tagListView.addTag(tag) + } + tagListView.reload() + tagListView.setNeedsLayout() + tagListView.layoutIfNeeded() + } + + private func setupRx() { + + } + + private func setupUI() { + addSubview(closeBtn) + addSubview(tagListView) + + closeBtn.layoutChain + .top() + .left(23) + .width(40) + .height(40) + + tagListView.layoutChain + .topToBottomOfView(closeBtn, offset: 15) + .edgesHorzontal(15) + .height(38) + } + + lazy var closeBtn: UIButton = { + let btn = UIButton(type: .custom) + btn.setImage(UIImage(named: "Common/x"), for: .normal) + btn.setBackgroundColor(.black.withAlphaComponent(0.5), for: .normal) + btn.cornerRadius = 20 + btn.extendEdgeInsets = UIEdgeInsets(top: 50, left: 23, bottom: 0, right: 30) + return btn + }() + + lazy var tagListView: TTGTextTagCollectionView = { + let tagsView = TTGTextTagCollectionView.init(frame: .zero) + tagsView.scrollView.scrollsToTop = false + tagsView.scrollView.bounces = false + tagsView.showsVerticalScrollIndicator = false + tagsView.showsHorizontalScrollIndicator = false + tagsView.scrollDirection = .horizontal + tagsView.numberOfLines = 1 + tagsView.horizontalSpacing = 10 + return tagsView + }() + + override init(frame: CGRect) { + super.init(frame: frame) + backgroundColor = .clear + setupUI() + setupRx() + setupTagData(list: list) + } + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + +} diff --git a/QuickLocation/Section/Launch/LaunchViewController.swift b/QuickLocation/Section/Launch/LaunchViewController.swift index a322ef5..78b3908 100644 --- a/QuickLocation/Section/Launch/LaunchViewController.swift +++ b/QuickLocation/Section/Launch/LaunchViewController.swift @@ -69,6 +69,7 @@ class LaunchViewController: BaseViewController { func getUserConfig() { SystemService.userConfig().subscribe(onNext: { response in guard let model = response.model else { return } + MQTTService.shared.connect() Defaults[\.loginToken] = model.token AppContextManager.shared.systemConfig = model.config self.getUserIMToken() diff --git a/QuickLocation/Section/Map/CircleMember.swift b/QuickLocation/Section/Map/CircleMember.swift index 454d3b3..3e50b51 100644 --- a/QuickLocation/Section/Map/CircleMember.swift +++ b/QuickLocation/Section/Map/CircleMember.swift @@ -16,6 +16,7 @@ struct CircleMember { let address: String let heading: Double let lastUpdateText: String + let battery: String var isCurrentUser: Bool { id == "current" } } @@ -33,6 +34,7 @@ extension CircleMember { address = addr heading = 0 lastUpdateText = member.is_online ? "在线" : "离线" + battery = member.battery } /// 解析 last_position:格式 "lat:lng:address" diff --git a/QuickLocation/Section/Map/MemberAnnotationView.swift b/QuickLocation/Section/Map/MemberAnnotationView.swift index 042528e..f39d57b 100644 --- a/QuickLocation/Section/Map/MemberAnnotationView.swift +++ b/QuickLocation/Section/Map/MemberAnnotationView.swift @@ -9,6 +9,9 @@ import MAMapKit final class MemberAnnotationView: MAAnnotationView { + /// 标注被点击的回调 + var onTap: ((MemberAnnotation) -> Void)? + // MARK: - Design Constants static let avatarOuterSize: CGFloat = 50 static let avatarInnerSize: CGFloat = 48 @@ -96,10 +99,18 @@ final class MemberAnnotationView: MAAnnotationView { // MARK: - Configure func configure(with member: CircleMember) { + self.isEnabled = true avatarImageView.image = UIImage(named: "UserIcon/\(member.avatar)") avatarImageView.backgroundColor = member.avatar.isEmpty ? .lightGray : .clear nameLabel.text = member.name isCurrentUser = member.isCurrentUser + canShowCallout = false + + // 非当前用户标注可点击弹出面板 + if !member.isCurrentUser && gestureRecognizers?.isEmpty ?? true { + let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap)) + addGestureRecognizer(tap) + } if member.isCurrentUser { configureAsCurrentUser(heading: member.heading) @@ -108,22 +119,29 @@ final class MemberAnnotationView: MAAnnotationView { } } + @objc private func handleTap() { + guard let ann = annotation as? MemberAnnotation else { return } + onTap?(ann) + } + private func configureAsCurrentUser(heading: Double) { nameTagView.isHidden = true stopPulseAnimation() - let size = Self.radarSize + let outer = Self.avatarOuterSize + let padding: CGFloat = 30 + let size = outer + padding * 2 bounds = CGRect(x: 0, y: 0, width: size, height: size) centerOffset = .zero containerView.frame = bounds - let avatarX = (size - Self.avatarOuterSize) / 2 - let avatarY = (size - Self.avatarOuterSize) / 2 + let avatarX = (size - outer) / 2 + let avatarY = (size - outer) / 2 avatarOuterCircle.frame = CGRect(x: avatarX, y: avatarY, - width: Self.avatarOuterSize, height: Self.avatarOuterSize) + width: outer, height: outer) avatarImageView.frame = CGRect( - x: (Self.avatarOuterSize - Self.avatarInnerSize) / 2, - y: (Self.avatarOuterSize - Self.avatarInnerSize) / 2, + x: (outer - Self.avatarInnerSize) / 2, + y: (outer - Self.avatarInnerSize) / 2, width: Self.avatarInnerSize, height: Self.avatarInnerSize ) diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView-Bridging-Header.h b/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView-Bridging-Header.h new file mode 100644 index 0000000..df1ee9e --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView-Bridging-Header.h @@ -0,0 +1,19 @@ +// +// TTGTagCollectionView-Bridging-Header.h +// TTGTagCollectionView +// +// Created by zekunyan on 2021/4/21. +// + +#ifndef TTGTagCollectionView_Bridging_Header_h +#define TTGTagCollectionView_Bridging_Header_h + +#import "TTGTagCollectionView.h" +#import "TTGTextTagCollectionView.h" +#import "TTGTextTag.h" +#import "TTGTextTagContent.h" +#import "TTGTextTagStringContent.h" +#import "TTGTextTagAttributedStringContent.h" +#import "TTGTextTagStyle.h" + +#endif /* TTGTagCollectionView_Bridging_Header_h */ diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView.h b/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView.h new file mode 100644 index 0000000..41ef2f2 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView.h @@ -0,0 +1,112 @@ +// +// TTGTagCollectionView.h +// Pods +// +// Created by zekunyan on 15/12/26. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import + +@class TTGTagCollectionView; + +/** + * Tags scroll direction + */ +typedef NS_ENUM(NSInteger, TTGTagCollectionScrollDirection) { + TTGTagCollectionScrollDirectionVertical = 0, // Default + TTGTagCollectionScrollDirectionHorizontal = 1 +}; + +/** + * Tags alignment + */ +typedef NS_ENUM(NSInteger, TTGTagCollectionAlignment) { + TTGTagCollectionAlignmentLeft = 0, // Default + TTGTagCollectionAlignmentCenter, // Center + TTGTagCollectionAlignmentRight, // Right + TTGTagCollectionAlignmentFillByExpandingSpace, // Expand horizontal spacing and fill + TTGTagCollectionAlignmentFillByExpandingWidth, // Expand width and fill + TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine // Expand width and fill, except last line +}; + +/** + * Tags delegate + */ +@protocol TTGTagCollectionViewDelegate +@required +- (CGSize)tagCollectionView:(TTGTagCollectionView *)tagCollectionView sizeForTagAtIndex:(NSUInteger)index; + +@optional +- (BOOL)tagCollectionView:(TTGTagCollectionView *)tagCollectionView shouldSelectTag:(UIView *)tagView atIndex:(NSUInteger)index; + +- (void)tagCollectionView:(TTGTagCollectionView *)tagCollectionView didSelectTag:(UIView *)tagView atIndex:(NSUInteger)index; + +- (void)tagCollectionView:(TTGTagCollectionView *)tagCollectionView updateContentSize:(CGSize)contentSize; +@end + +/** + * Tags dataSource + */ +@protocol TTGTagCollectionViewDataSource +@required +- (NSUInteger)numberOfTagsInTagCollectionView:(TTGTagCollectionView *)tagCollectionView; + +- (UIView *)tagCollectionView:(TTGTagCollectionView *)tagCollectionView tagViewForIndex:(NSUInteger)index; +@end + +@interface TTGTagCollectionView : UIView +@property (nonatomic, weak) id dataSource; +@property (nonatomic, weak) id delegate; + +// Inside scrollView +@property (nonatomic, strong, readonly) UIScrollView *scrollView; + +// Tags scroll direction, default is vertical. +@property (nonatomic, assign) TTGTagCollectionScrollDirection scrollDirection; + +// Tags layout alignment, default is left. +@property (nonatomic, assign) TTGTagCollectionAlignment alignment; + +// Number of lines. 0 means no limit, default is 0 for vertical and 1 for horizontal. +@property (nonatomic, assign) NSUInteger numberOfLines; +// The real number of lines ignoring the numberOfLines value +@property (nonatomic, assign, readonly) NSUInteger actualNumberOfLines; + +// Horizontal and vertical space between tags, default is 4. +@property (nonatomic, assign) CGFloat horizontalSpacing; +@property (nonatomic, assign) CGFloat verticalSpacing; + +// Content inset, default is UIEdgeInsetsMake(2, 2, 2, 2). +@property (nonatomic, assign) UIEdgeInsets contentInset; + +// The true tags content size, readonly +@property (nonatomic, assign, readonly) CGSize contentSize; + +// Manual content height +// Default = NO, set will update content +@property (nonatomic, assign) BOOL manualCalculateHeight; +// Default = 0, set will update content +@property (nonatomic, assign) CGFloat preferredMaxLayoutWidth; + +// Scroll indicator +@property (nonatomic, assign) BOOL showsHorizontalScrollIndicator; +@property (nonatomic, assign) BOOL showsVerticalScrollIndicator; + +// Tap blank area callback +@property (nonatomic, copy) void (^onTapBlankArea)(CGPoint location); +// Tap all area callback +@property (nonatomic, copy) void (^onTapAllArea)(CGPoint location); + +/** + * Reload all tag cells + */ +- (void)reload; + +/** + * Returns the index of the tag located at the specified point. + * If item at point is not found, returns NSNotFound. + */ +- (NSInteger)indexOfTagAt:(CGPoint)point; + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView.m b/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView.m new file mode 100644 index 0000000..fd9c6a8 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTagCollectionView.m @@ -0,0 +1,490 @@ +// +// TTGTagCollectionView.m +// Pods +// +// Created by zekunyan on 15/12/26. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTagCollectionView.h" + +@interface TTGTagCollectionView () +@property (nonatomic, strong) UIScrollView *scrollView; +@property (nonatomic, strong) UIView *containerView; +@property (nonatomic, assign) BOOL needsLayoutTagViews; +@property (nonatomic, assign) NSUInteger actualNumberOfLines; +@end + +@implementation TTGTagCollectionView + +#pragma mark - Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self commonInit]; + } + + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + self = [super initWithCoder:coder]; + if (self) { + [self commonInit]; + } + + return self; +} + +- (void)commonInit { + if (_scrollView) { + return; + } + + _horizontalSpacing = 4; + _verticalSpacing = 4; + _contentInset = UIEdgeInsetsMake(2, 2, 2, 2); + + _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds]; + _scrollView.backgroundColor = [UIColor clearColor]; + _scrollView.userInteractionEnabled = YES; + [self addSubview:_scrollView]; + + _containerView = [[UIView alloc] initWithFrame:_scrollView.bounds]; + _containerView.backgroundColor = [UIColor clearColor]; + _containerView.userInteractionEnabled = YES; + [_scrollView addSubview:_containerView]; + + UITapGestureRecognizer *tapGesture = [UITapGestureRecognizer new]; + [tapGesture addTarget:self action:@selector(onTapGesture:)]; + [_containerView addGestureRecognizer:tapGesture]; + + [self setNeedsLayoutTagViews]; +} + +#pragma mark - Public methods + +- (void)reload { + if (![self isDelegateAndDataSourceValid]) { + return; + } + + // Remove all tag views + [_containerView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + + // Add tag view + for (NSUInteger i = 0; i < [_dataSource numberOfTagsInTagCollectionView:self]; i++) { + [_containerView addSubview:[_dataSource tagCollectionView:self tagViewForIndex:i]]; + } + + // Update tag view frame + [self setNeedsLayoutTagViews]; + [self layoutTagViews]; +} + +- (NSInteger)indexOfTagAt:(CGPoint)point { + // We expect the point to be a point wrt to the TTGTagCollectionView. + // so convert this point first to a point wrt to the container view. + CGPoint convertedPoint = [self convertPoint:point toView:_containerView]; + for (NSUInteger i = 0; i < [self.dataSource numberOfTagsInTagCollectionView:self]; i++) { + UIView *tagView = [self.dataSource tagCollectionView:self tagViewForIndex:i]; + if (CGRectContainsPoint(tagView.frame, convertedPoint) && !tagView.isHidden) { + return i; + } + } + return NSNotFound; +} + +#pragma mark - Gesture + +- (void)onTapGesture:(UITapGestureRecognizer *)tapGesture { + CGPoint tapPointInCollectionView = [tapGesture locationInView:self]; + + if (![self.dataSource respondsToSelector:@selector(numberOfTagsInTagCollectionView:)] || + ![self.dataSource respondsToSelector:@selector(tagCollectionView:tagViewForIndex:)] || + ![self.delegate respondsToSelector:@selector(tagCollectionView:didSelectTag:atIndex:)]) { + if (_onTapBlankArea) { + _onTapBlankArea(tapPointInCollectionView); + } + if (_onTapAllArea) { + _onTapAllArea(tapPointInCollectionView); + } + return; + } + + CGPoint tapPointInScrollView = [tapGesture locationInView:_containerView]; + BOOL hasLocatedToTag = NO; + + for (NSUInteger i = 0; i < [self.dataSource numberOfTagsInTagCollectionView:self]; i++) { + UIView *tagView = [self.dataSource tagCollectionView:self tagViewForIndex:i]; + if (CGRectContainsPoint(tagView.frame, tapPointInScrollView) && !tagView.isHidden) { + hasLocatedToTag = YES; + if ([self.delegate respondsToSelector:@selector(tagCollectionView:shouldSelectTag:atIndex:)]) { + if ([self.delegate tagCollectionView:self shouldSelectTag:tagView atIndex:i]) { + [self.delegate tagCollectionView:self didSelectTag:tagView atIndex:i]; + } + } else { + [self.delegate tagCollectionView:self didSelectTag:tagView atIndex:i]; + } + } + } + + if (!hasLocatedToTag) { + if (_onTapBlankArea) { + _onTapBlankArea(tapPointInCollectionView); + } + } + if (_onTapAllArea) { + _onTapAllArea(tapPointInCollectionView); + } +} + +#pragma mark - Override + +- (void)layoutSubviews { + [super layoutSubviews]; + + if (!CGRectEqualToRect(_scrollView.frame, self.bounds)) { + _scrollView.frame = self.bounds; + [self setNeedsLayoutTagViews]; + [self layoutTagViews]; + _containerView.frame = (CGRect){CGPointZero, _scrollView.contentSize}; + } + [self layoutTagViews]; +} + +- (CGSize)intrinsicContentSize { + return _scrollView.contentSize; +} + +- (CGSize)sizeThatFits:(CGSize)size { + return self.contentSize; +} + +#pragma mark - Layout + +- (void)layoutTagViews { + if (!_needsLayoutTagViews || ![self isDelegateAndDataSourceValid]) { + return; + } + + if (_scrollDirection == TTGTagCollectionScrollDirectionVertical) { + [self layoutTagViewsForVerticalDirection]; + } else { + [self layoutTagViewsForHorizontalDirection]; + } + + _needsLayoutTagViews = NO; + [self invalidateIntrinsicContentSize]; +} + +- (void)layoutTagViewsForVerticalDirection { + NSUInteger count = [_dataSource numberOfTagsInTagCollectionView:self]; + NSUInteger currentLineTagsCount = 0; + CGFloat totalWidth = (_manualCalculateHeight && _preferredMaxLayoutWidth > 0) ? _preferredMaxLayoutWidth : CGRectGetWidth(self.bounds); + CGFloat maxLineWidth = totalWidth - _contentInset.left - _contentInset.right; + CGFloat currentLineX = 0; + CGFloat currentLineMaxHeight = 0; + + NSMutableArray *eachLineMaxHeightNumbers = [NSMutableArray new]; + NSMutableArray *eachLineWidthNumbers = [NSMutableArray new]; + NSMutableArray *eachLineTagCountNumbers = [NSMutableArray new]; + + NSMutableArray *> *eachLineTagIndexs = [NSMutableArray new]; + NSMutableArray *tmpTagIndexNumbers = [NSMutableArray new]; + + // Get each line max height ,width and tag count + for (NSUInteger i = 0; i < count; i++) { + CGSize tagSize = [_delegate tagCollectionView:self sizeForTagAtIndex:i]; + + if (currentLineX + tagSize.width > maxLineWidth && tmpTagIndexNumbers.count > 0) { + // New Line + [eachLineMaxHeightNumbers addObject:@(currentLineMaxHeight)]; + [eachLineWidthNumbers addObject:@(currentLineX - _horizontalSpacing)]; + [eachLineTagCountNumbers addObject:@(currentLineTagsCount)]; + [eachLineTagIndexs addObject:tmpTagIndexNumbers]; + tmpTagIndexNumbers = [NSMutableArray new]; + currentLineTagsCount = 0; + currentLineMaxHeight = 0; + currentLineX = 0; + } + + // Line limit + if (_numberOfLines != 0) { + UIView *tagView = [_dataSource tagCollectionView:self tagViewForIndex:i]; + tagView.hidden = eachLineWidthNumbers.count >= _numberOfLines; + } + + currentLineX += tagSize.width + _horizontalSpacing; + currentLineTagsCount += 1; + currentLineMaxHeight = MAX(tagSize.height, currentLineMaxHeight); + [tmpTagIndexNumbers addObject:@(i)]; + } + + // Add last + [eachLineMaxHeightNumbers addObject:@(currentLineMaxHeight)]; + [eachLineWidthNumbers addObject:@(currentLineX - _horizontalSpacing)]; + [eachLineTagCountNumbers addObject:@(currentLineTagsCount)]; + [eachLineTagIndexs addObject:tmpTagIndexNumbers]; + + // Actual number of lines + _actualNumberOfLines = eachLineTagCountNumbers.count; + + // Line limit + if (_numberOfLines != 0) { + eachLineMaxHeightNumbers = [[eachLineMaxHeightNumbers subarrayWithRange:NSMakeRange(0, MIN(eachLineMaxHeightNumbers.count, _numberOfLines))] mutableCopy]; + eachLineWidthNumbers = [[eachLineWidthNumbers subarrayWithRange:NSMakeRange(0, MIN(eachLineWidthNumbers.count, _numberOfLines))] mutableCopy]; + eachLineTagCountNumbers = [[eachLineTagCountNumbers subarrayWithRange:NSMakeRange(0, MIN(eachLineTagCountNumbers.count, _numberOfLines))] mutableCopy]; + eachLineTagIndexs = [[eachLineTagIndexs subarrayWithRange:NSMakeRange(0, MIN(eachLineTagIndexs.count, _numberOfLines))] mutableCopy]; + } + + // Prepare + [self layoutEachLineTagsWithMaxLineWidth:maxLineWidth + numberOfLines:eachLineTagCountNumbers.count + eachLineTagIndexs:eachLineTagIndexs + eachLineTagCount:eachLineTagCountNumbers + eachLineWidth:eachLineWidthNumbers + eachLineMaxHeight:eachLineMaxHeightNumbers]; +} + +- (void)layoutTagViewsForHorizontalDirection { + NSInteger count = [_dataSource numberOfTagsInTagCollectionView:self]; + _numberOfLines = _numberOfLines == 0 ? 1 : _numberOfLines; + + CGFloat maxLineWidth = 0; + + NSMutableArray *eachLineMaxHeightNumbers = [NSMutableArray new]; + NSMutableArray *eachLineWidthNumbers = [NSMutableArray new]; + NSMutableArray *eachLineTagCountNumbers = [NSMutableArray new]; + + NSMutableArray *> *eachLineTagIndexs = [NSMutableArray new]; + + // Init each line + for (NSInteger currentLine = 0; currentLine < _numberOfLines; currentLine++) { + [eachLineMaxHeightNumbers addObject:@0]; + [eachLineWidthNumbers addObject:@0]; + [eachLineTagCountNumbers addObject:@0]; + [eachLineTagIndexs addObject:[NSMutableArray new]]; + } + + // Add tags + for (NSUInteger tagIndex = 0; tagIndex < count; tagIndex++) { + NSUInteger currentLine = tagIndex % _numberOfLines; + + NSUInteger currentLineTagsCount = eachLineTagCountNumbers[currentLine].unsignedIntegerValue; + CGFloat currentLineMaxHeight = eachLineMaxHeightNumbers[currentLine].floatValue; + CGFloat currentLineX = eachLineWidthNumbers[currentLine].floatValue; + NSMutableArray *currentLineTagIndexNumbers = eachLineTagIndexs[currentLine]; + + CGSize tagSize = [_delegate tagCollectionView:self sizeForTagAtIndex:tagIndex]; + currentLineX += tagSize.width + _horizontalSpacing; + currentLineMaxHeight = MAX(tagSize.height, currentLineMaxHeight); + currentLineTagsCount += 1; + [currentLineTagIndexNumbers addObject:@(tagIndex)]; + + eachLineTagCountNumbers[currentLine] = @(currentLineTagsCount); + eachLineMaxHeightNumbers[currentLine] = @(currentLineMaxHeight); + eachLineWidthNumbers[currentLine] = @(currentLineX); + eachLineTagIndexs[currentLine] = currentLineTagIndexNumbers; + } + + // Remove extra space + for (NSInteger currentLine = 0; currentLine < _numberOfLines; currentLine++) { + CGFloat currentLineWidth = eachLineWidthNumbers[currentLine].floatValue; + currentLineWidth -= _horizontalSpacing; + eachLineWidthNumbers[currentLine] = @(currentLineWidth); + + maxLineWidth = MAX(currentLineWidth, maxLineWidth); + } + + // Prepare + [self layoutEachLineTagsWithMaxLineWidth:maxLineWidth + numberOfLines:eachLineTagCountNumbers.count + eachLineTagIndexs:eachLineTagIndexs + eachLineTagCount:eachLineTagCountNumbers + eachLineWidth:eachLineWidthNumbers + eachLineMaxHeight:eachLineMaxHeightNumbers]; +} + +- (void)layoutEachLineTagsWithMaxLineWidth:(CGFloat)maxLineWidth + numberOfLines:(NSUInteger)numberOfLines + eachLineTagIndexs:(NSArray *> *)eachLineTagIndexs + eachLineTagCount:(NSArray *)eachLineTagCount + eachLineWidth:(NSArray *)eachLineWidth + eachLineMaxHeight:(NSArray *)eachLineMaxHeight { + + CGFloat currentYBase = _contentInset.top; + + for (NSUInteger currentLine = 0; currentLine < numberOfLines; currentLine++) { + CGFloat currentLineMaxHeight = eachLineMaxHeight[currentLine].floatValue; + CGFloat currentLineWidth = eachLineWidth[currentLine].floatValue; + CGFloat currentLineTagsCount = eachLineTagCount[currentLine].unsignedIntegerValue; + + // Alignment x offset + CGFloat currentLineXOffset = 0; + CGFloat currentLineAdditionWidth = 0; + CGFloat acturalHorizontalSpacing = _horizontalSpacing; + __block CGFloat currentLineX = 0; + + switch (_alignment) { + case TTGTagCollectionAlignmentLeft: + currentLineXOffset = _contentInset.left; + break; + case TTGTagCollectionAlignmentCenter: + currentLineXOffset = (maxLineWidth - currentLineWidth) / 2 + _contentInset.left; + break; + case TTGTagCollectionAlignmentRight: + currentLineXOffset = maxLineWidth - currentLineWidth + _contentInset.left; + break; + case TTGTagCollectionAlignmentFillByExpandingSpace: + currentLineXOffset = _contentInset.left; + acturalHorizontalSpacing = _horizontalSpacing + + (maxLineWidth - currentLineWidth) / (CGFloat)(currentLineTagsCount - 1); + currentLineWidth = maxLineWidth; + break; + case TTGTagCollectionAlignmentFillByExpandingWidth: + case TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine: + currentLineXOffset = _contentInset.left; + currentLineAdditionWidth = (maxLineWidth - currentLineWidth) / (CGFloat)currentLineTagsCount; + currentLineWidth = maxLineWidth; + + if (_alignment == TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine && + currentLine == numberOfLines - 1 && + numberOfLines != 1) { + // Reset last line width for TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine + currentLineAdditionWidth = 0; + } + + break; + } + + // Current line + [eachLineTagIndexs[currentLine] enumerateObjectsUsingBlock:^(NSNumber * _Nonnull tagIndexNumber, NSUInteger idx, BOOL * _Nonnull stop) { + NSUInteger tagIndex = tagIndexNumber.unsignedIntegerValue; + + UIView *tagView = [self.dataSource tagCollectionView:self tagViewForIndex:tagIndex]; + CGSize tagSize = [self.delegate tagCollectionView:self sizeForTagAtIndex:tagIndex]; + + CGPoint origin; + origin.x = currentLineXOffset + currentLineX; + origin.y = currentYBase + (currentLineMaxHeight - tagSize.height) / 2; + + tagSize.width += currentLineAdditionWidth; + if (self.scrollDirection == TTGTagCollectionScrollDirectionVertical && tagSize.width > maxLineWidth) { + tagSize.width = maxLineWidth; + } + + tagView.hidden = NO; + tagView.frame = (CGRect){origin, tagSize}; + + currentLineX += tagSize.width + acturalHorizontalSpacing; + }]; + + // Next line + currentYBase += currentLineMaxHeight + _verticalSpacing; + } + + // Content size + maxLineWidth += _contentInset.right + _contentInset.left; + CGSize contentSize = CGSizeMake(maxLineWidth, currentYBase - _verticalSpacing + _contentInset.bottom); + if (!CGSizeEqualToSize(contentSize, _scrollView.contentSize)) { + _scrollView.contentSize = contentSize; + _containerView.frame = (CGRect){CGPointZero, contentSize}; + + if ([self.delegate respondsToSelector:@selector(tagCollectionView:updateContentSize:)]) { + [self.delegate tagCollectionView:self updateContentSize:contentSize]; + } + } +} + +- (void)setNeedsLayoutTagViews { + _needsLayoutTagViews = YES; +} + +#pragma mark - Check delegate and dataSource + +- (BOOL)isDelegateAndDataSourceValid { + BOOL isValid = _delegate != nil && _dataSource != nil; + isValid = isValid && [_delegate respondsToSelector:@selector(tagCollectionView:sizeForTagAtIndex:)]; + isValid = isValid && [_dataSource respondsToSelector:@selector(tagCollectionView:tagViewForIndex:)]; + isValid = isValid && [_dataSource respondsToSelector:@selector(numberOfTagsInTagCollectionView:)]; + return isValid; +} + +#pragma mark - Setter Getter + +- (UIScrollView *)scrollView { + return _scrollView; +} + +- (void)setScrollDirection:(TTGTagCollectionScrollDirection)scrollDirection { + _scrollDirection = scrollDirection; + [self setNeedsLayoutTagViews]; +} + +- (void)setAlignment:(TTGTagCollectionAlignment)alignment { + _alignment = alignment; + [self setNeedsLayoutTagViews]; +} + +- (void)setNumberOfLines:(NSUInteger)numberOfLines { + _numberOfLines = numberOfLines; + [self setNeedsLayoutTagViews]; +} + +- (NSUInteger)actualNumberOfLines { + if (_scrollDirection == TTGTagCollectionScrollDirectionHorizontal) { + return _numberOfLines; + } else { + return _actualNumberOfLines; + } +} + +- (void)setHorizontalSpacing:(CGFloat)horizontalSpacing { + _horizontalSpacing = horizontalSpacing; + [self setNeedsLayoutTagViews]; +} + +- (void)setVerticalSpacing:(CGFloat)verticalSpacing { + _verticalSpacing = verticalSpacing; + [self setNeedsLayoutTagViews]; +} + +- (void)setContentInset:(UIEdgeInsets)contentInset { + _contentInset = contentInset; + [self setNeedsLayoutTagViews]; +} + +- (CGSize)contentSize { + [self layoutTagViews]; + return _scrollView.contentSize; +} + +- (void)setManualCalculateHeight:(BOOL)manualCalculateHeight { + _manualCalculateHeight = manualCalculateHeight; + [self setNeedsLayoutTagViews]; +} + +- (void)setPreferredMaxLayoutWidth:(CGFloat)preferredMaxLayoutWidth { + _preferredMaxLayoutWidth = preferredMaxLayoutWidth; + [self setNeedsLayoutTagViews]; +} + +- (void)setShowsHorizontalScrollIndicator:(BOOL)showsHorizontalScrollIndicator { + _scrollView.showsHorizontalScrollIndicator = showsHorizontalScrollIndicator; +} + +- (BOOL)showsHorizontalScrollIndicator { + return _scrollView.showsHorizontalScrollIndicator; +} + +- (void)setShowsVerticalScrollIndicator:(BOOL)showsVerticalScrollIndicator { + _scrollView.showsVerticalScrollIndicator = showsVerticalScrollIndicator; +} + +- (BOOL)showsVerticalScrollIndicator { + return _scrollView.showsVerticalScrollIndicator; +} + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTag.h b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTag.h new file mode 100644 index 0000000..9f791f4 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTag.h @@ -0,0 +1,106 @@ +// +// TTGTextTag.h +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import +#import + +#import "TTGTextTagStyle.h" +#import "TTGTextTagContent.h" + +@interface TTGTextTag : NSObject + +/// ID +@property (nonatomic, assign, readonly) NSUInteger tagId; // Auto increase. The only identifier and main key for a tag + +/// Attachment object. You can use this to bind any object you want to each tag. +@property (nonatomic, strong) id _Nullable attachment; + +/// Normal state content and style +@property (nonatomic, copy) TTGTextTagContent * _Nonnull content; +@property (nonatomic, copy) TTGTextTagStyle * _Nonnull style; + +/// Selected state content and style +@property (nonatomic, copy) TTGTextTagContent * _Nullable selectedContent; +@property (nonatomic, copy) TTGTextTagStyle * _Nullable selectedStyle; + +/// Selection state +@property (nonatomic, assign) BOOL selected; + +/// Init + +/** + Init with single content and style + + @param content content for both normal and selection state. + @param style style for both normal and selection state. + @return instance + */ +- (instancetype _Nonnull)initWithContent:(TTGTextTagContent *_Nonnull)content + style:(TTGTextTagStyle *_Nonnull)style; + +/** + Init with different content and style + + @param content content for normal state + @param style style for normal state + @param selectedContent content for selection state + @param selectedStyle style for selection state + @return instance + */ +- (instancetype _Nonnull)initWithContent:(TTGTextTagContent *_Nonnull)content + style:(TTGTextTagStyle *_Nonnull)style + selectedContent:(TTGTextTagContent *_Nullable)selectedContent + selectedStyle:(TTGTextTagStyle *_Nullable)selectedStyle; + +/** + Tag with single content and style + + @param content content for both normal and selection state. + @param style style for both normal and selection state. + @return instance + */ ++ (instancetype _Nonnull)tagWithContent:(TTGTextTagContent *_Nonnull)content + style:(TTGTextTagStyle *_Nonnull)style; + +/** + Tag with different content and style + + @param content content for normal state + @param style style for normal state + @param selectedContent content for selection state + @param selectedStyle style for selection state + @return instance + */ ++ (instancetype _Nonnull)tagWithContent:(TTGTextTagContent *_Nonnull)content + style:(TTGTextTagStyle *_Nonnull)style + selectedContent:(TTGTextTagContent *_Nullable)selectedContent + selectedStyle:(TTGTextTagStyle *_Nullable)selectedStyle; + +/** + Get current state rightful content + + @return content + */ +- (TTGTextTagContent *_Nonnull)getRightfulContent; + +/** + Get current state rightful style + + @return style + */ +- (TTGTextTagStyle *_Nonnull)getRightfulStyle; + +/// Base system methods +- (BOOL)isEqual:(id _Nullable)other; +- (BOOL)isEqualToTag:(TTGTextTag *_Nullable)tag; +- (NSUInteger)hash; + +/// Copy +- (id _Nonnull)copyWithZone:(NSZone *_Nullable)zone; + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTag.m b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTag.m new file mode 100644 index 0000000..a9e008d --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTag.m @@ -0,0 +1,123 @@ +// +// TTGTextTag.m +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTextTag.h" +#import "TTGTextTagStringContent.h" + +static NSUInteger TTGTextTagAutoIncreasedId = 0; + +@implementation TTGTextTag + +- (instancetype)initWithContent:(TTGTextTagContent *)content + style:(TTGTextTagStyle *)style { + self = [self init]; + if (self) { + self.content = content; + self.style = style; + } + return self; +} + +- (instancetype)initWithContent:(TTGTextTagContent *)content + style:(TTGTextTagStyle *)style + selectedContent:(TTGTextTagContent *)selectedContent + selectedStyle:(TTGTextTagStyle *)selectedStyle { + self = [self init]; + if (self) { + self.content = content; + self.style = style; + self.selectedContent = selectedContent; + self.selectedStyle = selectedStyle; + } + return self; +} + ++ (instancetype)tagWithContent:(TTGTextTagContent *)content + style:(TTGTextTagStyle *)style { + return [[self alloc] initWithContent:content style:style]; +} + ++ (instancetype)tagWithContent:(TTGTextTagContent *)content + style:(TTGTextTagStyle *)style + selectedContent:(TTGTextTagContent *)selectedContent + selectedStyle:(TTGTextTagStyle *)selectedStyle { + return [[self alloc] initWithContent:content + style:style + selectedContent:selectedContent + selectedStyle:selectedStyle]; +} + +- (instancetype)init { + self = [super init]; + if (self) { + _tagId = TTGTextTagAutoIncreasedId++; + _attachment = nil; + } + return self; +} + +- (TTGTextTagContent *)selectedContent { + if (_selectedContent == nil) { + _selectedContent = [_content copy]; + } + return _selectedContent; +} + +- (TTGTextTagStyle *)selectedStyle { + if (_selectedStyle == nil) { + _selectedStyle = [_style copy]; + } + return _selectedStyle; +} + +- (TTGTextTagContent *)getRightfulContent { + return _selected ? self.selectedContent : self.content; +} + +- (TTGTextTagStyle *)getRightfulStyle { + return _selected ? self.selectedStyle : self.style; +} + +- (BOOL)isEqual:(id)other { + if (other == self) + return YES; + if (!other || ![[other class] isEqual:[self class]]) + return NO; + + return [self isEqualToTag:other]; +} + +- (BOOL)isEqualToTag:(TTGTextTag *)tag { + if (self == tag) + return YES; + if (tag == nil) + return NO; + if (self.tagId != tag.tagId) + return NO; + return YES; +} + +- (NSUInteger)hash { + return (NSUInteger)self.tagId; +} + +- (id)copyWithZone:(nullable NSZone *)zone { + TTGTextTag *copy = (TTGTextTag *)[[[self class] allocWithZone:zone] init]; + if (copy != nil) { + copy->_tagId = TTGTextTagAutoIncreasedId++; + copy.attachment = self.attachment; + copy.content = self.content; + copy.style = self.style; + copy.selected = self.selected; + copy.selectedContent = self.selectedContent; + copy.selectedStyle = self.selectedStyle; + } + return copy; +} + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagAttributedStringContent.h b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagAttributedStringContent.h new file mode 100644 index 0000000..1d62aae --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagAttributedStringContent.h @@ -0,0 +1,29 @@ +// +// TTGTextTagAttributedStringContent.h +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTextTagContent.h" + +/** + Rich text content for tag + */ +@interface TTGTextTagAttributedStringContent : TTGTextTagContent + +/// Attributed text +@property (nonatomic, copy) NSAttributedString * _Nonnull attributedText; + +/// Init with rich text +- (instancetype _Nonnull)initWithAttributedText:(NSAttributedString *_Nonnull)attributedText; + +/// Content with rich text ++ (instancetype _Nonnull)contentWithAttributedText:(NSAttributedString *_Nonnull)attributedText; + +/// Base system methods +- (id _Nonnull)copyWithZone:(NSZone *_Nullable)zone; +- (NSString *_Nonnull)description; + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagAttributedStringContent.m b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagAttributedStringContent.m new file mode 100644 index 0000000..3a46e3e --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagAttributedStringContent.m @@ -0,0 +1,48 @@ +// +// TTGTextTagAttributedStringContent.m +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTextTagAttributedStringContent.h" + +@implementation TTGTextTagAttributedStringContent + +- (instancetype)initWithAttributedText:(NSAttributedString *)attributedText { + self = [super init]; + if (self) { + self.attributedText = attributedText; + } + return self; +} + ++ (instancetype)contentWithAttributedText:(NSAttributedString *)attributedText { + return [[self alloc] initWithAttributedText:attributedText]; +} + +- (NSAttributedString *)getContentAttributedString { + return self.attributedText; +} + +- (NSAttributedString *)attributedText { + return _attributedText ?: [NSAttributedString new]; +} + +- (id)copyWithZone:(NSZone *)zone { + TTGTextTagAttributedStringContent *copy = (TTGTextTagAttributedStringContent *)[super copyWithZone:zone]; + if (copy != nil) { + copy.attributedText = self.attributedText; + } + return copy; +} + +- (NSString *)description { + NSMutableString *description = [NSMutableString stringWithFormat:@"<%@: ", NSStringFromClass([self class])]; + [description appendFormat:@"self.attributedText=%@", self.attributedText]; + [description appendString:@">"]; + return description; +} + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagCollectionView.h b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagCollectionView.h new file mode 100644 index 0000000..bfe6af0 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagCollectionView.h @@ -0,0 +1,124 @@ +// +// TTGTextTagCollectionView.h +// Pods +// +// Created by zekunyan on 15/12/26. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import + +#import "TTGTagCollectionView.h" +#import "TTGTextTag.h" +#import "TTGTextTagStringContent.h" +#import "TTGTextTagAttributedStringContent.h" + +/** + Highly useful for text tag display. + */ + +@class TTGTextTagCollectionView; + +/// Delegate +@protocol TTGTextTagCollectionViewDelegate +@optional + +- (BOOL)textTagCollectionView:(TTGTextTagCollectionView *)textTagCollectionView + canTapTag:(TTGTextTag *)tag + atIndex:(NSUInteger)index; + +- (void)textTagCollectionView:(TTGTextTagCollectionView *)textTagCollectionView + didTapTag:(TTGTextTag *)tag + atIndex:(NSUInteger)index; + +- (void)textTagCollectionView:(TTGTextTagCollectionView *)textTagCollectionView + updateContentSize:(CGSize)contentSize; +@end + +/// Main Class +@interface TTGTextTagCollectionView : UIView +/// Delegate +@property (weak, nonatomic) id delegate; + +/// Inside scrollView +@property (nonatomic, strong, readonly) UIScrollView *scrollView; + +/// Define if the tag can be selected. +@property (assign, nonatomic) BOOL enableTagSelection; + +/// Tags scroll direction, default is vertical. +@property (nonatomic, assign) TTGTagCollectionScrollDirection scrollDirection; + +/// Tags layout alignment, default is left. +@property (nonatomic, assign) TTGTagCollectionAlignment alignment; + +/// Number of lines. 0 means no limit, default is 0 for vertical and 1 for horizontal. +@property (nonatomic, assign) NSUInteger numberOfLines; +/// The real number of lines ignoring the numberOfLines value +@property (nonatomic, assign, readonly) NSUInteger actualNumberOfLines; + +/// Tag selection limit, default is 0, means no limit +@property (nonatomic, assign) NSUInteger selectionLimit; + +/// Horizontal and vertical space between tags, default is 4. +@property (assign, nonatomic) CGFloat horizontalSpacing; +@property (assign, nonatomic) CGFloat verticalSpacing; + +/// Content inset, like padding, default is UIEdgeInsetsMake(2, 2, 2, 2). +@property (nonatomic, assign) UIEdgeInsets contentInset; + +/// The true tags content size, readonly +@property (nonatomic, assign, readonly) CGSize contentSize; + +/// Manual content height +/// Default = NO, set will update content +@property (nonatomic, assign) BOOL manualCalculateHeight; +/// Default = 0, set will update content +@property (nonatomic, assign) CGFloat preferredMaxLayoutWidth; + +/// Scroll indicator +@property (nonatomic, assign) BOOL showsHorizontalScrollIndicator; +@property (nonatomic, assign) BOOL showsVerticalScrollIndicator; + +/// Tap blank area callback +@property (nonatomic, copy) void (^onTapBlankArea)(CGPoint location); +/// Tap all area callback +@property (nonatomic, copy) void (^onTapAllArea)(CGPoint location); + +/// Reload +- (void)reload; + +/// Add +- (void)addTag:(TTGTextTag *)tag; +- (void)addTags:(NSArray *)tags; + +/// Insert +- (void)insertTag:(TTGTextTag *)tag atIndex:(NSUInteger)index; +- (void)insertTags:(NSArray *)tags atIndex:(NSUInteger)index; + +/// Update +- (void)updateTagAtIndex:(NSUInteger)index selected:(BOOL)selected; +- (void)updateTagAtIndex:(NSUInteger)index withNewTag:(TTGTextTag *)tag; + +/// Remove +- (void)removeTag:(TTGTextTag *)tag; +- (void)removeTagById:(NSUInteger)tagId; +- (void)removeTagAtIndex:(NSUInteger)index; +- (void)removeAllTags; + +/// Get tag +- (TTGTextTag *)getTagAtIndex:(NSUInteger)index; +- (NSArray *)getTagsInRange:(NSRange)range; + +/// Get all +- (NSArray *)allTags; +- (NSArray *)allSelectedTags; +- (NSArray *)allNotSelectedTags; + +/** + * Returns the index of the tag located at the specified point. + * If item at point is not found, returns NSNotFound. + */ +- (NSInteger)indexOfTagAtPoint:(CGPoint)point; + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagCollectionView.m b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagCollectionView.m new file mode 100644 index 0000000..b1ef6a2 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagCollectionView.m @@ -0,0 +1,639 @@ +// +// TTGTextTagCollectionView.m +// Pods +// +// Created by zekunyan on 15/12/26. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTextTagCollectionView.h" + +#pragma mark - TTGTextTagGradientLabel + +@interface TTGTextTagGradientLabel : UILabel +@end + +@implementation TTGTextTagGradientLabel ++ (Class)layerClass { + return [CAGradientLayer class]; +} +@end + +#pragma mark - TTGTextTagLabel + +@interface TTGTextTagComponentView : UIView +@property (nonatomic, strong) TTGTextTag *config; +@property (nonatomic, strong) TTGTextTagGradientLabel *label; +@property (nonatomic, strong) CAShapeLayer *borderLayer; + +- (BOOL)isEqual:(id)other; + +- (BOOL)isEqualToComponentView:(TTGTextTagComponentView *)label; + +- (NSUInteger)hash; +@end + +@implementation TTGTextTagComponentView + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self commonInit]; + } + return self; +} + +- (void)commonInit { + _label = [[TTGTextTagGradientLabel alloc] initWithFrame:self.bounds]; + _label.textAlignment = NSTextAlignmentCenter; + _label.userInteractionEnabled = YES; + [self addSubview:_label]; +} + +#pragma mark - Layout + +- (void)layoutSubviews { + [super layoutSubviews]; + + // Update frame + _label.frame = self.bounds; + + // Get new path + UIBezierPath *path = [self getNewPath]; + // Mask + [self updateMaskWithPath:path]; + // Border + [self updateBorderWithPath:path]; + // Shadow + [self updateShadowWithPath:path]; +} + +#pragma mark - intrinsicContentSize + +- (CGSize)intrinsicContentSize { + return _label.intrinsicContentSize; +} + +#pragma mark - Apply config + +- (void)updateContent { + // Content + _label.attributedText = _config.getRightfulContent.getContentAttributedString; +} + +- (void)updateContentStyle { + // Normal background + _label.backgroundColor = _config.getRightfulStyle.backgroundColor; + + // Text alignment + _label.textAlignment = _config.getRightfulStyle.textAlignment; + + // Gradient background + if (_config.getRightfulStyle.enableGradientBackground) { + _label.backgroundColor = [UIColor clearColor]; + ((CAGradientLayer *)_label.layer).colors = @[(id)_config.getRightfulStyle.gradientBackgroundStartColor.CGColor, + (id)_config.getRightfulStyle.gradientBackgroundEndColor.CGColor]; + ((CAGradientLayer *)_label.layer).startPoint = _config.getRightfulStyle.gradientBackgroundStartPoint; + ((CAGradientLayer *)_label.layer).endPoint = _config.getRightfulStyle.gradientBackgroundEndPoint; + } +} + +- (void)updateFrameWithMaxSize:(CGSize)maxSize { + [_label sizeToFit]; + + CGSize finalSize = _label.frame.size; + + finalSize.width += _config.getRightfulStyle.extraSpace.width; + finalSize.height += _config.getRightfulStyle.extraSpace.height; + + if (_config.getRightfulStyle.maxWidth > 0 && finalSize.width > _config.getRightfulStyle.maxWidth) { + finalSize.width = _config.getRightfulStyle.maxWidth; + } + if (_config.getRightfulStyle.minWidth > 0 && finalSize.width < _config.getRightfulStyle.minWidth) { + finalSize.width = _config.getRightfulStyle.minWidth; + } + if (_config.getRightfulStyle.exactWidth > 0) { + finalSize.width = _config.getRightfulStyle.exactWidth; + } + if (_config.getRightfulStyle.exactHeight > 0) { + finalSize.height = _config.getRightfulStyle.exactHeight; + } + + if (maxSize.width > 0) { + finalSize.width = MIN(maxSize.width, finalSize.width); + } + if (maxSize.height > 0) { + finalSize.height = MIN(maxSize.height, finalSize.height); + } + + CGRect frame = self.frame; + frame.size = finalSize; + self.frame = frame; + _label.frame = self.bounds; +} + +- (void)updateShadowWithPath:(UIBezierPath *)path { + self.layer.shadowColor = _config.getRightfulStyle.shadowColor.CGColor; + self.layer.shadowOffset = _config.getRightfulStyle.shadowOffset; + self.layer.shadowRadius = _config.getRightfulStyle.shadowRadius; + self.layer.shadowOpacity = (float)_config.getRightfulStyle.shadowOpacity; + self.layer.shadowPath = path.CGPath; + self.layer.shouldRasterize = YES; + [self.layer setRasterizationScale:[[UIScreen mainScreen] scale]]; +} + +- (void)updateMaskWithPath:(UIBezierPath *)path { + CAShapeLayer *maskLayer = [CAShapeLayer layer]; + maskLayer.frame = self.bounds; + maskLayer.path = path.CGPath; + _label.layer.mask = maskLayer; +} + +- (void)updateBorderWithPath:(UIBezierPath *)path { + if (!_borderLayer) { + _borderLayer = [CAShapeLayer new]; + } + [_borderLayer removeFromSuperlayer]; + _borderLayer.frame = self.bounds; + _borderLayer.path = path.CGPath; + _borderLayer.fillColor = nil; + _borderLayer.opacity = 1; + _borderLayer.lineWidth = _config.getRightfulStyle.borderWidth; + _borderLayer.strokeColor = _config.getRightfulStyle.borderColor.CGColor; + _borderLayer.lineCap = kCALineCapRound; + _borderLayer.lineJoin = kCALineJoinRound; + [self.layer addSublayer:_borderLayer]; +} + +- (UIBezierPath *)getNewPath { + // Round corner + UIRectCorner corners = (UIRectCorner)-1; + if (_config.getRightfulStyle.cornerTopLeft) { + corners = UIRectCornerTopLeft; + } + if (_config.getRightfulStyle.cornerTopRight) { + if (corners == -1) { + corners = UIRectCornerTopRight; + } else { + corners = corners | UIRectCornerTopRight; + } + } + if (_config.getRightfulStyle.cornerBottomLeft) { + if (corners == -1) { + corners = UIRectCornerBottomLeft; + } else { + corners = corners | UIRectCornerBottomLeft; + } + } + if (_config.getRightfulStyle.cornerBottomRight) { + if (corners == -1) { + corners = UIRectCornerBottomRight; + } else { + corners = corners | UIRectCornerBottomRight; + } + } + + // Corner radius + CGFloat currentCornerRadius = _config.getRightfulStyle.cornerRadius; + + // Path + UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.bounds + byRoundingCorners:corners + cornerRadii:CGSizeMake(currentCornerRadius, currentCornerRadius)]; + return path; +} + +#pragma mark - Base + +- (BOOL)isEqual:(id)other { + if (other == self) + return YES; + if (!other || ![[other class] isEqual:[self class]]) + return NO; + return [self isEqualToComponentView:other]; +} + +- (BOOL)isEqualToComponentView:(TTGTextTagComponentView *)label { + if (self == label) + return YES; + if (label == nil) + return NO; + if (self.config != label.config && ![self.config isEqualToTag:label.config]) + return NO; + return YES; +} + +- (NSUInteger)hash { + return [self.config hash]; +} + +@end + +#pragma mark - TTGTextTagCollectionView + +@interface TTGTextTagCollectionView () +@property (strong, atomic) NSMutableArray *tagLabels; +@property (strong, nonatomic) TTGTagCollectionView *tagCollectionView; +@end + +@implementation TTGTextTagCollectionView + +#pragma mark - Init + +- (instancetype)initWithFrame:(CGRect)frame { + self = [super initWithFrame:frame]; + if (self) { + [self commonInit]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + self = [super initWithCoder:coder]; + if (self) { + [self commonInit]; + } + return self; +} + +- (void)commonInit { + if (_tagCollectionView) { + return; + } + + _enableTagSelection = YES; + _tagLabels = [NSMutableArray new]; + + _tagCollectionView = [[TTGTagCollectionView alloc] initWithFrame:self.bounds]; + _tagCollectionView.delegate = self; + _tagCollectionView.dataSource = self; + _tagCollectionView.horizontalSpacing = 8; + _tagCollectionView.verticalSpacing = 8; + [self addSubview:_tagCollectionView]; +} + +#pragma mark - Override + +- (CGSize)intrinsicContentSize { + return [_tagCollectionView intrinsicContentSize]; +} + +- (void)layoutSubviews { + [super layoutSubviews]; + if (!CGRectEqualToRect(_tagCollectionView.frame, self.bounds)) { + [self updateAllLabelStyleAndFrame]; + _tagCollectionView.frame = self.bounds; + [_tagCollectionView setNeedsLayout]; + [_tagCollectionView layoutIfNeeded]; + [self invalidateIntrinsicContentSize]; + } +} + +- (CGSize)sizeThatFits:(CGSize)size { + return self.contentSize; +} + +#pragma mark - Public methods + +- (void)reload { + [self updateAllLabelStyleAndFrame]; + [_tagCollectionView reload]; + [self invalidateIntrinsicContentSize]; +} + +- (void)addTag:(TTGTextTag *)tag { + [self insertTag:tag atIndex:_tagLabels.count]; +} + +- (void)addTags:(NSArray *)tags { + [self insertTags:tags atIndex:_tagLabels.count]; +} + +- (void)insertTag:(TTGTextTag *)tag atIndex:(NSUInteger)index { + if ([tag isKindOfClass:[TTGTextTag class]]) { + [self insertTags:@[tag] atIndex:index]; + } +} + +- (void)insertTags:(NSArray *)tags atIndex:(NSUInteger)index { + if (![tags isKindOfClass:[NSArray class]] || index > _tagLabels.count || tags.count == 0) { + return; + } + + NSMutableArray *newTagLabels = [NSMutableArray new]; + for (TTGTextTag *tag in tags) { + if ([tag isKindOfClass:[TTGTextTag class]]) { + TTGTextTagComponentView *label = [self newLabelWithConfig:tag]; + [newTagLabels addObject:label]; + } + } + [_tagLabels insertObjects:newTagLabels atIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(index, newTagLabels.count)]]; +} + +- (void)removeTag:(TTGTextTag *)tag { + if ([tag isKindOfClass:[TTGTextTag class]]) { + [self removeTagById:tag.tagId]; + } +} + +- (void)removeTagById:(NSUInteger)tagId { + TTGTextTagComponentView *labelToRemove = nil; + for (TTGTextTagComponentView *label in _tagLabels) { + if (label.config.tagId == tagId) { + labelToRemove = label; + } + } + if (labelToRemove) { + [_tagLabels removeObject:labelToRemove]; + } +} + +- (void)removeTagAtIndex:(NSUInteger)index { + if (index >= _tagLabels.count) { + return; + } + [_tagLabels removeObjectAtIndex:index]; +} + +- (void)removeAllTags { + [_tagLabels removeAllObjects]; +} + +- (void)updateTagAtIndex:(NSUInteger)index selected:(BOOL)selected { + TTGTextTag *tag = [self getTagAtIndex:index]; + tag.selected = selected; +} + +- (void)updateTagAtIndex:(NSUInteger)index withNewTag:(TTGTextTag *)tag { + if (index < _tagLabels.count && [tag isKindOfClass:[TTGTextTag class]]) { + TTGTextTagComponentView *label = _tagLabels[index]; + label.config = tag; + [label updateContent]; + } +} + +- (TTGTextTag *)getTagAtIndex:(NSUInteger)index { + if (index < _tagLabels.count) { + return _tagLabels[index].config; + } else { + return nil; + } +} + +- (NSArray *)getTagsInRange:(NSRange)range { + if (NSMaxRange(range) <= _tagLabels.count) { + NSMutableArray *tags = [NSMutableArray new]; + for (TTGTextTagComponentView *label in [_tagLabels subarrayWithRange:range]) { + if (label.config) { + [tags addObject:label.config]; + } + } + return [tags copy]; + } else { + return nil; + } +} + +- (NSArray *)allTags { + NSMutableArray *allTags = [NSMutableArray new]; + + for (TTGTextTagComponentView *label in _tagLabels) { + if (label.config) { + [allTags addObject:label.config]; + } + } + + return [allTags copy]; +} + +- (NSArray *)allSelectedTags { + NSMutableArray *allTags = [NSMutableArray new]; + + for (TTGTextTagComponentView *label in _tagLabels) { + if (label.config.selected) { + [allTags addObject:label.config]; + } + } + + return [allTags copy]; +} + +- (NSArray *)allNotSelectedTags { + NSMutableArray *allTags = [NSMutableArray new]; + + for (TTGTextTagComponentView *label in _tagLabels) { + if (label.config && !label.config.selected) { + [allTags addObject:label.config]; + } + } + + return [allTags copy]; +} + +- (NSInteger)indexOfTagAtPoint:(CGPoint)point { + CGPoint convertedPoint = [self convertPoint:point toView:_tagCollectionView]; + return [_tagCollectionView indexOfTagAt:convertedPoint]; +} + +#pragma mark - TTGTagCollectionViewDataSource + +- (NSUInteger)numberOfTagsInTagCollectionView:(TTGTagCollectionView *)tagCollectionView { + return _tagLabels.count; +} + +- (UIView *)tagCollectionView:(TTGTagCollectionView *)tagCollectionView tagViewForIndex:(NSUInteger)index { + return _tagLabels[index]; +} + +#pragma mark - TTGTagCollectionViewDelegate + +- (BOOL)tagCollectionView:(TTGTagCollectionView *)tagCollectionView shouldSelectTag:(UIView *)tagView atIndex:(NSUInteger)index { + if (_enableTagSelection) { + TTGTextTagComponentView *label = _tagLabels[index]; + + if ([self.delegate respondsToSelector:@selector(textTagCollectionView:canTapTag:atIndex:)]) { + return [self.delegate textTagCollectionView:self canTapTag:label.config atIndex:index]; + } else { + return YES; + } + } else { + return NO; + } +} + +- (void)tagCollectionView:(TTGTagCollectionView *)tagCollectionView didSelectTag:(UIView *)tagView atIndex:(NSUInteger)index { + if (_enableTagSelection) { + TTGTextTagComponentView *label = _tagLabels[index]; + + + if (_selectionLimit == 1) { + for (TTGTextTagComponentView *tag in _tagLabels) { + tag.config.selected = false; + } + } + + label.config.selected = !label.config.selected; + + if (self.alignment == TTGTagCollectionAlignmentFillByExpandingWidth || + self.alignment == TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine) { + [self reload]; + } else { + [self updateStyleAndFrameForLabel:label]; + } + + if ([_delegate respondsToSelector:@selector(textTagCollectionView:didTapTag:atIndex:)]) { + [_delegate textTagCollectionView:self didTapTag:label.config atIndex:index]; + } + } +} + +- (CGSize)tagCollectionView:(TTGTagCollectionView *)tagCollectionView sizeForTagAtIndex:(NSUInteger)index { + return _tagLabels[index].frame.size; +} + +- (void)tagCollectionView:(TTGTagCollectionView *)tagCollectionView updateContentSize:(CGSize)contentSize { + if ([_delegate respondsToSelector:@selector(textTagCollectionView:updateContentSize:)]) { + [_delegate textTagCollectionView:self updateContentSize:contentSize]; + } +} + +#pragma mark - Setter and Getter + +- (UIScrollView *)scrollView { + return _tagCollectionView.scrollView; +} + +- (CGFloat)horizontalSpacing { + return _tagCollectionView.horizontalSpacing; +} + +- (void)setHorizontalSpacing:(CGFloat)horizontalSpacing { + _tagCollectionView.horizontalSpacing = horizontalSpacing; +} + +- (CGFloat)verticalSpacing { + return _tagCollectionView.verticalSpacing; +} + +- (void)setVerticalSpacing:(CGFloat)verticalSpacing { + _tagCollectionView.verticalSpacing = verticalSpacing; +} + +- (CGSize)contentSize { + return _tagCollectionView.contentSize; +} + +- (TTGTagCollectionScrollDirection)scrollDirection { + return _tagCollectionView.scrollDirection; +} + +- (void)setScrollDirection:(TTGTagCollectionScrollDirection)scrollDirection { + _tagCollectionView.scrollDirection = scrollDirection; +} + +- (TTGTagCollectionAlignment)alignment { + return _tagCollectionView.alignment; +} + +- (void)setAlignment:(TTGTagCollectionAlignment)alignment { + _tagCollectionView.alignment = alignment; +} + +- (NSUInteger)numberOfLines { + return _tagCollectionView.numberOfLines; +} + +- (void)setNumberOfLines:(NSUInteger)numberOfLines { + _tagCollectionView.numberOfLines = numberOfLines; +} + +- (NSUInteger)actualNumberOfLines { + return _tagCollectionView.actualNumberOfLines; +} + +- (UIEdgeInsets)contentInset { + return _tagCollectionView.contentInset; +} + +- (void)setContentInset:(UIEdgeInsets)contentInset { + _tagCollectionView.contentInset = contentInset; +} + +- (BOOL)manualCalculateHeight { + return _tagCollectionView.manualCalculateHeight; +} + +- (void)setManualCalculateHeight:(BOOL)manualCalculateHeight { + _tagCollectionView.manualCalculateHeight = manualCalculateHeight; +} + +- (CGFloat)preferredMaxLayoutWidth { + return _tagCollectionView.preferredMaxLayoutWidth; +} + +- (void)setPreferredMaxLayoutWidth:(CGFloat)preferredMaxLayoutWidth { + _tagCollectionView.preferredMaxLayoutWidth = preferredMaxLayoutWidth; +} + +- (void)setShowsHorizontalScrollIndicator:(BOOL)showsHorizontalScrollIndicator { + _tagCollectionView.showsHorizontalScrollIndicator = showsHorizontalScrollIndicator; +} + +- (BOOL)showsHorizontalScrollIndicator { + return _tagCollectionView.showsHorizontalScrollIndicator; +} + +- (void)setShowsVerticalScrollIndicator:(BOOL)showsVerticalScrollIndicator { + _tagCollectionView.showsVerticalScrollIndicator = showsVerticalScrollIndicator; +} + +- (BOOL)showsVerticalScrollIndicator { + return _tagCollectionView.showsVerticalScrollIndicator; +} + +- (void)setOnTapBlankArea:(void (^)(CGPoint location))onTapBlankArea { + _tagCollectionView.onTapBlankArea = onTapBlankArea; +} + +- (void (^)(CGPoint location))onTapBlankArea { + return _tagCollectionView.onTapBlankArea; +} + +- (void)setOnTapAllArea:(void (^)(CGPoint location))onTapAllArea { + _tagCollectionView.onTapAllArea = onTapAllArea; +} + +- (void (^)(CGPoint location))onTapAllArea { + return _tagCollectionView.onTapAllArea; +} + +#pragma mark - Private methods + +- (void)updateAllLabelStyleAndFrame { + for (TTGTextTagComponentView *label in _tagLabels) { + [self updateStyleAndFrameForLabel:label]; + } +} + +- (void)updateStyleAndFrameForLabel:(TTGTextTagComponentView *)label { + // Update content + [label updateContent]; + // Update content style + [label updateContentStyle]; + // Width limit for vertical scroll direction + CGSize maxSize = CGSizeZero; + if (self.scrollDirection == TTGTagCollectionScrollDirectionVertical && + CGRectGetWidth(self.bounds) > 0) { + maxSize.width = (CGRectGetWidth(self.bounds) - self.contentInset.left - self.contentInset.right); + } + // Update frame + [label updateFrameWithMaxSize:maxSize]; +} + +- (TTGTextTagComponentView *)newLabelWithConfig:(TTGTextTag *)config { + TTGTextTagComponentView *label = [TTGTextTagComponentView new]; + label.config = config; + return label; +} + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagContent.h b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagContent.h new file mode 100644 index 0000000..5a54495 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagContent.h @@ -0,0 +1,23 @@ +// +// TTGTextTagContent.h +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import + +/** + Base content class. + Do not use this class directly! + */ +@interface TTGTextTagContent : NSObject + +/// Must be override by subClass +- (NSAttributedString *_Nonnull)getContentAttributedString; + +/// Must be override by subClass +- (id _Nonnull)copyWithZone:(NSZone *_Nullable)zone; + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagContent.m b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagContent.m new file mode 100644 index 0000000..0a98b11 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagContent.m @@ -0,0 +1,22 @@ +// +// TTGTextTagContent.m +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTextTagContent.h" + +@implementation TTGTextTagContent + +- (NSAttributedString *)getContentAttributedString { + NSAssert(NO, @"Do not use TTGTextTagContent directly."); + return [NSAttributedString new]; +} + +- (id)copyWithZone:(NSZone *)zone { + return [[[self class] allocWithZone:zone] init]; +} + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStringContent.h b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStringContent.h new file mode 100644 index 0000000..f49e440 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStringContent.h @@ -0,0 +1,39 @@ +// +// TTGTextTagStringContent.h +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTextTagContent.h" + +/** + Normal text content with custom font and color. + */ +@interface TTGTextTagStringContent : TTGTextTagContent + +/// Text +@property (nonatomic, copy) NSString * _Nonnull text; +/// Text font +@property (nonatomic, copy) UIFont * _Nonnull textFont; +/// Text color +@property (nonatomic, copy) UIColor * _Nonnull textColor; + +/// Init +- (instancetype _Nonnull)initWithText:(NSString *_Nonnull)text; +- (instancetype _Nonnull)initWithText:(NSString *_Nonnull)text + textFont:(UIFont *_Nullable)textFont + textColor:(UIColor *_Nullable)textColor; + +/// Content ++ (instancetype _Nonnull)contentWithText:(NSString *_Nonnull)text; ++ (instancetype _Nonnull)contentWithText:(NSString *_Nonnull)text + textFont:(UIFont *_Nullable)textFont + textColor:(UIColor *_Nullable)textColor; + +/// Base system methods +- (id _Nonnull)copyWithZone:(NSZone *_Nullable)zone; +- (NSString *_Nonnull)description; + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStringContent.m b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStringContent.m new file mode 100644 index 0000000..a36ba59 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStringContent.m @@ -0,0 +1,80 @@ +// +// TTGTextTagStringContent.m +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTextTagStringContent.h" + +@implementation TTGTextTagStringContent + +- (instancetype)initWithText:(NSString *)text { + self = [super init]; + if (self) { + self.text = text; + } + return self; +} + ++ (instancetype)contentWithText:(NSString *)text { + return [[self alloc] initWithText:text]; +} + +- (instancetype)initWithText:(NSString *)text + textFont:(UIFont *)textFont + textColor:(UIColor *)textColor { + self = [super init]; + if (self) { + self.text = text; + self.textFont = textFont; + self.textColor = textColor; + } + return self; +} + ++ (instancetype)contentWithText:(NSString *)text + textFont:(UIFont *)textFont + textColor:(UIColor *)textColor { + return [[self alloc] initWithText:text + textFont:textFont + textColor:textColor]; +} + +- (NSAttributedString *)getContentAttributedString { + return [[NSAttributedString alloc] initWithString:self.text + attributes:@{NSForegroundColorAttributeName: self.textColor, + NSFontAttributeName: self.textFont}]; +} + +- (NSString *)text { + return _text ?: @""; +} + +- (UIFont *)textFont { + return _textFont ?: [UIFont systemFontOfSize:14]; +} + +- (UIColor *)textColor { + return _textColor ?: [UIColor blackColor]; +} + +- (id)copyWithZone:(NSZone *)zone { + TTGTextTagStringContent *copy = (TTGTextTagStringContent *)[super copyWithZone:zone]; + if (copy != nil) { + copy.text = self.text; + copy.textFont = self.textFont; + copy.textColor = self.textColor; + } + return copy; +} + +- (NSString *)description { + NSMutableString *description = [NSMutableString stringWithFormat:@"<%@: ", NSStringFromClass([self class])]; + [description appendFormat:@"self.text=%@", self.text]; + [description appendString:@">"]; + return description; +} + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStyle.h b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStyle.h new file mode 100644 index 0000000..ddffdeb --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStyle.h @@ -0,0 +1,65 @@ +// +// TTGTextTagStyle.h +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import +#import + +@interface TTGTextTagStyle : NSObject + +/// Background color +@property (nonatomic, copy) UIColor * _Nonnull backgroundColor; // Default is [UIColor lightGrayColor] + +/// Text alignment +@property (nonatomic, assign) NSTextAlignment textAlignment; // Default is NSTextAlignmentCenter + +/// Gradient background color +@property (nonatomic, assign) BOOL enableGradientBackground; // Default is NO +@property (nonatomic, copy) UIColor * _Nonnull gradientBackgroundStartColor; +@property (nonatomic, copy) UIColor * _Nonnull gradientBackgroundEndColor; +@property (nonatomic, assign) CGPoint gradientBackgroundStartPoint; +@property (nonatomic, assign) CGPoint gradientBackgroundEndPoint; + +/// Corner radius +@property (nonatomic, assign) CGFloat cornerRadius; // Default is 4 +@property (nonatomic, assign) Boolean cornerTopRight; +@property (nonatomic, assign) Boolean cornerTopLeft; +@property (nonatomic, assign) Boolean cornerBottomRight; +@property (nonatomic, assign) Boolean cornerBottomLeft; + +/// Border +@property (nonatomic, assign) CGFloat borderWidth; // Default is [UIColor whiteColor] +@property (nonatomic, copy) UIColor * _Nonnull borderColor; // Default is 1 + +/// Shadow. +@property (nonatomic, copy) UIColor * _Nonnull shadowColor; // Default is [UIColor blackColor] +@property (nonatomic, assign) CGSize shadowOffset; // Default is (2, 2) +@property (nonatomic, assign) CGFloat shadowRadius; // Default is 2f +@property (nonatomic, assign) CGFloat shadowOpacity; // Default is 0.3f + +/// Extra space in width and height, will expand each tag's size +@property (nonatomic, assign) CGSize extraSpace; + +/// Max width for a text tag. 0 and below means no max width. +@property (nonatomic, assign) CGFloat maxWidth; +/// Min width for a text tag. 0 and below means no min width. +@property (nonatomic, assign) CGFloat minWidth; + +/// Max height for a text tag. 0 and below means no max height. +@property (nonatomic, assign) CGFloat maxHeight; +/// Min height for a text tag. 0 and below means no min height. +@property (nonatomic, assign) CGFloat minHeight; + +/// Exact width. 0 and below means no work +@property (nonatomic, assign) CGFloat exactWidth; +/// Exact height. 0 and below means no work +@property (nonatomic, assign) CGFloat exactHeight; + +/// Copy +- (id _Nonnull)copyWithZone:(NSZone *_Nullable)zone; + +@end diff --git a/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStyle.m b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStyle.m new file mode 100644 index 0000000..43629e5 --- /dev/null +++ b/QuickLocation/UIKit/TTGTagCollectionView/TTGTextTagStyle.m @@ -0,0 +1,84 @@ +// +// TTGTextTagStyle.m +// TTGTagCollectionView +// +// Created by zekunyan on 2019/5/24. +// Copyright (c) 2021 zekunyan. All rights reserved. +// + +#import "TTGTextTagStyle.h" + +@implementation TTGTextTagStyle + +- (instancetype)init { + self = [super init]; + if (self) { + _backgroundColor = [UIColor lightGrayColor]; + _textAlignment = NSTextAlignmentCenter; + _enableGradientBackground = NO; + _cornerRadius = 4; + _borderColor = [UIColor whiteColor]; + _borderWidth = 1; + _shadowColor = [UIColor blackColor]; + _shadowOffset = CGSizeMake(2, 2); + _shadowRadius = 2; + _shadowOpacity = 0.3; + } + return self; +} + +- (id)copyWithZone:(NSZone *)zone { + TTGTextTagStyle *copy = (TTGTextTagStyle *)[[[self class] allocWithZone:zone] init]; + + if (copy != nil) { + copy.backgroundColor = self.backgroundColor; + copy.textAlignment = self.textAlignment; + copy.enableGradientBackground = self.enableGradientBackground; + copy.gradientBackgroundStartColor = self.gradientBackgroundStartColor; + copy.gradientBackgroundEndColor = self.gradientBackgroundEndColor; + copy.gradientBackgroundStartPoint = self.gradientBackgroundStartPoint; + copy.gradientBackgroundEndPoint = self.gradientBackgroundEndPoint; + copy.cornerRadius = self.cornerRadius; + copy.cornerTopRight = self.cornerTopRight; + copy.cornerTopLeft = self.cornerTopLeft; + copy.cornerBottomRight = self.cornerBottomRight; + copy.cornerBottomLeft = self.cornerBottomLeft; + copy.borderWidth = self.borderWidth; + copy.borderColor = self.borderColor; + copy.shadowColor = self.shadowColor; + copy.shadowOffset = self.shadowOffset; + copy.shadowRadius = self.shadowRadius; + copy.shadowOpacity = self.shadowOpacity; + copy.extraSpace = self.extraSpace; + copy.maxWidth = self.maxWidth; + copy.minWidth = self.minWidth; + copy.maxHeight = self.maxHeight; + copy.minHeight = self.minHeight; + copy.exactWidth = self.exactWidth; + copy.exactHeight = self.exactHeight; + } + + return copy; +} + +- (UIColor *)backgroundColor { + return _backgroundColor ?: [UIColor clearColor]; +} + +- (UIColor *)gradientBackgroundStartColor { + return _gradientBackgroundStartColor ?: [UIColor clearColor]; +} + +- (UIColor *)gradientBackgroundEndColor { + return _gradientBackgroundEndColor ?: [UIColor clearColor]; +} + +- (UIColor *)borderColor { + return _borderColor ?: [UIColor clearColor]; +} + +- (UIColor *)shadowColor { + return _shadowColor ?: [UIColor clearColor]; +} + +@end